@unbrained/pm-cli 2026.6.24 → 2026.7.1

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 (744) hide show
  1. package/AGENTS.md +2 -0
  2. package/CHANGELOG.md +113 -1
  3. package/CONTRIBUTING.md +30 -0
  4. package/README.md +16 -3
  5. package/dist/cli/bootstrap-args.js +89 -79
  6. package/dist/cli/bootstrap-args.js.map +1 -1
  7. package/dist/cli/commander-usage.js +3 -3
  8. package/dist/cli/commander-usage.js.map +1 -1
  9. package/dist/cli/commands/aggregate.js +8 -7
  10. package/dist/cli/commands/aggregate.js.map +1 -1
  11. package/dist/cli/commands/calendar.js +63 -62
  12. package/dist/cli/commands/calendar.js.map +1 -1
  13. package/dist/cli/commands/close.d.ts +2 -4
  14. package/dist/cli/commands/close.js +5 -17
  15. package/dist/cli/commands/close.js.map +1 -1
  16. package/dist/cli/commands/completion.js +158 -9
  17. package/dist/cli/commands/completion.js.map +1 -1
  18. package/dist/cli/commands/config.d.ts +1 -1
  19. package/dist/cli/commands/config.js +2 -2
  20. package/dist/cli/commands/config.js.map +1 -1
  21. package/dist/cli/commands/context.d.ts +31 -4
  22. package/dist/cli/commands/context.js +33 -10
  23. package/dist/cli/commands/context.js.map +1 -1
  24. package/dist/cli/commands/contracts.js +48 -8
  25. package/dist/cli/commands/contracts.js.map +1 -1
  26. package/dist/cli/commands/create.d.ts +1 -6
  27. package/dist/cli/commands/create.js +491 -587
  28. package/dist/cli/commands/create.js.map +1 -1
  29. package/dist/cli/commands/extension/bundled-catalog.js +59 -46
  30. package/dist/cli/commands/extension/bundled-catalog.js.map +1 -1
  31. package/dist/cli/commands/extension/describe.d.ts +15 -0
  32. package/dist/cli/commands/extension/describe.js +48 -2
  33. package/dist/cli/commands/extension/describe.js.map +1 -1
  34. package/dist/cli/commands/extension/doctor.js +129 -75
  35. package/dist/cli/commands/extension/doctor.js.map +1 -1
  36. package/dist/cli/commands/extension/install-sources.js +37 -7
  37. package/dist/cli/commands/extension/install-sources.js.map +1 -1
  38. package/dist/cli/commands/extension/managed-state.js +101 -57
  39. package/dist/cli/commands/extension/managed-state.js.map +1 -1
  40. package/dist/cli/commands/extension/scaffold.d.ts +38 -8
  41. package/dist/cli/commands/extension/scaffold.js +1956 -242
  42. package/dist/cli/commands/extension/scaffold.js.map +1 -1
  43. package/dist/cli/commands/extension.d.ts +28 -3
  44. package/dist/cli/commands/extension.js +1181 -880
  45. package/dist/cli/commands/extension.js.map +1 -1
  46. package/dist/cli/commands/index.d.ts +3 -1
  47. package/dist/cli/commands/index.js +5 -3
  48. package/dist/cli/commands/index.js.map +1 -1
  49. package/dist/cli/commands/item-filter-options.d.ts +63 -0
  50. package/dist/cli/commands/item-filter-options.js +10 -0
  51. package/dist/cli/commands/item-filter-options.js.map +1 -0
  52. package/dist/cli/commands/legacy-none-tokens.d.ts +14 -0
  53. package/dist/cli/commands/legacy-none-tokens.js +31 -2
  54. package/dist/cli/commands/legacy-none-tokens.js.map +1 -1
  55. package/dist/cli/commands/linked-artifacts.d.ts +7 -0
  56. package/dist/cli/commands/linked-artifacts.js +12 -2
  57. package/dist/cli/commands/linked-artifacts.js.map +1 -1
  58. package/dist/cli/commands/list-filter-shared.js +55 -48
  59. package/dist/cli/commands/list-filter-shared.js.map +1 -1
  60. package/dist/cli/commands/list.d.ts +16 -39
  61. package/dist/cli/commands/list.js +127 -118
  62. package/dist/cli/commands/list.js.map +1 -1
  63. package/dist/cli/commands/next.d.ts +98 -0
  64. package/dist/cli/commands/next.js +304 -0
  65. package/dist/cli/commands/next.js.map +1 -0
  66. package/dist/cli/commands/profile.d.ts +208 -0
  67. package/dist/cli/commands/profile.js +418 -0
  68. package/dist/cli/commands/profile.js.map +1 -0
  69. package/dist/cli/commands/repeatable-metadata-parsers.js +12 -13
  70. package/dist/cli/commands/repeatable-metadata-parsers.js.map +1 -1
  71. package/dist/cli/commands/schema.d.ts +7 -0
  72. package/dist/cli/commands/schema.js +9 -3
  73. package/dist/cli/commands/schema.js.map +1 -1
  74. package/dist/cli/commands/search.d.ts +2 -39
  75. package/dist/cli/commands/search.js +196 -172
  76. package/dist/cli/commands/search.js.map +1 -1
  77. package/dist/cli/commands/shared-unset-fields.d.ts +30 -0
  78. package/dist/cli/commands/shared-unset-fields.js +161 -0
  79. package/dist/cli/commands/shared-unset-fields.js.map +1 -0
  80. package/dist/cli/commands/stats.js +15 -3
  81. package/dist/cli/commands/stats.js.map +1 -1
  82. package/dist/cli/commands/test.js +115 -125
  83. package/dist/cli/commands/test.js.map +1 -1
  84. package/dist/cli/commands/update.d.ts +1 -6
  85. package/dist/cli/commands/update.js +37 -232
  86. package/dist/cli/commands/update.js.map +1 -1
  87. package/dist/cli/commands/validate.js +20 -5
  88. package/dist/cli/commands/validate.js.map +1 -1
  89. package/dist/cli/extension-command-options.js +48 -21
  90. package/dist/cli/extension-command-options.js.map +1 -1
  91. package/dist/cli/help-content.js +26 -2
  92. package/dist/cli/help-content.js.map +1 -1
  93. package/dist/cli/help-json-payload.js +3 -3
  94. package/dist/cli/help-json-payload.js.map +1 -1
  95. package/dist/cli/main.js +27 -12
  96. package/dist/cli/main.js.map +1 -1
  97. package/dist/cli/register-list-query.js +42 -3
  98. package/dist/cli/register-list-query.js.map +1 -1
  99. package/dist/cli/register-mutation.js +86 -2
  100. package/dist/cli/register-mutation.js.map +1 -1
  101. package/dist/cli/register-setup.js +67 -6
  102. package/dist/cli/register-setup.js.map +1 -1
  103. package/dist/cli/registration-helpers.d.ts +9 -1
  104. package/dist/cli/registration-helpers.js +149 -123
  105. package/dist/cli/registration-helpers.js.map +1 -1
  106. package/dist/cli-bundle/chunks/activity-AW6XVFH6.js +16 -0
  107. package/dist/cli-bundle/chunks/{activity-N7RVTLBQ.js → activity-DBLQVIP6.js} +9 -11
  108. package/dist/cli-bundle/chunks/{aggregate-63NWNIBR.js → aggregate-JTEF4BP7.js} +17 -18
  109. package/dist/cli-bundle/chunks/aggregate-JTEF4BP7.js.map +1 -0
  110. package/dist/cli-bundle/chunks/{aggregate-YHCYX2EV.js → aggregate-SDF7DUOD.js} +16 -17
  111. package/dist/cli-bundle/chunks/aggregate-SDF7DUOD.js.map +7 -0
  112. package/dist/cli-bundle/chunks/{append-VLQQDHMJ.js → append-LOVPGVPT.js} +8 -10
  113. package/dist/cli-bundle/chunks/{append-VLQQDHMJ.js.map → append-LOVPGVPT.js.map} +1 -1
  114. package/dist/cli-bundle/chunks/{append-PUKREFV5.js → append-QCFJSDFL.js} +10 -12
  115. package/dist/cli-bundle/chunks/{append-PUKREFV5.js.map → append-QCFJSDFL.js.map} +1 -1
  116. package/dist/cli-bundle/chunks/{chunk-ABYCA5VX.js → chunk-22WKIL3H.js} +9 -11
  117. package/dist/cli-bundle/chunks/{chunk-ABYCA5VX.js.map → chunk-22WKIL3H.js.map} +1 -1
  118. package/dist/cli-bundle/chunks/{chunk-A66VYUOV.js → chunk-2466X6E4.js} +9 -11
  119. package/dist/cli-bundle/chunks/{chunk-A66VYUOV.js.map → chunk-2466X6E4.js.map} +1 -1
  120. package/dist/cli-bundle/chunks/{chunk-F32L4HR6.js → chunk-27BXPBAY.js} +3 -3
  121. package/dist/cli-bundle/chunks/{schema-QO5I4FBL.js → chunk-2D4HATP2.js} +136 -66
  122. package/dist/cli-bundle/chunks/chunk-2D4HATP2.js.map +1 -0
  123. package/dist/cli-bundle/chunks/{chunk-J7I4C5ZB.js → chunk-3J6JRJ3I.js} +153 -125
  124. package/dist/cli-bundle/chunks/chunk-3J6JRJ3I.js.map +7 -0
  125. package/dist/cli-bundle/chunks/{chunk-OHDQNKJB.js → chunk-3K2M5OYU.js} +106 -34
  126. package/dist/cli-bundle/chunks/chunk-3K2M5OYU.js.map +7 -0
  127. package/dist/cli-bundle/chunks/{chunk-XVYKWZNL.js → chunk-3S2KT7NG.js} +127 -127
  128. package/dist/cli-bundle/chunks/chunk-3S2KT7NG.js.map +7 -0
  129. package/dist/cli-bundle/chunks/{chunk-5BBEWX6C.js → chunk-3VGN2UWE.js} +2 -2
  130. package/dist/cli-bundle/chunks/{chunk-N5B6WZC5.js → chunk-3XZCOZ5J.js} +115 -123
  131. package/dist/cli-bundle/chunks/chunk-3XZCOZ5J.js.map +1 -0
  132. package/dist/cli-bundle/chunks/chunk-4A3BJ675.js +799 -0
  133. package/dist/cli-bundle/chunks/chunk-4A3BJ675.js.map +1 -0
  134. package/dist/cli-bundle/chunks/chunk-4BU75MF4.js +87 -0
  135. package/dist/cli-bundle/chunks/chunk-4BU75MF4.js.map +7 -0
  136. package/dist/cli-bundle/chunks/{chunk-HZF5RLKX.js → chunk-4DSGXSBL.js} +5 -7
  137. package/dist/cli-bundle/chunks/{chunk-HZF5RLKX.js.map → chunk-4DSGXSBL.js.map} +1 -1
  138. package/dist/cli-bundle/chunks/{chunk-JV27C7OZ.js → chunk-4DUVCVLZ.js} +4 -6
  139. package/dist/cli-bundle/chunks/{chunk-JV27C7OZ.js.map → chunk-4DUVCVLZ.js.map} +1 -1
  140. package/dist/cli-bundle/chunks/{chunk-IAP5KYBQ.js → chunk-4XOIEKSD.js} +563 -506
  141. package/dist/cli-bundle/chunks/chunk-4XOIEKSD.js.map +1 -0
  142. package/dist/cli-bundle/chunks/{context-5LB7UGKE.js → chunk-55SNVXRQ.js} +79 -82
  143. package/dist/cli-bundle/chunks/chunk-55SNVXRQ.js.map +7 -0
  144. package/dist/cli-bundle/chunks/{chunk-BFFO3AIB.js → chunk-5CGRF3L5.js} +128 -128
  145. package/dist/cli-bundle/chunks/chunk-5CGRF3L5.js.map +1 -0
  146. package/dist/cli-bundle/chunks/{chunk-JKL6HRMV.js → chunk-5QFDBI4F.js} +1260 -1046
  147. package/dist/cli-bundle/chunks/chunk-5QFDBI4F.js.map +7 -0
  148. package/dist/cli-bundle/chunks/{chunk-LU36E6GU.js → chunk-64HNBBFQ.js} +8 -12
  149. package/dist/cli-bundle/chunks/{chunk-LU36E6GU.js.map → chunk-64HNBBFQ.js.map} +1 -1
  150. package/dist/cli-bundle/chunks/chunk-6AQZPVHQ.js +2444 -0
  151. package/dist/cli-bundle/chunks/chunk-6AQZPVHQ.js.map +1 -0
  152. package/dist/cli-bundle/chunks/chunk-7M2HAZEB.js +17 -0
  153. package/dist/cli-bundle/chunks/chunk-7M2HAZEB.js.map +7 -0
  154. package/dist/cli-bundle/chunks/{chunk-VSAABFGQ.js → chunk-7R4QEMZZ.js} +1490 -734
  155. package/dist/cli-bundle/chunks/chunk-7R4QEMZZ.js.map +1 -0
  156. package/dist/cli-bundle/chunks/{chunk-M6TUBOGW.js → chunk-A7FPBAQS.js} +19 -12
  157. package/dist/cli-bundle/chunks/chunk-A7FPBAQS.js.map +1 -0
  158. package/dist/cli-bundle/chunks/{chunk-GQYJEEFX.js → chunk-AVEE5EHK.js} +53 -54
  159. package/dist/cli-bundle/chunks/chunk-AVEE5EHK.js.map +1 -0
  160. package/dist/cli-bundle/chunks/{chunk-FMWW2JDU.js → chunk-AXIDKKAT.js} +2 -2
  161. package/dist/cli-bundle/chunks/{chunk-TIM4OD74.js → chunk-BDTISOSD.js} +2 -2
  162. package/dist/cli-bundle/chunks/{chunk-C4C3EJCJ.js → chunk-BHO33VBQ.js} +509 -363
  163. package/dist/cli-bundle/chunks/chunk-BHO33VBQ.js.map +7 -0
  164. package/dist/cli-bundle/chunks/{chunk-6W3Y65PL.js → chunk-BZCEN4JA.js} +198 -177
  165. package/dist/cli-bundle/chunks/chunk-BZCEN4JA.js.map +7 -0
  166. package/dist/cli-bundle/chunks/{chunk-RRP6D345.js → chunk-CF7RL6FR.js} +12 -16
  167. package/dist/cli-bundle/chunks/{chunk-RRP6D345.js.map → chunk-CF7RL6FR.js.map} +1 -1
  168. package/dist/cli-bundle/chunks/{chunk-HC2S36NB.js → chunk-CWFNTKQJ.js} +154 -126
  169. package/dist/cli-bundle/chunks/chunk-CWFNTKQJ.js.map +1 -0
  170. package/dist/cli-bundle/chunks/chunk-CZVISY5A.js +87 -0
  171. package/dist/cli-bundle/chunks/chunk-CZVISY5A.js.map +7 -0
  172. package/dist/cli-bundle/chunks/{chunk-CZIFFMZI.js → chunk-DDPTYJIM.js} +2 -2
  173. package/dist/cli-bundle/chunks/{chunk-AYPQUFCX.js → chunk-EJUDVUYZ.js} +3 -3
  174. package/dist/cli-bundle/chunks/{chunk-EOGBMLCE.js → chunk-EVMTBV6V.js} +3 -3
  175. package/dist/cli-bundle/chunks/{chunk-RAWA3Y7O.js → chunk-FFMQB7WR.js} +199 -178
  176. package/dist/cli-bundle/chunks/chunk-FFMQB7WR.js.map +1 -0
  177. package/dist/cli-bundle/chunks/{chunk-CG3KP6I5.js → chunk-G7I7DEZA.js} +4 -4
  178. package/dist/cli-bundle/chunks/{chunk-MEXZ5XUM.js → chunk-GJ326ZKX.js} +53 -54
  179. package/dist/cli-bundle/chunks/chunk-GJ326ZKX.js.map +7 -0
  180. package/dist/cli-bundle/chunks/chunk-HPPFYYOV.js +119 -0
  181. package/dist/cli-bundle/chunks/chunk-HPPFYYOV.js.map +7 -0
  182. package/dist/cli-bundle/chunks/{chunk-OF7V47P3.js → chunk-HXTQJXWT.js} +2172 -2146
  183. package/dist/cli-bundle/chunks/chunk-HXTQJXWT.js.map +1 -0
  184. package/dist/cli-bundle/chunks/{chunk-F4BNR2IN.js → chunk-HYTGA6GI.js} +3 -3
  185. package/dist/cli-bundle/chunks/{chunk-2WCYE3IF.js → chunk-HZZEHPRG.js} +2 -2
  186. package/dist/cli-bundle/chunks/chunk-IBMFIKVS.js +14 -0
  187. package/dist/cli-bundle/chunks/chunk-IBMFIKVS.js.map +1 -0
  188. package/dist/cli-bundle/chunks/{chunk-YV2OSAMS.js → chunk-IJYK2T43.js} +2 -2
  189. package/dist/cli-bundle/chunks/{chunk-4XDGYFHL.js → chunk-IPYBJWTE.js} +10 -14
  190. package/dist/cli-bundle/chunks/{chunk-4XDGYFHL.js.map → chunk-IPYBJWTE.js.map} +1 -1
  191. package/dist/cli-bundle/chunks/{chunk-6EBNFQOR.js → chunk-IZBR4NRW.js} +10 -14
  192. package/dist/cli-bundle/chunks/{chunk-6EBNFQOR.js.map → chunk-IZBR4NRW.js.map} +1 -1
  193. package/dist/cli-bundle/chunks/{chunk-VFJYVXHL.js → chunk-JLM7BHI7.js} +7 -9
  194. package/dist/cli-bundle/chunks/{chunk-VFJYVXHL.js.map → chunk-JLM7BHI7.js.map} +1 -1
  195. package/dist/cli-bundle/chunks/{chunk-6EL7SW5C.js → chunk-JMP4E6D7.js} +114 -122
  196. package/dist/cli-bundle/chunks/chunk-JMP4E6D7.js.map +7 -0
  197. package/dist/cli-bundle/chunks/{chunk-QOUOMPHO.js → chunk-JPECA746.js} +2 -2
  198. package/dist/cli-bundle/chunks/{chunk-KJZOSF7J.js → chunk-JSU5P7VS.js} +100 -35
  199. package/dist/cli-bundle/chunks/chunk-JSU5P7VS.js.map +1 -0
  200. package/dist/cli-bundle/chunks/{context-55VEOYI3.js → chunk-JWXRETDF.js} +79 -82
  201. package/dist/cli-bundle/chunks/chunk-JWXRETDF.js.map +1 -0
  202. package/dist/cli-bundle/chunks/{chunk-OQ2E64FH.js → chunk-KNPEF7QG.js} +4 -4
  203. package/dist/cli-bundle/chunks/{chunk-3BKH2CL3.js → chunk-L5OEFZQG.js} +3 -3
  204. package/dist/cli-bundle/chunks/{chunk-DTABLLVE.js → chunk-LB6TP6MC.js} +5 -7
  205. package/dist/cli-bundle/chunks/{chunk-DTABLLVE.js.map → chunk-LB6TP6MC.js.map} +2 -2
  206. package/dist/cli-bundle/chunks/{chunk-TSI32UEL.js → chunk-MAUKX7JC.js} +6 -8
  207. package/dist/cli-bundle/chunks/{chunk-TSI32UEL.js.map → chunk-MAUKX7JC.js.map} +1 -1
  208. package/dist/cli-bundle/chunks/{chunk-SMXSDY7J.js → chunk-MDPEOIGN.js} +2221 -2172
  209. package/dist/cli-bundle/chunks/chunk-MDPEOIGN.js.map +7 -0
  210. package/dist/cli-bundle/chunks/{chunk-5S4ZGDB2.js → chunk-N74UMG5H.js} +2 -2
  211. package/dist/cli-bundle/chunks/{chunk-IXAZI443.js → chunk-NFDPYAIP.js} +2 -2
  212. package/dist/cli-bundle/chunks/{chunk-SKC4UTRP.js → chunk-NKZAN7BD.js} +3 -3
  213. package/dist/cli-bundle/chunks/chunk-NOLPZMSV.js +116 -0
  214. package/dist/cli-bundle/chunks/chunk-NOLPZMSV.js.map +1 -0
  215. package/dist/cli-bundle/chunks/{chunk-L7UXKP2I.js → chunk-NU2UEROZ.js} +1257 -1029
  216. package/dist/cli-bundle/chunks/chunk-NU2UEROZ.js.map +1 -0
  217. package/dist/cli-bundle/chunks/{chunk-HBAEFWX3.js → chunk-NUHHPVVS.js} +65 -335
  218. package/dist/cli-bundle/chunks/chunk-NUHHPVVS.js.map +7 -0
  219. package/dist/cli-bundle/chunks/{chunk-JPJDP4VU.js → chunk-NWMZWYYB.js} +2 -2
  220. package/dist/cli-bundle/chunks/{chunk-MWMHZOZZ.js → chunk-OGXLACHC.js} +10 -14
  221. package/dist/cli-bundle/chunks/{chunk-MWMHZOZZ.js.map → chunk-OGXLACHC.js.map} +1 -1
  222. package/dist/cli-bundle/chunks/chunk-OKQ22KTH.js +379 -0
  223. package/dist/cli-bundle/chunks/chunk-OKQ22KTH.js.map +1 -0
  224. package/dist/cli-bundle/chunks/{chunk-KKX4Z2SE.js → chunk-OTUHB4HS.js} +4 -4
  225. package/dist/cli-bundle/chunks/{chunk-ZLWRPBOW.js → chunk-QCWF6IYD.js} +510 -364
  226. package/dist/cli-bundle/chunks/chunk-QCWF6IYD.js.map +1 -0
  227. package/dist/cli-bundle/chunks/{chunk-PRVTGX64.js → chunk-RGEMWD6Q.js} +11 -23
  228. package/dist/cli-bundle/chunks/chunk-RGEMWD6Q.js.map +7 -0
  229. package/dist/cli-bundle/chunks/chunk-RH5ZBYFD.js +809 -0
  230. package/dist/cli-bundle/chunks/chunk-RH5ZBYFD.js.map +7 -0
  231. package/dist/cli-bundle/chunks/{chunk-ALQKV6U7.js → chunk-RLDHZHQS.js} +12 -16
  232. package/dist/cli-bundle/chunks/{chunk-ALQKV6U7.js.map → chunk-RLDHZHQS.js.map} +1 -1
  233. package/dist/cli-bundle/chunks/{schema-C6QA367T.js → chunk-RMMQ74TG.js} +144 -67
  234. package/dist/cli-bundle/chunks/chunk-RMMQ74TG.js.map +7 -0
  235. package/dist/cli-bundle/chunks/{chunk-EYPINTFR.js → chunk-RVUALSJF.js} +1516 -753
  236. package/dist/cli-bundle/chunks/chunk-RVUALSJF.js.map +7 -0
  237. package/dist/cli-bundle/chunks/chunk-SDR5J34Q.js +2468 -0
  238. package/dist/cli-bundle/chunks/chunk-SDR5J34Q.js.map +7 -0
  239. package/dist/cli-bundle/chunks/{chunk-WB5BYQMF.js → chunk-SLMUGTK3.js} +4 -4
  240. package/dist/cli-bundle/chunks/{chunk-SUREE24M.js → chunk-TP5Q5ZD3.js} +12 -24
  241. package/dist/cli-bundle/chunks/chunk-TP5Q5ZD3.js.map +1 -0
  242. package/dist/cli-bundle/chunks/{chunk-UACWNBL2.js → chunk-UYUYDGIB.js} +7 -9
  243. package/dist/cli-bundle/chunks/{chunk-UACWNBL2.js.map → chunk-UYUYDGIB.js.map} +1 -1
  244. package/dist/cli-bundle/chunks/{chunk-V4UYNSEM.js → chunk-UZIWVBE6.js} +6 -8
  245. package/dist/cli-bundle/chunks/{chunk-V4UYNSEM.js.map → chunk-UZIWVBE6.js.map} +1 -1
  246. package/dist/cli-bundle/chunks/{chunk-EWRSXOIZ.js → chunk-V3NOKJF2.js} +11 -13
  247. package/dist/cli-bundle/chunks/{chunk-EWRSXOIZ.js.map → chunk-V3NOKJF2.js.map} +1 -1
  248. package/dist/cli-bundle/chunks/{chunk-XXKV4UWE.js → chunk-VARHOHYV.js} +571 -507
  249. package/dist/cli-bundle/chunks/chunk-VARHOHYV.js.map +7 -0
  250. package/dist/cli-bundle/chunks/{chunk-AEACLRVH.js → chunk-VICZWYGZ.js} +18 -11
  251. package/dist/cli-bundle/chunks/chunk-VICZWYGZ.js.map +7 -0
  252. package/dist/cli-bundle/chunks/chunk-VY3VQ22F.js +84 -0
  253. package/dist/cli-bundle/chunks/chunk-VY3VQ22F.js.map +1 -0
  254. package/dist/cli-bundle/chunks/chunk-VZDBVEZR.js +382 -0
  255. package/dist/cli-bundle/chunks/chunk-VZDBVEZR.js.map +7 -0
  256. package/dist/cli-bundle/chunks/{chunk-GDUMGZK3.js → chunk-W4ULYO7Z.js} +11 -13
  257. package/dist/cli-bundle/chunks/{chunk-GDUMGZK3.js.map → chunk-W4ULYO7Z.js.map} +1 -1
  258. package/dist/cli-bundle/chunks/{chunk-I6QMJ2XT.js → chunk-WYDHYJPO.js} +2 -2
  259. package/dist/cli-bundle/chunks/{chunk-ALKFCIIB.js → chunk-YITK2PJ6.js} +9 -11
  260. package/dist/cli-bundle/chunks/{chunk-ALKFCIIB.js.map → chunk-YITK2PJ6.js.map} +1 -1
  261. package/dist/cli-bundle/chunks/chunk-YJIEJRZB.js +84 -0
  262. package/dist/cli-bundle/chunks/chunk-YJIEJRZB.js.map +1 -0
  263. package/dist/cli-bundle/chunks/{chunk-LNEDHJNQ.js → chunk-ZETXE4SE.js} +66 -329
  264. package/dist/cli-bundle/chunks/chunk-ZETXE4SE.js.map +1 -0
  265. package/dist/cli-bundle/chunks/{chunk-KIEAK7YE.js → chunk-ZRP4VG5U.js} +2 -2
  266. package/dist/cli-bundle/chunks/{claim-FZZZCAY6.js → claim-EMQLYPRW.js} +10 -12
  267. package/dist/cli-bundle/chunks/{claim-FZZZCAY6.js.map → claim-EMQLYPRW.js.map} +1 -1
  268. package/dist/cli-bundle/chunks/{claim-XK5QBZE3.js → claim-T3GCKV7C.js} +8 -10
  269. package/dist/cli-bundle/chunks/{claim-XK5QBZE3.js.map → claim-T3GCKV7C.js.map} +1 -1
  270. package/dist/cli-bundle/chunks/close-E6ZZGCJY.js +14 -0
  271. package/dist/cli-bundle/chunks/{close-QHMVWM7M.js → close-TQYAAFJP.js} +7 -8
  272. package/dist/cli-bundle/chunks/{close-many-OIXJE2JZ.js → close-many-BG5QQIDQ.js} +16 -18
  273. package/dist/cli-bundle/chunks/{close-many-OIXJE2JZ.js.map → close-many-BG5QQIDQ.js.map} +1 -1
  274. package/dist/cli-bundle/chunks/{close-many-SUU5BS2C.js → close-many-LDRVEQY2.js} +18 -20
  275. package/dist/cli-bundle/chunks/{close-many-SUU5BS2C.js.map → close-many-LDRVEQY2.js.map} +1 -1
  276. package/dist/cli-bundle/chunks/{comments-5YM62D75.js → comments-QCKR2YY2.js} +11 -13
  277. package/dist/cli-bundle/chunks/{comments-5YM62D75.js.map → comments-QCKR2YY2.js.map} +1 -1
  278. package/dist/cli-bundle/chunks/{comments-RH3IBIRH.js → comments-YUXJRZPQ.js} +9 -11
  279. package/dist/cli-bundle/chunks/{comments-RH3IBIRH.js.map → comments-YUXJRZPQ.js.map} +1 -1
  280. package/dist/cli-bundle/chunks/{config-NCNNWF6R.js → config-DMSU64QO.js} +18 -387
  281. package/dist/cli-bundle/chunks/config-DMSU64QO.js.map +7 -0
  282. package/dist/cli-bundle/chunks/{config-SW3U7XP2.js → config-QH2DICD6.js} +18 -380
  283. package/dist/cli-bundle/chunks/config-QH2DICD6.js.map +1 -0
  284. package/dist/cli-bundle/chunks/context-B6275WPX.js +46 -0
  285. package/dist/cli-bundle/chunks/context-OCZ3FJ4Z.js +42 -0
  286. package/dist/cli-bundle/chunks/{contracts-SY6PDFIK.js → contracts-HN7ABKLP.js} +72 -15
  287. package/dist/cli-bundle/chunks/contracts-HN7ABKLP.js.map +7 -0
  288. package/dist/cli-bundle/chunks/{contracts-JXFGBOYT.js → contracts-W4FZVVD6.js} +72 -15
  289. package/dist/cli-bundle/chunks/contracts-W4FZVVD6.js.map +1 -0
  290. package/dist/cli-bundle/chunks/{copy-N3GE6FYS.js → copy-BTJOSKKT.js} +7 -11
  291. package/dist/cli-bundle/chunks/{copy-N3GE6FYS.js.map → copy-BTJOSKKT.js.map} +1 -1
  292. package/dist/cli-bundle/chunks/{copy-IEDBJOOX.js → copy-DEM4DATS.js} +9 -13
  293. package/dist/cli-bundle/chunks/{copy-IEDBJOOX.js.map → copy-DEM4DATS.js.map} +1 -1
  294. package/dist/cli-bundle/chunks/create-OH3BDGBB.js +28 -0
  295. package/dist/cli-bundle/chunks/{create-O4VONGPG.js → create-RLRJMRTM.js} +12 -14
  296. package/dist/cli-bundle/chunks/{delete-LPEIF7RU.js → delete-BHK7VB2Z.js} +5 -7
  297. package/dist/cli-bundle/chunks/{delete-LPEIF7RU.js.map → delete-BHK7VB2Z.js.map} +1 -1
  298. package/dist/cli-bundle/chunks/{delete-724EQ6OS.js → delete-LSVHAB4Y.js} +7 -9
  299. package/dist/cli-bundle/chunks/{delete-724EQ6OS.js.map → delete-LSVHAB4Y.js.map} +1 -1
  300. package/dist/cli-bundle/chunks/{deps-RSBU4SIU.js → deps-4UDFJRUA.js} +8 -11
  301. package/dist/cli-bundle/chunks/{deps-RSBU4SIU.js.map → deps-4UDFJRUA.js.map} +1 -1
  302. package/dist/cli-bundle/chunks/{deps-T3Y6Y7RT.js → deps-XHYXWEPT.js} +6 -9
  303. package/dist/cli-bundle/chunks/{deps-T3Y6Y7RT.js.map → deps-XHYXWEPT.js.map} +1 -1
  304. package/dist/cli-bundle/chunks/{docs-IFS7HZPP.js → docs-26S44RXU.js} +8 -9
  305. package/dist/cli-bundle/chunks/{docs-IFS7HZPP.js.map → docs-26S44RXU.js.map} +1 -1
  306. package/dist/cli-bundle/chunks/{docs-75ZLCO3G.js → docs-GYZNVS26.js} +10 -11
  307. package/dist/cli-bundle/chunks/{docs-75ZLCO3G.js.map → docs-GYZNVS26.js.map} +1 -1
  308. package/dist/cli-bundle/chunks/{eval-L2KD7W3M.js → eval-PGRVIJQU.js} +12 -14
  309. package/dist/cli-bundle/chunks/{eval-L2KD7W3M.js.map → eval-PGRVIJQU.js.map} +1 -1
  310. package/dist/cli-bundle/chunks/{eval-QGR7JCQO.js → eval-UYF3ZPVO.js} +10 -12
  311. package/dist/cli-bundle/chunks/{eval-QGR7JCQO.js.map → eval-UYF3ZPVO.js.map} +1 -1
  312. package/dist/cli-bundle/chunks/{extension-YQF4CPIR.js → extension-CPSLJQVE.js} +12 -7
  313. package/dist/cli-bundle/chunks/{extension-3JYWJ5K2.js → extension-CXJ6RELI.js} +12 -7
  314. package/dist/cli-bundle/chunks/{files-EPEJMJHQ.js → files-MBNICQFM.js} +9 -11
  315. package/dist/cli-bundle/chunks/{files-EPEJMJHQ.js.map → files-MBNICQFM.js.map} +1 -1
  316. package/dist/cli-bundle/chunks/{files-5BQWDRDT.js → files-NQHEXUZD.js} +11 -13
  317. package/dist/cli-bundle/chunks/{files-5BQWDRDT.js.map → files-NQHEXUZD.js.map} +1 -1
  318. package/dist/cli-bundle/chunks/{focus-RWGKD76E.js → focus-DWYIG7GU.js} +10 -14
  319. package/dist/cli-bundle/chunks/{focus-RWGKD76E.js.map → focus-DWYIG7GU.js.map} +1 -1
  320. package/dist/cli-bundle/chunks/{focus-DQVJAPOE.js → focus-XZW5423D.js} +8 -12
  321. package/dist/cli-bundle/chunks/{focus-DQVJAPOE.js.map → focus-XZW5423D.js.map} +1 -1
  322. package/dist/cli-bundle/chunks/{gc-BEJMQT64.js → gc-7GQYOS2G.js} +3 -3
  323. package/dist/cli-bundle/chunks/{gc-JEFQDJPA.js → gc-LPVMKJQJ.js} +3 -3
  324. package/dist/cli-bundle/chunks/{get-LQG6PEVG.js → get-A7MAOHCU.js} +10 -13
  325. package/dist/cli-bundle/chunks/{get-LQG6PEVG.js.map → get-A7MAOHCU.js.map} +1 -1
  326. package/dist/cli-bundle/chunks/{get-WVN75H42.js → get-DSDEKJ3L.js} +12 -15
  327. package/dist/cli-bundle/chunks/{get-WVN75H42.js.map → get-DSDEKJ3L.js.map} +1 -1
  328. package/dist/cli-bundle/chunks/{health-JJJOY7DJ.js → health-3IPFLKXB.js} +17 -17
  329. package/dist/cli-bundle/chunks/{health-P67NZ6TT.js → health-GZXGBZ36.js} +17 -17
  330. package/dist/cli-bundle/chunks/{history-RUKPKNY7.js → history-NERDJNUB.js} +8 -10
  331. package/dist/cli-bundle/chunks/history-WSZHY3PN.js +18 -0
  332. package/dist/cli-bundle/chunks/{history-compact-NQ7VPRVT.js → history-compact-2WRZ2WK4.js} +11 -14
  333. package/dist/cli-bundle/chunks/{history-compact-NQ7VPRVT.js.map → history-compact-2WRZ2WK4.js.map} +1 -1
  334. package/dist/cli-bundle/chunks/{history-compact-ZAOWR7GD.js → history-compact-HR7BB4LR.js} +13 -16
  335. package/dist/cli-bundle/chunks/{history-compact-ZAOWR7GD.js.map → history-compact-HR7BB4LR.js.map} +1 -1
  336. package/dist/cli-bundle/chunks/history-redact-MP6CH7U5.js +19 -0
  337. package/dist/cli-bundle/chunks/{history-redact-YY4XYVEP.js → history-redact-O3NBCNWC.js} +9 -11
  338. package/dist/cli-bundle/chunks/{history-repair-EHL4ODQY.js → history-repair-LCMOS45X.js} +11 -14
  339. package/dist/cli-bundle/chunks/{history-repair-EHL4ODQY.js.map → history-repair-LCMOS45X.js.map} +1 -1
  340. package/dist/cli-bundle/chunks/{history-repair-YSQH6SY6.js → history-repair-XA3LC4GA.js} +13 -16
  341. package/dist/cli-bundle/chunks/{history-repair-YSQH6SY6.js.map → history-repair-XA3LC4GA.js.map} +1 -1
  342. package/dist/cli-bundle/chunks/{init-HBFGYS66.js → init-64XDLQJB.js} +12 -11
  343. package/dist/cli-bundle/chunks/init-PAX32BJA.js +22 -0
  344. package/dist/cli-bundle/chunks/{learnings-KFQO7GEZ.js → learnings-JR6MA5TI.js} +9 -11
  345. package/dist/cli-bundle/chunks/{learnings-KFQO7GEZ.js.map → learnings-JR6MA5TI.js.map} +1 -1
  346. package/dist/cli-bundle/chunks/{learnings-J555ZFPD.js → learnings-LPKCSJX7.js} +11 -13
  347. package/dist/cli-bundle/chunks/{learnings-J555ZFPD.js.map → learnings-LPKCSJX7.js.map} +1 -1
  348. package/dist/cli-bundle/chunks/{list-C7R33MD5.js → list-DNBJVO3E.js} +10 -10
  349. package/dist/cli-bundle/chunks/{list-DSN6UNFB.js → list-G5Y65VF6.js} +10 -10
  350. package/dist/cli-bundle/chunks/next-BCERKDUR.js +277 -0
  351. package/dist/cli-bundle/chunks/next-BCERKDUR.js.map +7 -0
  352. package/dist/cli-bundle/chunks/next-FYTQF6HG.js +274 -0
  353. package/dist/cli-bundle/chunks/next-FYTQF6HG.js.map +1 -0
  354. package/dist/cli-bundle/chunks/{notes-V4VNIQL4.js → notes-2BMU3VVQ.js} +9 -11
  355. package/dist/cli-bundle/chunks/{notes-V4VNIQL4.js.map → notes-2BMU3VVQ.js.map} +1 -1
  356. package/dist/cli-bundle/chunks/{notes-VYJFN2A3.js → notes-6KTGO2OJ.js} +11 -13
  357. package/dist/cli-bundle/chunks/{notes-VYJFN2A3.js.map → notes-6KTGO2OJ.js.map} +1 -1
  358. package/dist/cli-bundle/chunks/{plan-RBHQ5PO7.js → plan-4WXEQCTN.js} +15 -18
  359. package/dist/cli-bundle/chunks/{plan-RBHQ5PO7.js.map → plan-4WXEQCTN.js.map} +1 -1
  360. package/dist/cli-bundle/chunks/{plan-DHRSVSHR.js → plan-RKZHQVXR.js} +17 -20
  361. package/dist/cli-bundle/chunks/{plan-DHRSVSHR.js.map → plan-RKZHQVXR.js.map} +1 -1
  362. package/dist/cli-bundle/chunks/profile-4OMM32CD.js +1235 -0
  363. package/dist/cli-bundle/chunks/profile-4OMM32CD.js.map +7 -0
  364. package/dist/cli-bundle/chunks/profile-QLER5ENE.js +1197 -0
  365. package/dist/cli-bundle/chunks/profile-QLER5ENE.js.map +1 -0
  366. package/dist/cli-bundle/chunks/{register-list-query-OM3E2KMY.js → register-list-query-7LV46VAU.js} +45 -21
  367. package/dist/cli-bundle/chunks/register-list-query-7LV46VAU.js.map +1 -0
  368. package/dist/cli-bundle/chunks/{register-list-query-CCMHGZTF.js → register-list-query-SNG5PGA4.js} +44 -20
  369. package/dist/cli-bundle/chunks/register-list-query-SNG5PGA4.js.map +7 -0
  370. package/dist/cli-bundle/chunks/{register-mutation-N3CDEGZU.js → register-mutation-ENNDUAZG.js} +106 -40
  371. package/dist/cli-bundle/chunks/register-mutation-ENNDUAZG.js.map +1 -0
  372. package/dist/cli-bundle/chunks/{register-mutation-UXTTWL6N.js → register-mutation-KK7PHYYU.js} +105 -39
  373. package/dist/cli-bundle/chunks/register-mutation-KK7PHYYU.js.map +7 -0
  374. package/dist/cli-bundle/chunks/{register-operations-UDIFMQKD.js → register-operations-C6OWLDSH.js} +32 -34
  375. package/dist/cli-bundle/chunks/{register-operations-UDIFMQKD.js.map → register-operations-C6OWLDSH.js.map} +1 -1
  376. package/dist/cli-bundle/chunks/{register-operations-R2FLOCRI.js → register-operations-HZ6XERQG.js} +30 -32
  377. package/dist/cli-bundle/chunks/{register-operations-R2FLOCRI.js.map → register-operations-HZ6XERQG.js.map} +1 -1
  378. package/dist/cli-bundle/chunks/{register-setup-G5LTSFYK.js → register-setup-P67EMBDJ.js} +68 -25
  379. package/dist/cli-bundle/chunks/register-setup-P67EMBDJ.js.map +1 -0
  380. package/dist/cli-bundle/chunks/{register-setup-TWHKICM2.js → register-setup-ZKJ53RS7.js} +67 -24
  381. package/dist/cli-bundle/chunks/register-setup-ZKJ53RS7.js.map +7 -0
  382. package/dist/cli-bundle/chunks/{restore-LL2WLEDG.js → restore-4MHZFJ2E.js} +9 -11
  383. package/dist/cli-bundle/chunks/restore-YALDGTQR.js +17 -0
  384. package/dist/cli-bundle/chunks/{scheduling-shortcuts-M4H2ZI64.js → scheduling-shortcuts-LB6DOLRL.js} +14 -16
  385. package/dist/cli-bundle/chunks/{scheduling-shortcuts-M4H2ZI64.js.map → scheduling-shortcuts-LB6DOLRL.js.map} +1 -1
  386. package/dist/cli-bundle/chunks/{scheduling-shortcuts-255GI3BU.js → scheduling-shortcuts-UTOYKLXQ.js} +12 -14
  387. package/dist/cli-bundle/chunks/{scheduling-shortcuts-255GI3BU.js.map → scheduling-shortcuts-UTOYKLXQ.js.map} +1 -1
  388. package/dist/cli-bundle/chunks/schema-73HR2OJW.js +75 -0
  389. package/dist/cli-bundle/chunks/schema-U6LJKSIR.js +71 -0
  390. package/dist/cli-bundle/chunks/{search-2EI6EAXH.js → search-AXPXKZER.js} +10 -12
  391. package/dist/cli-bundle/chunks/{search-QBFBLQRO.js → search-KILGT37L.js} +10 -12
  392. package/dist/cli-bundle/chunks/{stats-TKC6CAKB.js → stats-PSYVVTNZ.js} +21 -13
  393. package/dist/cli-bundle/chunks/stats-PSYVVTNZ.js.map +1 -0
  394. package/dist/cli-bundle/chunks/{stats-TCW2SZQG.js → stats-W5KNVJWQ.js} +20 -12
  395. package/dist/cli-bundle/chunks/stats-W5KNVJWQ.js.map +7 -0
  396. package/dist/cli-bundle/chunks/{telemetry-BT2VSWU2.js → telemetry-BZUF6H7G.js} +4 -4
  397. package/dist/cli-bundle/chunks/{telemetry-LQ6FRTUT.js → telemetry-GAHHQTOS.js} +4 -4
  398. package/dist/cli-bundle/chunks/test-ACD52Z3S.js +35 -0
  399. package/dist/cli-bundle/chunks/test-ACD52Z3S.js.map +7 -0
  400. package/dist/cli-bundle/chunks/{test-NV2DRPUS.js → test-PWDIZ255.js} +15 -16
  401. package/dist/cli-bundle/chunks/test-PWDIZ255.js.map +1 -0
  402. package/dist/cli-bundle/chunks/{test-all-DZ76VTPQ.js → test-all-L2MDDUCA.js} +20 -22
  403. package/dist/cli-bundle/chunks/{test-all-DZ76VTPQ.js.map → test-all-L2MDDUCA.js.map} +1 -1
  404. package/dist/cli-bundle/chunks/{test-all-REW67LXT.js → test-all-RBZ6DLU2.js} +18 -20
  405. package/dist/cli-bundle/chunks/{test-all-REW67LXT.js.map → test-all-RBZ6DLU2.js.map} +1 -1
  406. package/dist/cli-bundle/chunks/{test-runs-PX73DMMI.js → test-runs-PLRAZEFW.js} +5 -6
  407. package/dist/cli-bundle/chunks/test-runs-PLRAZEFW.js.map +7 -0
  408. package/dist/cli-bundle/chunks/{test-runs-FQ5WNQLP.js → test-runs-UXIXPDKU.js} +6 -7
  409. package/dist/cli-bundle/chunks/test-runs-UXIXPDKU.js.map +1 -0
  410. package/dist/cli-bundle/chunks/update-AMRSOIWP.js +24 -0
  411. package/dist/cli-bundle/chunks/update-AMRSOIWP.js.map +7 -0
  412. package/dist/cli-bundle/chunks/update-KFX2SIAC.js +28 -0
  413. package/dist/cli-bundle/chunks/update-KFX2SIAC.js.map +1 -0
  414. package/dist/cli-bundle/chunks/{update-many-Q5ZEI64S.js → update-many-RNSBX2TA.js} +35 -36
  415. package/dist/cli-bundle/chunks/{update-many-Q5ZEI64S.js.map → update-many-RNSBX2TA.js.map} +1 -1
  416. package/dist/cli-bundle/chunks/{update-many-2ILP6E4Y.js → update-many-Z5GJS5LC.js} +33 -34
  417. package/dist/cli-bundle/chunks/{update-many-2ILP6E4Y.js.map → update-many-Z5GJS5LC.js.map} +1 -1
  418. package/dist/cli-bundle/chunks/{upgrade-FOZKQTQF.js → upgrade-BRL6KCOJ.js} +13 -8
  419. package/dist/cli-bundle/chunks/{upgrade-FOZKQTQF.js.map → upgrade-BRL6KCOJ.js.map} +1 -1
  420. package/dist/cli-bundle/chunks/{upgrade-DHL74PQH.js → upgrade-HAK6JG2O.js} +11 -6
  421. package/dist/cli-bundle/chunks/{upgrade-DHL74PQH.js.map → upgrade-HAK6JG2O.js.map} +1 -1
  422. package/dist/cli-bundle/chunks/{validate-HYZNIB6W.js → validate-MTUVL5VC.js} +38 -28
  423. package/dist/cli-bundle/chunks/validate-MTUVL5VC.js.map +7 -0
  424. package/dist/cli-bundle/chunks/{validate-54SYJ7QW.js → validate-X5W76YJL.js} +39 -29
  425. package/dist/cli-bundle/chunks/validate-X5W76YJL.js.map +1 -0
  426. package/dist/cli-bundle/main.js +95 -724
  427. package/dist/cli-bundle/main.js.map +4 -4
  428. package/dist/core/config/positional-value.d.ts +2 -0
  429. package/dist/core/config/positional-value.js +2 -2
  430. package/dist/core/config/positional-value.js.map +1 -1
  431. package/dist/core/extensions/activation-summary-markdown.d.ts +71 -0
  432. package/dist/core/extensions/activation-summary-markdown.js +151 -0
  433. package/dist/core/extensions/activation-summary-markdown.js.map +1 -0
  434. package/dist/core/extensions/activation-summary.d.ts +2 -0
  435. package/dist/core/extensions/activation-summary.js +3 -2
  436. package/dist/core/extensions/activation-summary.js.map +1 -1
  437. package/dist/core/extensions/capability-usage.d.ts +1 -1
  438. package/dist/core/extensions/capability-usage.js +4 -3
  439. package/dist/core/extensions/capability-usage.js.map +1 -1
  440. package/dist/core/extensions/extension-policy.d.ts +18 -3
  441. package/dist/core/extensions/extension-policy.js +116 -106
  442. package/dist/core/extensions/extension-policy.js.map +1 -1
  443. package/dist/core/extensions/extension-registries.js +3 -2
  444. package/dist/core/extensions/extension-registries.js.map +1 -1
  445. package/dist/core/extensions/extension-types.d.ts +21 -1
  446. package/dist/core/extensions/extension-types.js +3 -2
  447. package/dist/core/extensions/extension-types.js.map +1 -1
  448. package/dist/core/extensions/loader.js +439 -232
  449. package/dist/core/extensions/loader.js.map +1 -1
  450. package/dist/core/fs/fs-utils.js +27 -2
  451. package/dist/core/fs/fs-utils.js.map +1 -1
  452. package/dist/core/item/actionability.d.ts +57 -0
  453. package/dist/core/item/actionability.js +178 -0
  454. package/dist/core/item/actionability.js.map +1 -0
  455. package/dist/core/item/item-format.js +523 -410
  456. package/dist/core/item/item-format.js.map +1 -1
  457. package/dist/core/item/type-registry.js +18 -45
  458. package/dist/core/item/type-registry.js.map +1 -1
  459. package/dist/core/profile/profile-describe.d.ts +64 -0
  460. package/dist/core/profile/profile-describe.js +83 -0
  461. package/dist/core/profile/profile-describe.js.map +1 -0
  462. package/dist/core/profile/profile-lint.d.ts +53 -0
  463. package/dist/core/profile/profile-lint.js +422 -0
  464. package/dist/core/profile/profile-lint.js.map +1 -0
  465. package/dist/core/profile/profile-plan.d.ts +145 -0
  466. package/dist/core/profile/profile-plan.js +0 -0
  467. package/dist/core/profile/profile-plan.js.map +1 -0
  468. package/dist/core/profile/profile-presets.d.ts +218 -0
  469. package/dist/core/profile/profile-presets.js +325 -0
  470. package/dist/core/profile/profile-presets.js.map +1 -0
  471. package/dist/core/schema/fields-file.js +25 -25
  472. package/dist/core/schema/fields-file.js.map +1 -1
  473. package/dist/core/schema/item-types-file.js +3 -3
  474. package/dist/core/schema/item-types-file.js.map +1 -1
  475. package/dist/core/schema/runtime-schema.js +4 -4
  476. package/dist/core/schema/runtime-schema.js.map +1 -1
  477. package/dist/core/schema/status-defs-file.js +3 -3
  478. package/dist/core/schema/status-defs-file.js.map +1 -1
  479. package/dist/core/shared/serialization.js +83 -62
  480. package/dist/core/shared/serialization.js.map +1 -1
  481. package/dist/core/store/item-store.d.ts +1 -0
  482. package/dist/core/store/item-store.js +16 -8
  483. package/dist/core/store/item-store.js.map +1 -1
  484. package/dist/core/store/paths.js +4 -32
  485. package/dist/core/store/paths.js.map +1 -1
  486. package/dist/core/store/settings.js +14 -14
  487. package/dist/core/store/settings.js.map +1 -1
  488. package/dist/core/telemetry/observability.js +50 -54
  489. package/dist/core/telemetry/observability.js.map +1 -1
  490. package/dist/core/telemetry/runtime.js +11 -2
  491. package/dist/core/telemetry/runtime.js.map +1 -1
  492. package/dist/core/test/background-runs.js +3 -2
  493. package/dist/core/test/background-runs.js.map +1 -1
  494. package/dist/core/validate/linked-artifact-reference.d.ts +24 -0
  495. package/dist/core/validate/linked-artifact-reference.js +41 -0
  496. package/dist/core/validate/linked-artifact-reference.js.map +1 -0
  497. package/dist/mcp/server.js +540 -420
  498. package/dist/mcp/server.js.map +1 -1
  499. package/dist/mcp/tool-definitions.js +33 -2
  500. package/dist/mcp/tool-definitions.js.map +1 -1
  501. package/dist/sdk/cli-contracts/commander-types.d.ts +1 -0
  502. package/dist/sdk/cli-contracts/commander-types.js +15 -2
  503. package/dist/sdk/cli-contracts/commander-types.js.map +1 -1
  504. package/dist/sdk/cli-contracts/enum-contracts.d.ts +3 -3
  505. package/dist/sdk/cli-contracts/enum-contracts.js +6 -2
  506. package/dist/sdk/cli-contracts/enum-contracts.js.map +1 -1
  507. package/dist/sdk/cli-contracts/flag-contracts.d.ts +149 -0
  508. package/dist/sdk/cli-contracts/flag-contracts.js +1514 -0
  509. package/dist/sdk/cli-contracts/flag-contracts.js.map +1 -0
  510. package/dist/sdk/cli-contracts/string-lists.d.ts +14 -0
  511. package/dist/sdk/cli-contracts/string-lists.js +20 -0
  512. package/dist/sdk/cli-contracts/string-lists.js.map +1 -0
  513. package/dist/sdk/cli-contracts/tool-option-contracts.d.ts +1 -1
  514. package/dist/sdk/cli-contracts/tool-option-contracts.js +51 -109
  515. package/dist/sdk/cli-contracts/tool-option-contracts.js.map +1 -1
  516. package/dist/sdk/cli-contracts/tool-parameter-tables.d.ts +17 -0
  517. package/dist/sdk/cli-contracts/tool-parameter-tables.js +54 -5
  518. package/dist/sdk/cli-contracts/tool-parameter-tables.js.map +1 -1
  519. package/dist/sdk/cli-contracts/tool-schema.d.ts +74 -0
  520. package/dist/sdk/cli-contracts/tool-schema.js +871 -0
  521. package/dist/sdk/cli-contracts/tool-schema.js.map +1 -0
  522. package/dist/sdk/cli-contracts.d.ts +13 -193
  523. package/dist/sdk/cli-contracts.js +5 -2277
  524. package/dist/sdk/cli-contracts.js.map +1 -1
  525. package/dist/sdk/compose.d.ts +11 -5
  526. package/dist/sdk/compose.js +240 -124
  527. package/dist/sdk/compose.js.map +1 -1
  528. package/dist/sdk/define.d.ts +14 -0
  529. package/dist/sdk/define.js +17 -2
  530. package/dist/sdk/define.js.map +1 -1
  531. package/dist/sdk/index.d.ts +14 -3
  532. package/dist/sdk/index.js +14 -3
  533. package/dist/sdk/index.js.map +1 -1
  534. package/dist/sdk/testing.d.ts +82 -2
  535. package/dist/sdk/testing.js +74 -3
  536. package/dist/sdk/testing.js.map +1 -1
  537. package/docs/AGENT_GUIDE.md +2 -0
  538. package/docs/CLAUDE_CODE_PLUGIN.md +2 -2
  539. package/docs/COMMANDS.md +37 -0
  540. package/docs/EXTENSIONS.md +12 -13
  541. package/docs/RELEASING.md +8 -4
  542. package/docs/SDK.md +184 -17
  543. package/docs/TESTING.md +12 -0
  544. package/docs/examples/policy-restricted-extension/README.md +6 -0
  545. package/docs/examples/policy-restricted-extension/index.ts +40 -0
  546. package/docs/examples/policy-restricted-extension/manifest.json +2 -2
  547. package/docs/examples/starter-extension/README.md +14 -2
  548. package/docs/examples/starter-extension/{index.js → index.ts} +51 -6
  549. package/docs/examples/starter-extension/manifest.json +2 -2
  550. package/package.json +20 -7
  551. package/packages/pm-beads/extensions/beads/index.ts +3 -3
  552. package/packages/pm-beads/extensions/beads/manifest.json +2 -2
  553. package/packages/pm-beads/extensions/beads/runtime-loader.ts +19 -7
  554. package/packages/pm-beads/extensions/beads/runtime.ts +155 -37
  555. package/packages/pm-calendar/extensions/calendar/index.ts +3 -3
  556. package/packages/pm-calendar/extensions/calendar/manifest.json +2 -2
  557. package/packages/pm-calendar/extensions/calendar/runtime.ts +2 -2
  558. package/packages/pm-command-kit/extensions/command-kit/index.ts +1 -1
  559. package/packages/pm-command-kit/extensions/command-kit/manifest.json +2 -2
  560. package/packages/pm-governance-audit/extensions/governance-audit/index.ts +2 -2
  561. package/packages/pm-governance-audit/extensions/governance-audit/manifest.json +2 -2
  562. package/packages/pm-governance-audit/extensions/governance-audit/runtime.ts +1 -1
  563. package/packages/pm-guide-shell/extensions/guide-shell/index.ts +2 -2
  564. package/packages/pm-guide-shell/extensions/guide-shell/manifest.json +2 -2
  565. package/packages/pm-guide-shell/extensions/guide-shell/runtime.ts +1 -1
  566. package/packages/pm-kanban/README.md +97 -0
  567. package/packages/pm-kanban/extensions/kanban/index.ts +191 -0
  568. package/packages/pm-kanban/extensions/kanban/manifest.json +19 -0
  569. package/packages/pm-kanban/package.json +57 -0
  570. package/packages/pm-lifecycle-hooks/extensions/lifecycle-hooks/index.ts +1 -1
  571. package/packages/pm-lifecycle-hooks/extensions/lifecycle-hooks/manifest.json +2 -2
  572. package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/index.ts +2 -2
  573. package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/manifest.json +2 -2
  574. package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/runtime.ts +1 -1
  575. package/packages/pm-search-advanced/extensions/search-advanced/index.ts +2 -2
  576. package/packages/pm-search-advanced/extensions/search-advanced/manifest.json +2 -2
  577. package/packages/pm-search-advanced/extensions/search-advanced/runtime.ts +1 -1
  578. package/packages/pm-templates/extensions/templates/index.ts +2 -2
  579. package/packages/pm-templates/extensions/templates/manifest.json +2 -2
  580. package/packages/pm-templates/extensions/templates/runtime.ts +1 -1
  581. package/packages/pm-todos/extensions/todos/index.ts +3 -3
  582. package/packages/pm-todos/extensions/todos/manifest.json +2 -2
  583. package/packages/pm-todos/extensions/todos/runtime-loader.ts +19 -7
  584. package/packages/pm-todos/extensions/todos/runtime.ts +177 -43
  585. package/plugins/pm-claude/scripts/pm-mcp-server.mjs +2 -2
  586. package/plugins/pm-codex/scripts/pm-mcp-server.mjs +2 -2
  587. package/scripts/bundle-cli.mjs +1 -1
  588. package/dist/cli-bundle/chunks/activity-54TXGJ2T.js +0 -18
  589. package/dist/cli-bundle/chunks/aggregate-63NWNIBR.js.map +0 -1
  590. package/dist/cli-bundle/chunks/aggregate-YHCYX2EV.js.map +0 -7
  591. package/dist/cli-bundle/chunks/chunk-6EL7SW5C.js.map +0 -7
  592. package/dist/cli-bundle/chunks/chunk-6W3Y65PL.js.map +0 -7
  593. package/dist/cli-bundle/chunks/chunk-AEACLRVH.js.map +0 -7
  594. package/dist/cli-bundle/chunks/chunk-B74BP6IS.js +0 -78
  595. package/dist/cli-bundle/chunks/chunk-B74BP6IS.js.map +0 -7
  596. package/dist/cli-bundle/chunks/chunk-BFFO3AIB.js.map +0 -1
  597. package/dist/cli-bundle/chunks/chunk-C4C3EJCJ.js.map +0 -7
  598. package/dist/cli-bundle/chunks/chunk-EYPINTFR.js.map +0 -7
  599. package/dist/cli-bundle/chunks/chunk-FBLT6WGK.js +0 -75
  600. package/dist/cli-bundle/chunks/chunk-FBLT6WGK.js.map +0 -1
  601. package/dist/cli-bundle/chunks/chunk-GQYJEEFX.js.map +0 -1
  602. package/dist/cli-bundle/chunks/chunk-HBAEFWX3.js.map +0 -7
  603. package/dist/cli-bundle/chunks/chunk-HC2S36NB.js.map +0 -1
  604. package/dist/cli-bundle/chunks/chunk-IAP5KYBQ.js.map +0 -1
  605. package/dist/cli-bundle/chunks/chunk-INPHFO33.js +0 -764
  606. package/dist/cli-bundle/chunks/chunk-INPHFO33.js.map +0 -7
  607. package/dist/cli-bundle/chunks/chunk-IOT6WRL5.js +0 -86
  608. package/dist/cli-bundle/chunks/chunk-IOT6WRL5.js.map +0 -7
  609. package/dist/cli-bundle/chunks/chunk-ISEKN64V.js +0 -35
  610. package/dist/cli-bundle/chunks/chunk-ISEKN64V.js.map +0 -7
  611. package/dist/cli-bundle/chunks/chunk-J3NMWFIN.js +0 -115
  612. package/dist/cli-bundle/chunks/chunk-J3NMWFIN.js.map +0 -1
  613. package/dist/cli-bundle/chunks/chunk-J7I4C5ZB.js.map +0 -7
  614. package/dist/cli-bundle/chunks/chunk-JKL6HRMV.js.map +0 -7
  615. package/dist/cli-bundle/chunks/chunk-KJZOSF7J.js.map +0 -1
  616. package/dist/cli-bundle/chunks/chunk-L7UXKP2I.js.map +0 -1
  617. package/dist/cli-bundle/chunks/chunk-LNEDHJNQ.js.map +0 -1
  618. package/dist/cli-bundle/chunks/chunk-M6TUBOGW.js.map +0 -1
  619. package/dist/cli-bundle/chunks/chunk-MEXZ5XUM.js.map +0 -7
  620. package/dist/cli-bundle/chunks/chunk-N5B6WZC5.js.map +0 -1
  621. package/dist/cli-bundle/chunks/chunk-NJ73ALW2.js +0 -761
  622. package/dist/cli-bundle/chunks/chunk-NJ73ALW2.js.map +0 -1
  623. package/dist/cli-bundle/chunks/chunk-NVXGVEFD.js +0 -83
  624. package/dist/cli-bundle/chunks/chunk-NVXGVEFD.js.map +0 -1
  625. package/dist/cli-bundle/chunks/chunk-OF7V47P3.js.map +0 -1
  626. package/dist/cli-bundle/chunks/chunk-OHDQNKJB.js.map +0 -7
  627. package/dist/cli-bundle/chunks/chunk-PEL2NLQE.js +0 -118
  628. package/dist/cli-bundle/chunks/chunk-PEL2NLQE.js.map +0 -7
  629. package/dist/cli-bundle/chunks/chunk-PRVTGX64.js.map +0 -7
  630. package/dist/cli-bundle/chunks/chunk-RAWA3Y7O.js.map +0 -1
  631. package/dist/cli-bundle/chunks/chunk-SMXSDY7J.js.map +0 -7
  632. package/dist/cli-bundle/chunks/chunk-SUREE24M.js.map +0 -1
  633. package/dist/cli-bundle/chunks/chunk-TKPP4GOO.js +0 -654
  634. package/dist/cli-bundle/chunks/chunk-TKPP4GOO.js.map +0 -1
  635. package/dist/cli-bundle/chunks/chunk-VSAABFGQ.js.map +0 -1
  636. package/dist/cli-bundle/chunks/chunk-W2VMLL5S.js +0 -32
  637. package/dist/cli-bundle/chunks/chunk-W2VMLL5S.js.map +0 -1
  638. package/dist/cli-bundle/chunks/chunk-XVYKWZNL.js.map +0 -7
  639. package/dist/cli-bundle/chunks/chunk-XXKV4UWE.js.map +0 -7
  640. package/dist/cli-bundle/chunks/chunk-ZLWRPBOW.js.map +0 -1
  641. package/dist/cli-bundle/chunks/chunk-ZV7IQ23N.js +0 -657
  642. package/dist/cli-bundle/chunks/chunk-ZV7IQ23N.js.map +0 -7
  643. package/dist/cli-bundle/chunks/close-JEBZXONN.js +0 -15
  644. package/dist/cli-bundle/chunks/config-NCNNWF6R.js.map +0 -7
  645. package/dist/cli-bundle/chunks/config-SW3U7XP2.js.map +0 -1
  646. package/dist/cli-bundle/chunks/context-55VEOYI3.js.map +0 -1
  647. package/dist/cli-bundle/chunks/context-5LB7UGKE.js.map +0 -7
  648. package/dist/cli-bundle/chunks/contracts-JXFGBOYT.js.map +0 -1
  649. package/dist/cli-bundle/chunks/contracts-SY6PDFIK.js.map +0 -7
  650. package/dist/cli-bundle/chunks/create-CLSCHGJJ.js +0 -30
  651. package/dist/cli-bundle/chunks/history-ALTM2RRP.js +0 -20
  652. package/dist/cli-bundle/chunks/history-redact-5YGLWUDH.js +0 -21
  653. package/dist/cli-bundle/chunks/init-C4CRHW22.js +0 -21
  654. package/dist/cli-bundle/chunks/register-list-query-CCMHGZTF.js.map +0 -7
  655. package/dist/cli-bundle/chunks/register-list-query-OM3E2KMY.js.map +0 -1
  656. package/dist/cli-bundle/chunks/register-mutation-N3CDEGZU.js.map +0 -1
  657. package/dist/cli-bundle/chunks/register-mutation-UXTTWL6N.js.map +0 -7
  658. package/dist/cli-bundle/chunks/register-setup-G5LTSFYK.js.map +0 -1
  659. package/dist/cli-bundle/chunks/register-setup-TWHKICM2.js.map +0 -7
  660. package/dist/cli-bundle/chunks/restore-LQHXBAY5.js +0 -19
  661. package/dist/cli-bundle/chunks/schema-C6QA367T.js.map +0 -7
  662. package/dist/cli-bundle/chunks/schema-QO5I4FBL.js.map +0 -1
  663. package/dist/cli-bundle/chunks/stats-TCW2SZQG.js.map +0 -7
  664. package/dist/cli-bundle/chunks/stats-TKC6CAKB.js.map +0 -1
  665. package/dist/cli-bundle/chunks/test-WA6RZGM2.js +0 -36
  666. package/dist/cli-bundle/chunks/test-runs-FQ5WNQLP.js.map +0 -1
  667. package/dist/cli-bundle/chunks/test-runs-PX73DMMI.js.map +0 -7
  668. package/dist/cli-bundle/chunks/update-BSKMQOYH.js +0 -28
  669. package/dist/cli-bundle/chunks/update-FIGYNQ2I.js +0 -24
  670. package/dist/cli-bundle/chunks/validate-54SYJ7QW.js.map +0 -1
  671. package/dist/cli-bundle/chunks/validate-HYZNIB6W.js.map +0 -7
  672. package/docs/examples/policy-restricted-extension/index.js +0 -21
  673. package/packages/pm-beads/extensions/beads/index.js +0 -64
  674. package/packages/pm-beads/extensions/beads/runtime-loader.js +0 -86
  675. package/packages/pm-beads/extensions/beads/runtime.js +0 -482
  676. package/packages/pm-calendar/extensions/calendar/index.js +0 -150
  677. package/packages/pm-calendar/extensions/calendar/runtime.js +0 -126
  678. package/packages/pm-command-kit/extensions/command-kit/index.js +0 -181
  679. package/packages/pm-governance-audit/extensions/governance-audit/index.js +0 -177
  680. package/packages/pm-governance-audit/extensions/governance-audit/runtime.js +0 -153
  681. package/packages/pm-guide-shell/extensions/guide-shell/index.js +0 -98
  682. package/packages/pm-guide-shell/extensions/guide-shell/runtime.js +0 -294
  683. package/packages/pm-lifecycle-hooks/extensions/lifecycle-hooks/index.js +0 -18
  684. package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/index.js +0 -124
  685. package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/runtime.js +0 -110
  686. package/packages/pm-search-advanced/extensions/search-advanced/index.js +0 -258
  687. package/packages/pm-search-advanced/extensions/search-advanced/runtime.js +0 -361
  688. package/packages/pm-templates/extensions/templates/index.js +0 -132
  689. package/packages/pm-templates/extensions/templates/runtime.js +0 -35
  690. package/packages/pm-todos/extensions/todos/index.js +0 -81
  691. package/packages/pm-todos/extensions/todos/runtime-loader.js +0 -86
  692. package/packages/pm-todos/extensions/todos/runtime.js +0 -545
  693. /package/dist/cli-bundle/chunks/{activity-54TXGJ2T.js.map → activity-AW6XVFH6.js.map} +0 -0
  694. /package/dist/cli-bundle/chunks/{activity-N7RVTLBQ.js.map → activity-DBLQVIP6.js.map} +0 -0
  695. /package/dist/cli-bundle/chunks/{chunk-F32L4HR6.js.map → chunk-27BXPBAY.js.map} +0 -0
  696. /package/dist/cli-bundle/chunks/{chunk-5BBEWX6C.js.map → chunk-3VGN2UWE.js.map} +0 -0
  697. /package/dist/cli-bundle/chunks/{chunk-FMWW2JDU.js.map → chunk-AXIDKKAT.js.map} +0 -0
  698. /package/dist/cli-bundle/chunks/{chunk-TIM4OD74.js.map → chunk-BDTISOSD.js.map} +0 -0
  699. /package/dist/cli-bundle/chunks/{chunk-CZIFFMZI.js.map → chunk-DDPTYJIM.js.map} +0 -0
  700. /package/dist/cli-bundle/chunks/{chunk-AYPQUFCX.js.map → chunk-EJUDVUYZ.js.map} +0 -0
  701. /package/dist/cli-bundle/chunks/{chunk-EOGBMLCE.js.map → chunk-EVMTBV6V.js.map} +0 -0
  702. /package/dist/cli-bundle/chunks/{chunk-CG3KP6I5.js.map → chunk-G7I7DEZA.js.map} +0 -0
  703. /package/dist/cli-bundle/chunks/{chunk-F4BNR2IN.js.map → chunk-HYTGA6GI.js.map} +0 -0
  704. /package/dist/cli-bundle/chunks/{chunk-2WCYE3IF.js.map → chunk-HZZEHPRG.js.map} +0 -0
  705. /package/dist/cli-bundle/chunks/{chunk-YV2OSAMS.js.map → chunk-IJYK2T43.js.map} +0 -0
  706. /package/dist/cli-bundle/chunks/{chunk-QOUOMPHO.js.map → chunk-JPECA746.js.map} +0 -0
  707. /package/dist/cli-bundle/chunks/{chunk-OQ2E64FH.js.map → chunk-KNPEF7QG.js.map} +0 -0
  708. /package/dist/cli-bundle/chunks/{chunk-3BKH2CL3.js.map → chunk-L5OEFZQG.js.map} +0 -0
  709. /package/dist/cli-bundle/chunks/{chunk-5S4ZGDB2.js.map → chunk-N74UMG5H.js.map} +0 -0
  710. /package/dist/cli-bundle/chunks/{chunk-IXAZI443.js.map → chunk-NFDPYAIP.js.map} +0 -0
  711. /package/dist/cli-bundle/chunks/{chunk-SKC4UTRP.js.map → chunk-NKZAN7BD.js.map} +0 -0
  712. /package/dist/cli-bundle/chunks/{chunk-JPJDP4VU.js.map → chunk-NWMZWYYB.js.map} +0 -0
  713. /package/dist/cli-bundle/chunks/{chunk-KKX4Z2SE.js.map → chunk-OTUHB4HS.js.map} +0 -0
  714. /package/dist/cli-bundle/chunks/{chunk-WB5BYQMF.js.map → chunk-SLMUGTK3.js.map} +0 -0
  715. /package/dist/cli-bundle/chunks/{chunk-I6QMJ2XT.js.map → chunk-WYDHYJPO.js.map} +0 -0
  716. /package/dist/cli-bundle/chunks/{chunk-KIEAK7YE.js.map → chunk-ZRP4VG5U.js.map} +0 -0
  717. /package/dist/cli-bundle/chunks/{close-JEBZXONN.js.map → close-E6ZZGCJY.js.map} +0 -0
  718. /package/dist/cli-bundle/chunks/{close-QHMVWM7M.js.map → close-TQYAAFJP.js.map} +0 -0
  719. /package/dist/cli-bundle/chunks/{create-O4VONGPG.js.map → context-B6275WPX.js.map} +0 -0
  720. /package/dist/cli-bundle/chunks/{create-CLSCHGJJ.js.map → context-OCZ3FJ4Z.js.map} +0 -0
  721. /package/dist/cli-bundle/chunks/{extension-YQF4CPIR.js.map → create-OH3BDGBB.js.map} +0 -0
  722. /package/dist/cli-bundle/chunks/{extension-3JYWJ5K2.js.map → create-RLRJMRTM.js.map} +0 -0
  723. /package/dist/cli-bundle/chunks/{history-ALTM2RRP.js.map → extension-CPSLJQVE.js.map} +0 -0
  724. /package/dist/cli-bundle/chunks/{history-RUKPKNY7.js.map → extension-CXJ6RELI.js.map} +0 -0
  725. /package/dist/cli-bundle/chunks/{gc-BEJMQT64.js.map → gc-7GQYOS2G.js.map} +0 -0
  726. /package/dist/cli-bundle/chunks/{gc-JEFQDJPA.js.map → gc-LPVMKJQJ.js.map} +0 -0
  727. /package/dist/cli-bundle/chunks/{health-JJJOY7DJ.js.map → health-3IPFLKXB.js.map} +0 -0
  728. /package/dist/cli-bundle/chunks/{health-P67NZ6TT.js.map → health-GZXGBZ36.js.map} +0 -0
  729. /package/dist/cli-bundle/chunks/{history-redact-YY4XYVEP.js.map → history-NERDJNUB.js.map} +0 -0
  730. /package/dist/cli-bundle/chunks/{history-redact-5YGLWUDH.js.map → history-WSZHY3PN.js.map} +0 -0
  731. /package/dist/cli-bundle/chunks/{init-C4CRHW22.js.map → history-redact-MP6CH7U5.js.map} +0 -0
  732. /package/dist/cli-bundle/chunks/{init-HBFGYS66.js.map → history-redact-O3NBCNWC.js.map} +0 -0
  733. /package/dist/cli-bundle/chunks/{list-C7R33MD5.js.map → init-64XDLQJB.js.map} +0 -0
  734. /package/dist/cli-bundle/chunks/{list-DSN6UNFB.js.map → init-PAX32BJA.js.map} +0 -0
  735. /package/dist/cli-bundle/chunks/{restore-LL2WLEDG.js.map → list-DNBJVO3E.js.map} +0 -0
  736. /package/dist/cli-bundle/chunks/{restore-LQHXBAY5.js.map → list-G5Y65VF6.js.map} +0 -0
  737. /package/dist/cli-bundle/chunks/{search-2EI6EAXH.js.map → restore-4MHZFJ2E.js.map} +0 -0
  738. /package/dist/cli-bundle/chunks/{search-QBFBLQRO.js.map → restore-YALDGTQR.js.map} +0 -0
  739. /package/dist/cli-bundle/chunks/{test-NV2DRPUS.js.map → schema-73HR2OJW.js.map} +0 -0
  740. /package/dist/cli-bundle/chunks/{test-WA6RZGM2.js.map → schema-U6LJKSIR.js.map} +0 -0
  741. /package/dist/cli-bundle/chunks/{update-BSKMQOYH.js.map → search-AXPXKZER.js.map} +0 -0
  742. /package/dist/cli-bundle/chunks/{update-FIGYNQ2I.js.map → search-KILGT37L.js.map} +0 -0
  743. /package/dist/cli-bundle/chunks/{telemetry-BT2VSWU2.js.map → telemetry-BZUF6H7G.js.map} +0 -0
  744. /package/dist/cli-bundle/chunks/{telemetry-LQ6FRTUT.js.map → telemetry-GAHHQTOS.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sources":["cli/commands/validate.ts"],"sourceRoot":"/","sourcesContent":["/**\n * @module cli/commands/validate\n *\n * Implements the pm validate command surface and its agent-facing runtime behavior.\n */\nimport fs from \"node:fs/promises\";\nimport { realpathSync } from \"node:fs\";\nimport type { Dirent } from \"node:fs\";\nimport { execFile } from \"node:child_process\";\nimport path from \"node:path\";\nimport { promisify } from \"node:util\";\nimport { buildRemediationCommands } from \"../../core/diagnostics/remediation.js\";\nimport { getActiveExtensionRegistrations } from \"../../core/extensions/index.js\";\nimport { pathExists } from \"../../core/fs/fs-utils.js\";\nimport { scanHistoryDrift } from \"../../core/history/drift-scan.js\";\nimport { normalizeStatusInput } from \"../../core/item/status.js\";\nimport { resolveItemTypeRegistry } from \"../../core/item/type-registry.js\";\nimport { resolveRuntimeStatusRegistry, type RuntimeStatusRegistry } from \"../../core/schema/runtime-schema.js\";\nimport {\n DEFAULT_VALIDATE_CLOSURE_LIKE_METADATA_FIELD_PATTERNS,\n DEFAULT_VALIDATE_STALE_BLOCKER_REASON_PATTERNS,\n EXIT_CODE,\n PM_DIRNAME,\n} from \"../../core/shared/constants.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { toNonEmptyStringOrUndefined } from \"../../core/shared/primitives.js\";\nimport { nowIso } from \"../../core/shared/time.js\";\nimport {\n CURRENT_ITEM_FORMAT_VERSION,\n effectiveItemFormatVersion,\n scanItemFormatVersions,\n} from \"../../core/item/item-format-version.js\";\nimport { listAllFrontMatterWithBody } from \"../../core/store/item-store.js\";\nimport { getSettingsPath, resolvePmRoot } from \"../../core/store/paths.js\";\nimport { readSettings } from \"../../core/store/settings.js\";\nimport {\n partitionFixesByGrant,\n planCloseReasonBackfillFixes,\n planEstimateBackfillFixes,\n planResolutionBackfillFixes,\n planStaleLinkPruneFixes,\n planTerminalParentFixes,\n resolveGrantedFixScopes,\n toFixOutputRow,\n type CloseReasonBackfillRow,\n type EstimateBackfillRow,\n type ResolutionBackfillRow,\n type StaleLinkPruneRow,\n type TerminalParentFixRow,\n type ValidateFixRecord,\n} from \"../../core/validate/fix-planning.js\";\nimport { findDuplicateIssueCodes, type DuplicateIssueCode } from \"../../core/governance/issue-codes.js\";\nimport { buildMissingByTypeCounts, type MissingFieldOccurrence } from \"../../core/validate/missing-by-type.js\";\nimport {\n classifyStaleLinkedPaths,\n summarizeStaleLinkedPathClassifications,\n} from \"../../core/validate/stale-file-classification.js\";\nimport {\n buildMissingLinkedPathRows,\n summarizeMissingLinkedPathRows,\n type StaleLinkOwnerInput,\n} from \"../../core/validate/missing-link-owners.js\";\nimport type { ValidateMetadataProfile, ValidateMetadataRequiredField } from \"../../types/index.js\";\nimport { extractReferencedPmItemIdsFromCommand } from \"./test.js\";\n\ntype ValidateCheckName =\n | \"metadata\"\n | \"resolution\"\n | \"lifecycle\"\n | \"files\"\n | \"command_references\"\n | \"history_drift\"\n | \"format_version\";\ntype ValidateStatus = \"ok\" | \"warn\" | \"error\";\ntype ValidateDependencyCycleSeverity = \"off\" | \"warn\" | \"error\";\ntype ValidateFileScanMode = \"default\" | \"tracked-all\" | \"tracked-all-strict\";\ntype ItemWithBody = Awaited<ReturnType<typeof listAllFrontMatterWithBody>>[number];\ntype FileCandidateSource = \"default-curated\" | \"tracked-git\" | \"tracked-all-fallback-default\";\ntype OrphanedPathClassification = \"docs_unowned\" | \"tests_unowned\" | \"source_unowned\" | \"unlinked_existing\";\n\nconst FILE_SCAN_DIRECTORIES = [\"src\", \"tests\", \"docs\"] as const;\nconst FILE_SCAN_ROOT_FILES = [\n \"README.md\",\n \"PRD.md\",\n \"CHANGELOG.md\",\n \"AGENTS.md\",\n \"CONTRIBUTING.md\",\n \"SECURITY.md\",\n \"CODE_OF_CONDUCT.md\",\n \"LICENSE\",\n] as const;\nconst DIRECTORY_IGNORE_SET = new Set([\"node_modules\", \".git\", \".cursor\", \".agents\", \"dist\", \"coverage\"]);\nconst RESOLUTION_FIELD_KEYS = [\"resolution\", \"expected_result\", \"actual_result\"] as const;\ntype ResolutionFieldKey = (typeof RESOLUTION_FIELD_KEYS)[number];\nconst VALIDATE_FILE_SCAN_MODES = [\"default\", \"tracked-all\", \"tracked-all-strict\"] as const;\nconst VALIDATE_METADATA_PROFILE_VALUES = [\"core\", \"strict\", \"custom\"] as const;\nconst VALIDATE_DEPENDENCY_CYCLE_SEVERITY_VALUES = [\"off\", \"warn\", \"error\"] as const;\nconst LIFECYCLE_PATTERN_FIELD_KEYS = [\"blocked_reason\", \"resolution\", \"actual_result\"] as const;\ntype LifecyclePatternFieldKey = (typeof LIFECYCLE_PATTERN_FIELD_KEYS)[number];\nconst CORE_METADATA_REQUIRED_FIELDS = [\"author\", \"acceptance_criteria\", \"estimated_minutes\", \"close_reason\"] as const;\nconst STRICT_METADATA_REQUIRED_FIELDS = [\n ...CORE_METADATA_REQUIRED_FIELDS,\n \"reviewer\",\n \"risk\",\n \"confidence\",\n \"sprint\",\n \"release\",\n] as const;\nconst SUPPORTED_METADATA_REQUIRED_FIELDS = [\n ...new Set([...STRICT_METADATA_REQUIRED_FIELDS]),\n] as ValidateMetadataRequiredField[];\nconst METADATA_REQUIRED_FIELD_ALIASES: Record<string, ValidateMetadataRequiredField> = {\n author: \"author\",\n acceptance_criteria: \"acceptance_criteria\",\n \"acceptance-criteria\": \"acceptance_criteria\",\n estimated_minutes: \"estimated_minutes\",\n \"estimated-minutes\": \"estimated_minutes\",\n estimate: \"estimated_minutes\",\n close_reason: \"close_reason\",\n \"close-reason\": \"close_reason\",\n reviewer: \"reviewer\",\n risk: \"risk\",\n confidence: \"confidence\",\n sprint: \"sprint\",\n release: \"release\",\n};\nconst METADATA_WARNING_TOKEN_BY_FIELD: Record<ValidateMetadataRequiredField, string> = {\n author: \"validate_metadata_missing_author\",\n acceptance_criteria: \"validate_metadata_missing_acceptance_criteria\",\n estimated_minutes: \"validate_metadata_missing_estimate\",\n close_reason: \"validate_metadata_missing_close_reason\",\n reviewer: \"validate_metadata_missing_reviewer\",\n risk: \"validate_metadata_missing_risk\",\n confidence: \"validate_metadata_missing_confidence\",\n sprint: \"validate_metadata_missing_sprint\",\n release: \"validate_metadata_missing_release\",\n};\nconst METADATA_COUNT_KEY_BY_FIELD: Record<ValidateMetadataRequiredField, string> = {\n author: \"missing_author\",\n acceptance_criteria: \"missing_acceptance_criteria\",\n estimated_minutes: \"missing_estimated_minutes\",\n close_reason: \"closed_missing_close_reason\",\n reviewer: \"missing_reviewer\",\n risk: \"missing_risk\",\n confidence: \"missing_confidence\",\n sprint: \"missing_sprint\",\n release: \"missing_release\",\n};\nconst METADATA_ITEM_IDS_KEY_BY_FIELD: Record<ValidateMetadataRequiredField, string> = {\n author: \"missing_author_item_ids\",\n acceptance_criteria: \"missing_acceptance_criteria_item_ids\",\n estimated_minutes: \"missing_estimated_minutes_item_ids\",\n close_reason: \"closed_missing_close_reason_item_ids\",\n reviewer: \"missing_reviewer_item_ids\",\n risk: \"missing_risk_item_ids\",\n confidence: \"missing_confidence_item_ids\",\n sprint: \"missing_sprint_item_ids\",\n release: \"missing_release_item_ids\",\n};\nconst METADATA_TRUNCATED_KEY_BY_FIELD: Record<ValidateMetadataRequiredField, string> = {\n author: \"missing_author_truncated\",\n acceptance_criteria: \"missing_acceptance_criteria_truncated\",\n estimated_minutes: \"missing_estimated_minutes_truncated\",\n close_reason: \"closed_missing_close_reason_truncated\",\n reviewer: \"missing_reviewer_truncated\",\n risk: \"missing_risk_truncated\",\n confidence: \"missing_confidence_truncated\",\n sprint: \"missing_sprint_truncated\",\n release: \"missing_release_truncated\",\n};\nconst GIT_LS_FILES_MAX_BUFFER = 32 * 1024 * 1024;\nconst FILE_LIST_SUMMARY_LIMIT = 40;\nconst DIAGNOSTIC_LIST_SUMMARY_LIMIT = 5;\nconst execFileAsync = promisify(execFile);\n\n/**\n * Documents the validate command options payload exchanged by command, SDK, and package integrations.\n */\nexport interface ValidateCommandOptions {\n checkMetadata?: boolean;\n checkResolution?: boolean;\n checkLifecycle?: boolean;\n checkStaleBlockers?: boolean;\n dependencyCycleSeverity?: string;\n parentCycleSeverity?: string;\n checkFiles?: boolean;\n includePmInternals?: boolean;\n verboseFileLists?: boolean;\n verboseDiagnostics?: boolean;\n /** Emit complete *_item_ids diagnostic lists (no 5-item cap); implied by --json. */\n allAffectedIds?: boolean;\n checkHistoryDrift?: boolean;\n checkCommandReferences?: boolean;\n scanMode?: string;\n metadataProfile?: string;\n fixHints?: boolean;\n autoFix?: boolean;\n dryRun?: boolean;\n fixScope?: string[];\n pruneMissing?: boolean;\n}\n\n/**\n * Documents the validate check payload exchanged by command, SDK, and package integrations.\n */\nexport interface ValidateCheck {\n name: ValidateCheckName;\n status: ValidateStatus;\n details: Record<string, unknown>;\n}\n\n/**\n * Documents the validate fixes summary payload exchanged by command, SDK, and package integrations.\n */\nexport interface ValidateFixesSummary {\n mode: \"apply\" | \"dry_run\";\n auto_fix: boolean;\n prune_missing: boolean;\n granted_fix_scopes: string[];\n planned_count: number;\n applied_count: number;\n gated_count: number;\n failed_count: number;\n planned_fixes: Array<Record<string, unknown>>;\n applied_fixes: Array<Record<string, unknown>>;\n gated_fixes: Array<Record<string, unknown>>;\n failed_fixes: Array<Record<string, unknown>>;\n}\n\n/**\n * Documents the validate result payload exchanged by command, SDK, and package integrations.\n */\nexport interface ValidateResult {\n ok: boolean;\n has_warnings: boolean;\n checks: ValidateCheck[];\n warnings: string[];\n /** Present when --auto-fix or --prune-missing was requested; checks always reflect the PRE-fix state. */\n fixes?: ValidateFixesSummary;\n generated_at: string;\n}\n\nfunction normalizeRelativePath(value: string): string {\n return value.replaceAll(\"\\\\\", \"/\").replace(/^\\.\\/+/, \"\").replace(/^\\/+/, \"\");\n}\n\nfunction normalizeRelativeDirectoryPath(value: string): string {\n const normalized = normalizeRelativePath(value);\n return normalized.replace(/\\/+$/, \"\");\n}\n\n\n\nfunction toMeaningfulString(value: unknown): string | undefined {\n const normalized = toNonEmptyStringOrUndefined(value);\n if (!normalized) {\n return undefined;\n }\n const lowered = normalized.toLowerCase();\n if (lowered === \"none\" || lowered === \"null\" || lowered === \"n/a\" || lowered === \"na\") {\n return undefined;\n }\n return normalized;\n}\n\n/* c8 ignore start -- runtime-status alias normalization is covered by status-registry integration tests */\nfunction normalizeStatusForRegistry(status: string, statusRegistry: RuntimeStatusRegistry): string {\n return normalizeStatusInput(status, statusRegistry) ?? status;\n}\n/* c8 ignore stop */\n\nfunction isTerminalStatus(status: string, statusRegistry: RuntimeStatusRegistry): boolean {\n return statusRegistry.terminal_statuses.has(normalizeStatusForRegistry(status, statusRegistry));\n}\n\ninterface ValidateMetadataPolicy {\n profile: ValidateMetadataProfile;\n profile_source: \"default\" | \"settings\" | \"option\";\n required_fields: ValidateMetadataRequiredField[];\n configured_custom_fields: ValidateMetadataRequiredField[];\n fallback_to_core: boolean;\n warnings: string[];\n}\n\ntype LifecyclePatternSource = \"default\" | \"settings\";\n\ninterface LifecyclePatternPolicy {\n stale_blocker_reason_patterns: string[];\n stale_blocker_reason_pattern_source: LifecyclePatternSource;\n closure_like_metadata_field_patterns: Record<LifecyclePatternFieldKey, string[]>;\n closure_like_metadata_field_pattern_sources: Record<LifecyclePatternFieldKey, LifecyclePatternSource>;\n}\n\ninterface LifecyclePatternSettingsSource {\n validation: {\n lifecycle_stale_blocker_reason_patterns: string[];\n lifecycle_closure_like_blocked_reason_patterns: string[];\n lifecycle_closure_like_resolution_patterns: string[];\n lifecycle_closure_like_actual_result_patterns: string[];\n };\n}\n\n/* c8 ignore start -- lifecycle pattern normalization/default-vs-settings matrix is covered by lifecycle integration tests */\nfunction normalizeLifecyclePatternList(values: readonly string[] | undefined): string[] {\n return [...new Set((values ?? []).map((value) => value.trim().toLowerCase()).filter((value) => value.length > 0))].sort(\n (left, right) => left.localeCompare(right),\n );\n}\n\nfunction areSortedStringListsEqual(left: readonly string[], right: readonly string[]): boolean {\n if (left.length !== right.length) {\n return false;\n }\n return left.every((value, index) => value === right[index]);\n}\n\nfunction resolveLifecyclePatternPolicy(settings: LifecyclePatternSettingsSource): LifecyclePatternPolicy {\n const defaultStalePatterns = normalizeLifecyclePatternList(DEFAULT_VALIDATE_STALE_BLOCKER_REASON_PATTERNS);\n const defaultClosureLikePatterns = {\n blocked_reason: normalizeLifecyclePatternList(DEFAULT_VALIDATE_CLOSURE_LIKE_METADATA_FIELD_PATTERNS.blocked_reason),\n resolution: normalizeLifecyclePatternList(DEFAULT_VALIDATE_CLOSURE_LIKE_METADATA_FIELD_PATTERNS.resolution),\n actual_result: normalizeLifecyclePatternList(DEFAULT_VALIDATE_CLOSURE_LIKE_METADATA_FIELD_PATTERNS.actual_result),\n } satisfies Record<LifecyclePatternFieldKey, string[]>;\n const staleBlockerReasonPatterns = normalizeLifecyclePatternList(\n settings.validation.lifecycle_stale_blocker_reason_patterns,\n );\n const closureLikePatterns = {\n blocked_reason: normalizeLifecyclePatternList(settings.validation.lifecycle_closure_like_blocked_reason_patterns),\n resolution: normalizeLifecyclePatternList(settings.validation.lifecycle_closure_like_resolution_patterns),\n actual_result: normalizeLifecyclePatternList(settings.validation.lifecycle_closure_like_actual_result_patterns),\n } satisfies Record<LifecyclePatternFieldKey, string[]>;\n return {\n stale_blocker_reason_patterns: staleBlockerReasonPatterns,\n stale_blocker_reason_pattern_source: areSortedStringListsEqual(staleBlockerReasonPatterns, defaultStalePatterns)\n ? \"default\"\n : \"settings\",\n closure_like_metadata_field_patterns: closureLikePatterns,\n closure_like_metadata_field_pattern_sources: {\n blocked_reason: areSortedStringListsEqual(closureLikePatterns.blocked_reason, defaultClosureLikePatterns.blocked_reason)\n ? \"default\"\n : \"settings\",\n resolution: areSortedStringListsEqual(closureLikePatterns.resolution, defaultClosureLikePatterns.resolution)\n ? \"default\"\n : \"settings\",\n actual_result: areSortedStringListsEqual(closureLikePatterns.actual_result, defaultClosureLikePatterns.actual_result)\n ? \"default\"\n : \"settings\",\n },\n };\n}\n/* c8 ignore stop */\n\nfunction resolveValidateMetadataProfile(value: string | undefined): ValidateMetadataProfile {\n const normalized = value?.trim().toLowerCase();\n if (!normalized || normalized.length === 0) {\n return \"core\";\n }\n if ((VALIDATE_METADATA_PROFILE_VALUES as readonly string[]).includes(normalized)) {\n return normalized as ValidateMetadataProfile;\n }\n throw new PmCliError(\n `Unknown --metadata-profile value \"${value}\". Supported values: ${VALIDATE_METADATA_PROFILE_VALUES.join(\", \")}.`,\n EXIT_CODE.USAGE,\n );\n}\n\nfunction resolveDependencyCycleSeverity(value: string | undefined): ValidateDependencyCycleSeverity {\n const normalized = value?.trim().toLowerCase();\n if (!normalized || normalized.length === 0) {\n return \"warn\";\n }\n if ((VALIDATE_DEPENDENCY_CYCLE_SEVERITY_VALUES as readonly string[]).includes(normalized)) {\n return normalized as ValidateDependencyCycleSeverity;\n }\n throw new PmCliError(\n `Unknown --dependency-cycle-severity value \"${value}\". Supported values: ${VALIDATE_DEPENDENCY_CYCLE_SEVERITY_VALUES.join(\", \")}.`,\n EXIT_CODE.USAGE,\n );\n}\n\nfunction resolveParentCycleSeverity(value: string | undefined): ValidateDependencyCycleSeverity {\n const normalized = value?.trim().toLowerCase();\n if (!normalized || normalized.length === 0) {\n return \"warn\";\n }\n if ((VALIDATE_DEPENDENCY_CYCLE_SEVERITY_VALUES as readonly string[]).includes(normalized)) {\n return normalized as ValidateDependencyCycleSeverity;\n }\n throw new PmCliError(\n `Unknown --parent-cycle-severity value \"${value}\". Supported values: ${VALIDATE_DEPENDENCY_CYCLE_SEVERITY_VALUES.join(\", \")}.`,\n EXIT_CODE.USAGE,\n );\n}\n\n/* c8 ignore start -- metadata required-field alias normalization is covered by metadata-policy integration tests */\nfunction normalizeMetadataRequiredFieldsFromSettings(\n values: readonly ValidateMetadataRequiredField[] | undefined,\n): ValidateMetadataRequiredField[] {\n const normalized = [...new Set((values ?? []).map((value) => value.trim().toLowerCase().replaceAll(\"-\", \"_\")))];\n return normalized\n .map((value) => METADATA_REQUIRED_FIELD_ALIASES[value])\n .filter((value): value is ValidateMetadataRequiredField => value !== undefined)\n .sort((left, right) => left.localeCompare(right));\n}\n/* c8 ignore stop */\n\nfunction resolveValidateMetadataPolicy(\n profile: ValidateMetadataProfile,\n profileSource: \"default\" | \"settings\" | \"option\",\n configuredCustomFields: readonly ValidateMetadataRequiredField[],\n): ValidateMetadataPolicy {\n const normalizedCustomFields = normalizeMetadataRequiredFieldsFromSettings(configuredCustomFields);\n if (profile === \"core\") {\n return {\n profile,\n profile_source: profileSource,\n required_fields: [...CORE_METADATA_REQUIRED_FIELDS],\n configured_custom_fields: normalizedCustomFields,\n fallback_to_core: false,\n warnings: [],\n };\n }\n if (profile === \"strict\") {\n return {\n profile,\n profile_source: profileSource,\n required_fields: [...STRICT_METADATA_REQUIRED_FIELDS],\n configured_custom_fields: normalizedCustomFields,\n fallback_to_core: false,\n warnings: [],\n };\n }\n if (normalizedCustomFields.length > 0) {\n return {\n profile,\n profile_source: profileSource,\n required_fields: normalizedCustomFields,\n configured_custom_fields: normalizedCustomFields,\n fallback_to_core: false,\n warnings: [],\n };\n }\n return {\n profile,\n profile_source: profileSource,\n required_fields: [...CORE_METADATA_REQUIRED_FIELDS],\n configured_custom_fields: normalizedCustomFields,\n fallback_to_core: true,\n warnings: [\"validate_metadata_custom_profile_missing_required_fields:0\"],\n };\n}\n\n/**\n * Planning fields whose absence is only actionable on live work (GH-276): an\n * agent backfills an estimate or acceptance criteria to plan/execute an item,\n * so flagging them on a terminal (closed/canceled) historical item is pure\n * noise. Under the `strict` profile these are still enforced everywhere for\n * projects that want full historical coverage.\n */\nconst TERMINAL_EXEMPT_PLANNING_FIELDS: ReadonlySet<ValidateMetadataRequiredField> = new Set([\n \"acceptance_criteria\",\n \"estimated_minutes\",\n]);\n\nfunction isMetadataFieldMissing(\n item: ItemWithBody,\n field: ValidateMetadataRequiredField,\n statusRegistry: RuntimeStatusRegistry,\n enforcePlanningFieldsOnTerminal: boolean,\n): boolean {\n // GH-276: skip planning-field gaps on retired (closed/canceled) items unless\n // the resolved profile explicitly demands strict historical coverage.\n if (\n !enforcePlanningFieldsOnTerminal &&\n TERMINAL_EXEMPT_PLANNING_FIELDS.has(field) &&\n isTerminalStatus(item.status, statusRegistry)\n ) {\n return false;\n }\n if (field === \"author\") {\n return !toNonEmptyStringOrUndefined(item.author);\n }\n if (field === \"acceptance_criteria\") {\n return !toNonEmptyStringOrUndefined(item.acceptance_criteria);\n }\n if (field === \"estimated_minutes\") {\n return !Number.isFinite(item.estimated_minutes);\n }\n if (field === \"close_reason\") {\n return normalizeStatusForRegistry(item.status, statusRegistry) === statusRegistry.close_status && !toNonEmptyStringOrUndefined(item.close_reason);\n }\n if (field === \"reviewer\") {\n return !toNonEmptyStringOrUndefined(item.reviewer);\n }\n if (field === \"risk\") {\n return !toNonEmptyStringOrUndefined(item.risk);\n }\n if (field === \"confidence\") {\n if (typeof item.confidence === \"number\") {\n return !Number.isFinite(item.confidence);\n }\n return !toNonEmptyStringOrUndefined(item.confidence);\n }\n if (field === \"sprint\") {\n return !toNonEmptyStringOrUndefined(item.sprint);\n }\n return !toNonEmptyStringOrUndefined(item.release);\n}\n\nfunction resolveFileScanMode(scanMode: string | undefined): ValidateFileScanMode {\n if (scanMode === undefined) {\n return \"default\";\n }\n const normalized = scanMode.trim().toLowerCase();\n if (normalized.length === 0) {\n return \"default\";\n }\n if (normalized === \"default\") {\n return \"default\";\n }\n if (normalized === \"tracked-all\" || normalized === \"tracked_all\") {\n return \"tracked-all\";\n }\n if (normalized === \"tracked-all-strict\" || normalized === \"tracked_all_strict\") {\n return \"tracked-all-strict\";\n }\n throw new PmCliError(\n `Unknown --scan-mode value \"${scanMode}\". Supported values: ${VALIDATE_FILE_SCAN_MODES.join(\", \")}.`,\n EXIT_CODE.USAGE,\n );\n}\n\nfunction resolveWorkspaceRoot(pmRoot: string): string {\n const resolvedPmRoot = path.resolve(pmRoot);\n const normalizedPmRoot = resolvedPmRoot.replaceAll(\"\\\\\", \"/\");\n if (normalizedPmRoot.endsWith(\"/.agents/pm\")) {\n return path.dirname(path.dirname(resolvedPmRoot));\n }\n const resolvedCwd = path.resolve(process.cwd());\n const canonicalPmRoot = realpathForWorkspaceRoot(resolvedPmRoot);\n const canonicalCwd = realpathForWorkspaceRoot(resolvedCwd);\n const relativeFromPmRoot = path.relative(canonicalPmRoot, canonicalCwd);\n const cwdInsidePmRoot =\n relativeFromPmRoot.length === 0 ||\n (!relativeFromPmRoot.startsWith(\"..\") && !path.isAbsolute(relativeFromPmRoot));\n if (cwdInsidePmRoot) {\n return resolvedPmRoot;\n }\n /* c8 ignore next 2 -- non-standard PM root layouts are integration-only edge cases. */\n return resolvedCwd;\n}\n\nfunction realpathForWorkspaceRoot(inputPath: string): string {\n try {\n return realpathSync.native(inputPath);\n } catch {\n return path.resolve(inputPath);\n }\n}\n\n/* c8 ignore start -- recursive file-walk dirent/permission edge cases are covered by filesystem integration suites */\nasync function listFilesRecursive(basePath: string, relativePath: string, output: string[]): Promise<void> {\n const targetDirectory = relativePath.length > 0 ? path.join(basePath, relativePath) : basePath;\n let entries: Dirent[];\n try {\n entries = await fs.readdir(targetDirectory, { withFileTypes: true });\n } catch (error: unknown) {\n if (typeof error === \"object\" && error !== null && \"code\" in error && (error as { code?: string }).code === \"ENOENT\") {\n return;\n }\n throw error;\n }\n\n for (const entry of entries) {\n if (entry.name.startsWith(\".\")) {\n continue;\n }\n const childRelative = relativePath.length > 0 ? path.join(relativePath, entry.name) : entry.name;\n if (entry.isDirectory()) {\n if (DIRECTORY_IGNORE_SET.has(entry.name)) {\n continue;\n }\n await listFilesRecursive(basePath, childRelative, output);\n continue;\n }\n /* c8 ignore next 3 -- non-file dirent variants (symlink/socket) are filesystem-specific. */\n if (!entry.isFile()) {\n continue;\n }\n output.push(normalizeRelativePath(childRelative));\n }\n}\n/* c8 ignore stop */\n\nasync function collectDefaultProjectFileCandidates(workspaceRoot: string): Promise<string[]> {\n const discovered: string[] = [];\n for (const directory of FILE_SCAN_DIRECTORIES) {\n await listFilesRecursive(workspaceRoot, directory, discovered);\n }\n for (const candidate of FILE_SCAN_ROOT_FILES) {\n const absolute = path.join(workspaceRoot, candidate);\n try {\n const stats = await fs.stat(absolute);\n /* c8 ignore start -- root-candidate presence depends on fixture workspace composition. */\n if (stats.isFile()) {\n discovered.push(normalizeRelativePath(candidate));\n }\n /* c8 ignore stop */\n } catch {\n // Ignore root-file candidates that are not present in this workspace.\n }\n }\n return [...new Set(discovered)].sort((left, right) => left.localeCompare(right));\n}\n\nasync function collectTrackedGitFileCandidates(workspaceRoot: string): Promise<string[] | null> {\n try {\n const { stdout } = await execFileAsync(\"git\", [\"ls-files\", \"-z\"], {\n cwd: workspaceRoot,\n encoding: \"utf8\",\n maxBuffer: GIT_LS_FILES_MAX_BUFFER,\n windowsHide: true,\n });\n const discovered = stdout\n .split(\"\\0\")\n .map((value) => normalizeRelativePath(value))\n .filter((value) => value.length > 0);\n return [...new Set(discovered)].sort((left, right) => left.localeCompare(right));\n } catch {\n /* c8 ignore start -- fallback path exercised only when git metadata is unavailable. */\n return null;\n /* c8 ignore stop */\n }\n}\n\ninterface FileCandidateCollection {\n requestedMode: ValidateFileScanMode;\n appliedMode: ValidateFileScanMode;\n source: FileCandidateSource;\n candidateFiles: string[];\n candidateTotal: number;\n candidateScanned: number;\n}\n\n/* c8 ignore start -- PM-internal prefix derivation permutations are covered by file-scan integration tests */\nfunction resolvePmInternalCandidatePrefixes(pmRoot: string, workspaceRoot: string): string[] {\n const prefixes = new Set<string>();\n const configuredDefault = normalizeRelativeDirectoryPath(PM_DIRNAME);\n if (configuredDefault.length > 0) {\n prefixes.add(configuredDefault);\n }\n const relativePmRoot = normalizeRelativeDirectoryPath(path.relative(workspaceRoot, pmRoot));\n if (relativePmRoot.length > 0 && !relativePmRoot.startsWith(\"..\")) {\n prefixes.add(relativePmRoot);\n }\n return [...prefixes].sort((left, right) => left.localeCompare(right));\n}\n/* c8 ignore stop */\n\nfunction hasPathPrefix(candidate: string, prefixes: string[]): boolean {\n for (const prefix of prefixes) {\n if (candidate === prefix || candidate.startsWith(`${prefix}/`)) {\n return true;\n }\n }\n return false;\n}\n\nasync function collectProjectFileCandidates(\n workspaceRoot: string,\n scanMode: ValidateFileScanMode,\n): Promise<FileCandidateCollection> {\n if (scanMode === \"tracked-all\" || scanMode === \"tracked-all-strict\") {\n const trackedCandidates = await collectTrackedGitFileCandidates(workspaceRoot);\n /* c8 ignore start -- tracked-git availability fallback is covered by git/non-git integration fixtures */\n if (trackedCandidates) {\n return {\n requestedMode: scanMode,\n appliedMode: scanMode,\n source: \"tracked-git\",\n candidateFiles: trackedCandidates,\n candidateTotal: trackedCandidates.length,\n candidateScanned: trackedCandidates.length,\n };\n }\n /* c8 ignore stop */\n /* c8 ignore start -- deterministic fallback retained for non-git workspaces. */\n const fallbackCandidates = await collectDefaultProjectFileCandidates(workspaceRoot);\n return {\n requestedMode: scanMode,\n appliedMode: \"default\",\n source: \"tracked-all-fallback-default\",\n candidateFiles: fallbackCandidates,\n candidateTotal: fallbackCandidates.length,\n candidateScanned: fallbackCandidates.length,\n };\n /* c8 ignore stop */\n }\n\n const defaultCandidates = await collectDefaultProjectFileCandidates(workspaceRoot);\n return {\n requestedMode: scanMode,\n appliedMode: \"default\",\n source: \"default-curated\",\n candidateFiles: defaultCandidates,\n candidateTotal: defaultCandidates.length,\n candidateScanned: defaultCandidates.length,\n };\n}\n\nfunction summarizeList(values: string[], limit = DIAGNOSTIC_LIST_SUMMARY_LIMIT): { values: string[]; truncated: boolean } {\n /* c8 ignore start -- truncation behavior only surfaces with very large synthetic datasets. */\n if (values.length <= limit) {\n return { values, truncated: false };\n }\n return {\n values: values.slice(0, limit),\n truncated: true,\n };\n /* c8 ignore stop */\n}\n\nfunction summarizeFileList(\n values: string[],\n verboseFileLists: boolean,\n): {\n values: string[];\n truncated: boolean;\n total: number;\n} {\n if (verboseFileLists) {\n return {\n values,\n truncated: false,\n total: values.length,\n };\n }\n const summary = summarizeList(values, FILE_LIST_SUMMARY_LIMIT);\n return {\n values: summary.values,\n truncated: summary.truncated,\n total: values.length,\n };\n}\n\nconst RESOLUTION_REMEDIATION_FLAG_BY_FIELD: Record<ResolutionFieldKey, string> = {\n resolution: \"--resolution\",\n expected_result: \"--expected-result\",\n actual_result: \"--actual-result\",\n};\n\nconst RESOLUTION_REMEDIATION_PLACEHOLDER_BY_FIELD: Record<ResolutionFieldKey, string> = {\n resolution: \"Describe how this item was resolved\",\n expected_result: \"Describe the expected result\",\n actual_result: \"Describe the actual result\",\n};\n\nfunction buildResolutionRemediationCommand(row: { id: string; missing_fields: ResolutionFieldKey[] }): string {\n const fieldArguments = row.missing_fields\n .map((field) => `${RESOLUTION_REMEDIATION_FLAG_BY_FIELD[field]} \\\"${RESOLUTION_REMEDIATION_PLACEHOLDER_BY_FIELD[field]}\\\"`)\n .join(\" \");\n return `pm update ${row.id} ${fieldArguments} --message \\\"Backfill resolution metadata\\\"`;\n}\n\n/**\n * Attach a uniform, machine-executable `fix_hints` array to a validate check's\n * details when `--fix-hints` is requested. The resolution check's existing\n * per-row remediation commands (which already carry concrete item ids) are\n * aliased in so agents read one uniform field across every check; all other\n * checks derive one generic command per distinct warning code from the shared\n * remediation registry. Generic hints may contain `<id>`/`<field>`/`<path>`\n * placeholders the caller substitutes before running — they are templates, not\n * always directly executable as-is. Read-only: this only enriches the diagnostic\n * output, never mutates any item.\n */\n/* c8 ignore start -- fix-hint projection/truncation combinations are covered by validate output integration tests */\nfunction attachValidateFixHints(check: ValidateCheck, checkWarnings: string[]): void {\n const existingResolutionHints = check.details?.missing_resolution_remediation_hints;\n const aliasedResolution = Array.isArray(existingResolutionHints) && existingResolutionHints.length > 0;\n const fixHints = aliasedResolution\n ? (existingResolutionHints as unknown[]).filter((hint): hint is string => typeof hint === \"string\")\n : buildRemediationCommands(checkWarnings);\n if (fixHints.length === 0) {\n return;\n }\n // The resolution check truncates its per-row hint list for low-token output;\n // carry that marker onto fix_hints so an agent knows the list is partial and\n // there are more items to repair beyond the ones shown.\n const truncated = aliasedResolution && check.details?.missing_resolution_remediation_hints_truncated === true;\n check.details = {\n ...check.details,\n fix_hints: fixHints,\n ...(truncated ? { fix_hints_truncated: true } : {}),\n };\n}\n/* c8 ignore stop */\n\nfunction resolveRequestedChecks(options: ValidateCommandOptions): Set<ValidateCheckName> {\n const requested = new Set<ValidateCheckName>();\n if (options.checkMetadata) {\n requested.add(\"metadata\");\n }\n if (options.checkResolution) {\n requested.add(\"resolution\");\n }\n if (options.checkLifecycle || options.checkStaleBlockers) {\n requested.add(\"lifecycle\");\n }\n if (options.checkFiles) {\n requested.add(\"files\");\n }\n if (options.checkHistoryDrift) {\n requested.add(\"history_drift\");\n }\n if (options.checkCommandReferences) {\n requested.add(\"command_references\");\n }\n if (requested.size === 0) {\n // Remediation flags without explicit --check-* flags scope the run to the\n // checks that can produce fixes: --auto-fix plans metadata/resolution\n // backfills and gated lifecycle fixes; --prune-missing needs the files\n // scan. With neither, the historical run-everything default applies.\n if (options.autoFix) {\n requested.add(\"metadata\");\n requested.add(\"resolution\");\n requested.add(\"lifecycle\");\n }\n if (options.pruneMissing) {\n requested.add(\"files\");\n }\n if (requested.size === 0) {\n requested.add(\"metadata\");\n requested.add(\"resolution\");\n requested.add(\"lifecycle\");\n requested.add(\"files\");\n requested.add(\"command_references\");\n requested.add(\"history_drift\");\n requested.add(\"format_version\");\n }\n return requested;\n }\n // Explicit check flags are respected as-is, except --prune-missing always\n // needs the files scan it acts on.\n if (options.pruneMissing) {\n requested.add(\"files\");\n }\n return requested;\n}\n\nconst DUPLICATE_ISSUE_CODE_WARNING_TOKEN = \"validate_metadata_duplicate_issue_codes\";\n\n/**\n * Project the duplicate logical issue-code findings (GH-235) into the\n * metadata-check `details` shape plus an advisory warning token. Duplicate\n * codes are advisory (warn), never an error — matching every other metadata\n * finding — so an otherwise clean tracker that simply reuses a title prefix is\n * not failed by `pm validate`. Kept outside the c8-ignored builder block so the\n * projection/remediation logic is fully covered by unit tests.\n */\nfunction summarizeDuplicateIssueCodes(\n duplicates: DuplicateIssueCode[],\n verboseDiagnostics: boolean,\n): { rows: Array<Record<string, unknown>>; truncated: boolean; warnings: string[] } {\n if (duplicates.length === 0) {\n return { rows: [], truncated: false, warnings: [] };\n }\n const limit = verboseDiagnostics ? duplicates.length : DIAGNOSTIC_LIST_SUMMARY_LIMIT;\n const shown = duplicates.slice(0, limit);\n const rows = shown.map((duplicate) => ({\n code: duplicate.code,\n count: duplicate.count,\n ids: duplicate.ids,\n titles: duplicate.titles,\n remediation_hint: `Items ${duplicate.ids.join(\", \")} share issue code \"${duplicate.code}\"; rename or merge so each logical code maps to one item.`,\n }));\n return {\n rows,\n truncated: shown.length < duplicates.length,\n warnings: [`${DUPLICATE_ISSUE_CODE_WARNING_TOKEN}:${duplicates.length}`],\n };\n}\n\n/* c8 ignore start -- metadata diagnostics/backfill planning permutations are covered by validate integration suites */\nfunction buildMetadataCheck(\n items: ItemWithBody[],\n metadataPolicy: ValidateMetadataPolicy,\n statusRegistry: RuntimeStatusRegistry,\n verboseDiagnostics: boolean,\n): {\n check: ValidateCheck;\n warnings: string[];\n closeReasonBackfillRows: CloseReasonBackfillRow[];\n estimateBackfillRows: EstimateBackfillRow[];\n} {\n const missingByField = Object.fromEntries(\n SUPPORTED_METADATA_REQUIRED_FIELDS.map((field) => [field, [] as string[]]),\n ) as Record<ValidateMetadataRequiredField, string[]>;\n const itemsById = new Map(items.map((item) => [item.id, item]));\n\n // GH-276: only the `strict` profile enforces planning fields on terminal\n // (closed/canceled) historical items; core/minimal/custom profiles treat a\n // retired item's missing estimate or acceptance criteria as resolved.\n const enforcePlanningFieldsOnTerminal = metadataPolicy.profile === \"strict\";\n\n for (const item of items) {\n for (const field of SUPPORTED_METADATA_REQUIRED_FIELDS) {\n if (!isMetadataFieldMissing(item, field, statusRegistry, enforcePlanningFieldsOnTerminal)) {\n continue;\n }\n missingByField[field].push(item.id);\n }\n }\n\n const warningTokens = [...metadataPolicy.warnings];\n for (const field of metadataPolicy.required_fields) {\n const missingItems = missingByField[field];\n if (missingItems.length === 0) {\n continue;\n }\n warningTokens.push(`${METADATA_WARNING_TOKEN_BY_FIELD[field]}:${missingItems.length}`);\n }\n\n // Duplicate logical issue-code detection (GH-235): advisory warning when two\n // or more items share a leading title issue code (e.g. `ISSUE-004`).\n const duplicateIssueCodes = findDuplicateIssueCodes(items);\n const duplicateIssueCodeSummary = summarizeDuplicateIssueCodes(duplicateIssueCodes, verboseDiagnostics);\n warningTokens.push(...duplicateIssueCodeSummary.warnings);\n\n // Zero-suppress counts to reduce agent token cost (telemetry pm-tylj).\n // Only emit counts for the ACTIVE required fields of the resolved profile so a\n // looser profile (e.g. core) never reports missing reviewer/risk/sprint/etc.\n // Defensive guards (Gemini high #1, PR #78 follow-up): a future settings\n // shape could include an unsupported field in required_fields — fall back\n // to 0 instead of throwing TypeError, and skip writing when the count-key\n // mapping is undefined.\n const counts: Record<string, number> = {};\n for (const field of metadataPolicy.required_fields) {\n const value = missingByField[field]?.length ?? 0;\n const countKey = METADATA_COUNT_KEY_BY_FIELD[field];\n if (value > 0 && countKey) {\n counts[countKey] = value;\n }\n }\n // Per-item-type grouping of missing required-field counts (pm-pmyq /\n // GH-172): counts only — never row dumps — and only for the ACTIVE required\n // fields, so the grouping mirrors `counts` at type granularity (e.g.\n // `{ Task: { close_reason: 3 } }`). Zero-suppressed at both levels.\n const missingFieldOccurrences: MissingFieldOccurrence[] = [];\n for (const field of metadataPolicy.required_fields) {\n for (const itemId of missingByField[field] ?? []) {\n const itemType = itemsById.get(itemId)?.type;\n missingFieldOccurrences.push({ item_type: typeof itemType === \"string\" && itemType.length > 0 ? itemType : \"Unknown\", field });\n }\n }\n const missingByType = buildMissingByTypeCounts(missingFieldOccurrences);\n const details: Record<string, unknown> = {\n checked_items: items.length,\n metadata_profile: metadataPolicy.profile,\n metadata_profile_source: metadataPolicy.profile_source,\n metadata_profile_fallback_to_core: metadataPolicy.fallback_to_core,\n required_fields: [...metadataPolicy.required_fields],\n supported_required_fields: [...SUPPORTED_METADATA_REQUIRED_FIELDS],\n counts,\n missing_by_type: missingByType,\n duplicate_issue_codes_count: duplicateIssueCodes.length,\n duplicate_issue_codes: duplicateIssueCodeSummary.rows,\n duplicate_issue_codes_truncated: duplicateIssueCodeSummary.truncated,\n };\n if (metadataPolicy.configured_custom_fields.length > 0) {\n details.configured_custom_required_fields = [...metadataPolicy.configured_custom_fields];\n }\n\n // Only emit per-field item_ids/truncated keys for the ACTIVE required fields of\n // the resolved profile (and only when there are missing items). This stops a\n // looser profile (e.g. core) from emitting the identical full ID array for\n // reviewer/risk/confidence/sprint/release that it does not even require\n // (pm-edge #2 — ~150 redundant lines per validate run on minimal/core).\n // Defensive guard (Gemini high #2, PR #78 follow-up): same optional-chain\n // safety as the counts loop above — never throw if a future settings shape\n // includes an unsupported field.\n for (const field of metadataPolicy.required_fields) {\n const missing = missingByField[field];\n if (!missing || missing.length === 0) {\n continue;\n }\n const idsKey = METADATA_ITEM_IDS_KEY_BY_FIELD[field];\n const truncatedKey = METADATA_TRUNCATED_KEY_BY_FIELD[field];\n if (!idsKey || !truncatedKey) {\n continue;\n }\n const summarized = summarizeList(missing, verboseDiagnostics ? missing.length : DIAGNOSTIC_LIST_SUMMARY_LIMIT);\n details[idsKey] = summarized.values;\n details[truncatedKey] = summarized.truncated;\n }\n\n // Auto-fix planning input (pm-c3sz): closed items flagged for a missing\n // close_reason whose resolution can serve as the derivable source value.\n // Only collected when close_reason is an active required field, so fixes\n // always trace back to an actual finding of this run.\n const closeReasonBackfillRows: CloseReasonBackfillRow[] = metadataPolicy.required_fields.includes(\"close_reason\")\n ? (missingByField.close_reason ?? []).map((itemId) => ({\n id: itemId,\n resolution: toNonEmptyStringOrUndefined(itemsById.get(itemId)?.resolution),\n }))\n : [];\n\n // Estimate auto-fix planning input (GH-212): items flagged for a missing\n // estimated_minutes whose type drives the config-driven default backfill.\n // Only collected when estimated_minutes is an active required field, so fixes\n // always trace back to an actual finding of this run.\n const estimateBackfillRows: EstimateBackfillRow[] = metadataPolicy.required_fields.includes(\"estimated_minutes\")\n ? (missingByField.estimated_minutes ?? []).map((itemId) => ({\n id: itemId,\n type: toNonEmptyStringOrUndefined(itemsById.get(itemId)?.type),\n }))\n : [];\n\n return {\n check: {\n name: \"metadata\",\n status: warningTokens.length === 0 ? \"ok\" : \"warn\",\n details,\n },\n warnings: warningTokens,\n closeReasonBackfillRows,\n estimateBackfillRows,\n };\n}\n/* c8 ignore stop */\n\nfunction buildResolutionCheck(\n items: ItemWithBody[],\n statusRegistry: RuntimeStatusRegistry,\n verboseDiagnostics: boolean,\n): { check: ValidateCheck; warnings: string[]; resolutionBackfillRows: ResolutionBackfillRow[] } {\n const terminalDoneStatuses = new Set<string>(statusRegistry.terminal_done_statuses);\n terminalDoneStatuses.add(statusRegistry.close_status);\n const closedItems = items.filter((item) => terminalDoneStatuses.has(normalizeStatusForRegistry(item.status, statusRegistry)));\n const missingResolutionRows: Array<{ id: string; missing_fields: ResolutionFieldKey[] }> = [];\n const resolutionBackfillRows: ResolutionBackfillRow[] = [];\n\n for (const item of closedItems) {\n const missingFields = RESOLUTION_FIELD_KEYS.filter((field) => !toNonEmptyStringOrUndefined(item[field]));\n if (missingFields.length === 0) {\n continue;\n }\n missingResolutionRows.push({\n id: item.id,\n missing_fields: missingFields,\n });\n // Auto-fix planning input (pm-c3sz): the planner backfills only the\n // `resolution` field, deriving from the item's close_reason when present.\n resolutionBackfillRows.push({\n id: item.id,\n missing_fields: missingFields,\n close_reason: toNonEmptyStringOrUndefined(item.close_reason),\n });\n }\n\n const warnings =\n missingResolutionRows.length > 0 ? [`validate_resolution_missing_fields:${missingResolutionRows.length}`] : [];\n const diagnosticLimit = verboseDiagnostics ? Number.POSITIVE_INFINITY : DIAGNOSTIC_LIST_SUMMARY_LIMIT;\n const summarizedRows = summarizeList(\n missingResolutionRows.map((row) => `${row.id}:${row.missing_fields.join(\",\")}`),\n diagnosticLimit,\n );\n const remediationHints = missingResolutionRows.map((row) => buildResolutionRemediationCommand(row));\n const summarizedHints = summarizeList(remediationHints, diagnosticLimit);\n return {\n check: {\n name: \"resolution\",\n status: warnings.length === 0 ? \"ok\" : \"warn\",\n details: {\n checked_closed_items: closedItems.length,\n missing_resolution_items: missingResolutionRows.length,\n missing_resolution_rows: summarizedRows.values,\n missing_resolution_rows_truncated: summarizedRows.truncated,\n missing_resolution_remediation_hints: summarizedHints.values,\n missing_resolution_remediation_hints_truncated: summarizedHints.truncated,\n },\n },\n warnings,\n resolutionBackfillRows,\n };\n}\n\n/* c8 ignore start -- lifecycle dependency-graph cycle analysis is covered by lifecycle integration fixtures */\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction buildLifecycleDependencyGraph(activeItems: ItemWithBody[], idPrefix = \"pm\"): Map<string, string[]> {\n const activeItemIds = new Set(activeItems.map((item) => item.id));\n const graph = new Map<string, string[]>();\n const sortedItems = [...activeItems].sort((left, right) => left.id.localeCompare(right.id));\n for (const item of sortedItems) {\n const edges = new Set<string>();\n const blockedBy = toMeaningfulString(item.blocked_by);\n if (blockedBy && activeItemIds.has(blockedBy)) {\n edges.add(blockedBy);\n }\n for (const dependency of item.dependencies ?? []) {\n const dependencyId = toMeaningfulString(dependency.id);\n if (!dependencyId || !activeItemIds.has(dependencyId)) {\n continue;\n }\n edges.add(dependencyId);\n }\n const definitionOfReady = toMeaningfulString(item.definition_of_ready);\n if (definitionOfReady) {\n for (const referencedId of extractItemIds(definitionOfReady, idPrefix)) {\n if (activeItemIds.has(referencedId)) {\n edges.add(referencedId);\n }\n }\n }\n graph.set(item.id, [...edges].sort((left, right) => left.localeCompare(right)));\n }\n return graph;\n}\n/* c8 ignore stop */\n\nfunction extractItemIds(value: string, idPrefix = \"pm\"): string[] {\n const normalizedPrefix = (idPrefix.trim().toLowerCase() || \"pm\").replace(/-+$/g, \"\");\n const pattern = new RegExp(`(?:^|[^a-z0-9-])(${escapeRegExp(normalizedPrefix)}-[a-z0-9][a-z0-9-]*)`, \"gi\");\n return [...new Set([...value.matchAll(pattern)].map((match) => match[1]!.toLowerCase()))].sort(\n (left, right) => left.localeCompare(right),\n );\n}\n\n/* c8 ignore start -- Tarjan SCC traversal branch matrix is covered by lifecycle cycle integration fixtures */\nfunction findLifecycleDependencyCycleComponents(graph: Map<string, string[]>): string[][] {\n let nextIndex = 0;\n const indexById = new Map<string, number>();\n const lowLinkById = new Map<string, number>();\n const stack: string[] = [];\n const inStack = new Set<string>();\n const components: string[][] = [];\n\n const visit = (id: string): void => {\n indexById.set(id, nextIndex);\n lowLinkById.set(id, nextIndex);\n nextIndex += 1;\n stack.push(id);\n inStack.add(id);\n\n for (const dependencyId of graph.get(id) ?? []) {\n if (!indexById.has(dependencyId)) {\n visit(dependencyId);\n lowLinkById.set(id, Math.min(lowLinkById.get(id)!, lowLinkById.get(dependencyId)!));\n } else if (inStack.has(dependencyId)) {\n lowLinkById.set(id, Math.min(lowLinkById.get(id)!, indexById.get(dependencyId)!));\n }\n }\n\n if (lowLinkById.get(id) !== indexById.get(id)) {\n return;\n }\n const component: string[] = [];\n while (stack.length > 0) {\n const member = stack.pop()!;\n inStack.delete(member);\n component.push(member);\n if (member === id) {\n break;\n }\n }\n component.sort((left, right) => left.localeCompare(right));\n components.push(component);\n };\n\n const sortedNodeIds = [...graph.keys()].sort((left, right) => left.localeCompare(right));\n for (const id of sortedNodeIds) {\n if (!indexById.has(id)) {\n visit(id);\n }\n }\n\n const cycleComponents = components.filter((component) => {\n if (component.length > 1) {\n return true;\n }\n const selfId = component[0];\n return (graph.get(selfId) ?? []).includes(selfId);\n });\n return cycleComponents.sort(\n (left, right) =>\n left[0].localeCompare(right[0]) ||\n left.length - right.length ||\n left.join(\",\").localeCompare(right.join(\",\")),\n );\n}\n/* c8 ignore stop */\n\n/* c8 ignore start -- cycle sample-path fallback branches are covered by lifecycle graph integration tests */\nfunction resolveLifecycleDependencyCycleSamplePath(component: string[], graph: Map<string, string[]>): string[] {\n const start = component[0];\n if (component.length === 1) {\n return [start, start];\n }\n const componentSet = new Set(component);\n const path: string[] = [start];\n const visited = new Set<string>([start]);\n\n const search = (current: string): boolean => {\n const neighbors = (graph.get(current) ?? []).filter((candidate) => componentSet.has(candidate));\n for (const next of neighbors) {\n if (next === start && path.length > 1) {\n path.push(start);\n return true;\n }\n if (visited.has(next)) {\n continue;\n }\n visited.add(next);\n path.push(next);\n if (search(next)) {\n return true;\n }\n path.pop();\n visited.delete(next);\n }\n return false;\n };\n\n if (search(start)) {\n return [...path];\n }\n return [...component, start];\n}\n/* c8 ignore stop */\n\nfunction detectLifecycleDependencyCycles(activeItems: ItemWithBody[], idPrefix = \"pm\"): {\n cycle_count: number;\n cycle_item_ids: string[];\n cycle_sample_paths: string[];\n} {\n const graph = buildLifecycleDependencyGraph(activeItems, idPrefix);\n const cycleComponents = findLifecycleDependencyCycleComponents(graph);\n const cycleItemIds = [...new Set(cycleComponents.flat())].sort((left, right) => left.localeCompare(right));\n const cycleSamplePaths = cycleComponents.map((component) =>\n resolveLifecycleDependencyCycleSamplePath(component, graph).join(\"->\"),\n );\n return {\n cycle_count: cycleComponents.length,\n cycle_item_ids: cycleItemIds,\n cycle_sample_paths: cycleSamplePaths,\n };\n}\n\n// Parent (composition) cycle detection (pm-8vul / GH-280). The dependency-cycle\n// path above only walks blocked_by/definition_of_ready edges across ACTIVE items;\n// it never traverses item.parent, so a parent cycle (A.parent=B, B.parent=A, or\n// any longer ring) goes undetected while it silently breaks `pm list --tree`,\n// orphan detection, and progress rollups. We reuse the generic Tarjan SCC helper\n// on a child->[parent] adjacency map. Unlike dependency cycles we scan ALL items\n// (not just active ones) because a parent cycle among closed items is still\n// structural corruption of the hierarchy.\nfunction buildLifecycleParentGraph(items: ItemWithBody[]): Map<string, string[]> {\n // PR #279 made parent matching case-insensitive (e.g. `parent: PM-FK49`\n // resolves to `id: pm-fk49`). Resolve parent references to their canonical\n // item id the same way so a casing mismatch can never silently drop a cycle\n // edge and hide a parent cycle (false negative).\n const canonicalIdByLowercase = new Map(items.map((item) => [item.id.toLowerCase(), item.id]));\n const graph = new Map<string, string[]>();\n const sortedItems = [...items].sort((left, right) => left.id.localeCompare(right.id));\n for (const item of sortedItems) {\n const edges: string[] = [];\n const parentId = toMeaningfulString(item.parent);\n const canonicalParentId = parentId ? canonicalIdByLowercase.get(parentId.toLowerCase()) : undefined;\n if (canonicalParentId) {\n edges.push(canonicalParentId);\n }\n graph.set(item.id, edges);\n }\n return graph;\n}\n\nfunction detectLifecycleParentCycles(items: ItemWithBody[]): {\n cycle_count: number;\n cycle_item_ids: string[];\n cycle_sample_paths: string[];\n} {\n const graph = buildLifecycleParentGraph(items);\n const cycleComponents = findLifecycleDependencyCycleComponents(graph);\n const cycleItemIds = [...new Set(cycleComponents.flat())].sort((left, right) => left.localeCompare(right));\n const cycleSamplePaths = cycleComponents.map((component) =>\n resolveLifecycleDependencyCycleSamplePath(component, graph).join(\"->\"),\n );\n return {\n cycle_count: cycleComponents.length,\n cycle_item_ids: cycleItemIds,\n cycle_sample_paths: cycleSamplePaths,\n };\n}\n\ninterface OrphanedPathRow {\n path: string;\n classification: OrphanedPathClassification;\n owner_candidate: {\n id: string;\n type: string;\n title: string;\n status: string;\n confidence: \"path_prefix\" | \"same_directory\" | \"shared_directory\";\n } | null;\n remediation_hint: string;\n}\n\nfunction classifyOrphanedPath(pathValue: string): OrphanedPathClassification {\n if (pathValue.startsWith(\"docs/\")) {\n return \"docs_unowned\";\n }\n if (pathValue.startsWith(\"tests/\")) {\n return \"tests_unowned\";\n }\n if (pathValue.startsWith(\"src/\")) {\n return \"source_unowned\";\n }\n if (pathValue.endsWith(\".md\")) {\n return \"docs_unowned\";\n }\n return \"unlinked_existing\";\n}\n\nfunction directoryOf(relativePath: string): string {\n const slash = relativePath.lastIndexOf(\"/\");\n return slash === -1 ? \"\" : relativePath.slice(0, slash);\n}\n\nfunction sharedDirectoryPrefixLength(left: string, right: string): number {\n const leftParts = directoryOf(left).split(\"/\").filter(Boolean);\n const rightParts = directoryOf(right).split(\"/\").filter(Boolean);\n let count = 0;\n while (count < leftParts.length && count < rightParts.length && leftParts[count] === rightParts[count]) {\n count += 1;\n }\n return count;\n}\n\nfunction findOrphanOwnerCandidate(\n pathValue: string,\n classification: OrphanedPathClassification,\n items: readonly ItemWithBody[],\n): OrphanedPathRow[\"owner_candidate\"] {\n const linkKind = classification === \"docs_unowned\" ? \"docs\" : \"files\";\n let best:\n | {\n item: ItemWithBody;\n score: number;\n confidence: \"path_prefix\" | \"same_directory\" | \"shared_directory\";\n }\n | undefined;\n for (const item of items) {\n const links = linkKind === \"docs\" ? item.docs ?? [] : item.files ?? [];\n for (const link of links) {\n if (link.scope !== \"project\") {\n continue;\n }\n const linkedPath = normalizeRelativePath(link.path);\n if (linkedPath.length === 0 || linkedPath === pathValue) {\n continue;\n }\n const linkedDir = directoryOf(linkedPath);\n const orphanDir = directoryOf(pathValue);\n const directoryPrefix = linkedPath.endsWith(\"/\") ? linkedPath : `${linkedPath}/`;\n const isDirectoryPrefix = pathValue.startsWith(directoryPrefix);\n const sameDirectory = linkedDir.length > 0 && linkedDir === orphanDir;\n const sharedPrefixLength = sharedDirectoryPrefixLength(pathValue, linkedPath);\n if (!isDirectoryPrefix && !sameDirectory && sharedPrefixLength === 0) {\n continue;\n }\n const score = isDirectoryPrefix ? linkedPath.length + 1000 : sameDirectory ? sharedPrefixLength + 500 : sharedPrefixLength;\n if (best === undefined || score > best.score || (score === best.score && item.id.localeCompare(best.item.id) < 0)) {\n best = {\n item,\n score,\n confidence: isDirectoryPrefix ? \"path_prefix\" : sameDirectory ? \"same_directory\" : \"shared_directory\",\n };\n }\n }\n }\n if (!best) {\n return null;\n }\n return {\n id: best.item.id,\n type: best.item.type,\n title: best.item.title,\n status: best.item.status,\n confidence: best.confidence,\n };\n}\n\nfunction buildOrphanedPathRows(orphanedFiles: readonly string[], items: readonly ItemWithBody[]): OrphanedPathRow[] {\n return orphanedFiles.map((pathValue) => {\n const classification = classifyOrphanedPath(pathValue);\n const linkCommand = classification === \"docs_unowned\" ? \"docs\" : \"files\";\n const ownerCandidate = findOrphanOwnerCandidate(pathValue, classification, items);\n const target = ownerCandidate?.id ?? \"<id>\";\n return {\n path: pathValue,\n classification,\n owner_candidate: ownerCandidate,\n remediation_hint: `pm ${linkCommand} ${target} --add path=${pathValue},scope=project,note=\"<why this artifact belongs to the item>\"`,\n };\n });\n}\n\nfunction summarizeOrphanedPathRows(rows: readonly OrphanedPathRow[]): string[] {\n return rows.map(\n (row) =>\n `${row.path}:${row.classification} owner_candidate=${row.owner_candidate?.id ?? \"unowned\"} hint=${JSON.stringify(row.remediation_hint)}`,\n );\n}\n\n/* c8 ignore start -- lifecycle stale/terminal/dependency diagnostics matrix is covered by end-to-end validate integration runs */\nfunction buildLifecycleCheck(\n items: ItemWithBody[],\n includeStaleBlockers: boolean,\n dependencyCycleSeverity: ValidateDependencyCycleSeverity,\n parentCycleSeverity: ValidateDependencyCycleSeverity,\n statusRegistry: RuntimeStatusRegistry,\n lifecyclePatternPolicy: LifecyclePatternPolicy,\n verboseDiagnostics: boolean,\n idPrefix = \"pm\",\n): { check: ValidateCheck; warnings: string[]; terminalParentFixRows: TerminalParentFixRow[] } {\n const itemsById = new Map(items.map((item) => [item.id, item]));\n const blockedStatuses =\n statusRegistry.blocked_statuses.size > 0 ? statusRegistry.blocked_statuses : new Set<string>([\"blocked\"]);\n const activeItems = items.filter((item) => !isTerminalStatus(item.status, statusRegistry));\n const closureLikeRows: Array<{ id: string; fields: string[] }> = [];\n const terminalParentRows: Array<{ id: string; parent_id: string; parent_status: string }> = [];\n const terminalParentFixRows: TerminalParentFixRow[] = [];\n const staleBlockerRows: Array<{ id: string; status: string; reasons: string[] }> = [];\n\n for (const item of activeItems) {\n const closureLikeFields = Object.entries(lifecyclePatternPolicy.closure_like_metadata_field_patterns)\n .filter(([field, patterns]) => {\n const value = toMeaningfulString(item[field as keyof ItemWithBody]);\n if (!value) {\n return false;\n }\n const normalized = value.toLowerCase();\n return patterns.some((pattern) => normalized.includes(pattern));\n })\n .map(([field]) => field)\n .sort((left, right) => left.localeCompare(right));\n\n if (closureLikeFields.length > 0) {\n closureLikeRows.push({\n id: item.id,\n fields: closureLikeFields,\n });\n }\n\n const parentId = toMeaningfulString(item.parent);\n if (parentId) {\n const parent = itemsById.get(parentId);\n if (parent && isTerminalStatus(parent.status, statusRegistry)) {\n terminalParentRows.push({\n id: item.id,\n parent_id: parent.id,\n parent_status: parent.status,\n });\n // Gated lifecycle auto-fix input (pm-8jss): when the terminal parent\n // has its own ACTIVE parent, the child can be reparented one level up;\n // otherwise the suggested fix clears the parent link.\n const grandparentId = toMeaningfulString(parent.parent);\n const grandparent = grandparentId ? itemsById.get(grandparentId) : undefined;\n terminalParentFixRows.push({\n id: item.id,\n parent_id: parent.id,\n grandparent_id: grandparent?.id,\n grandparent_active: grandparent !== undefined && !isTerminalStatus(grandparent.status, statusRegistry),\n });\n }\n }\n\n if (includeStaleBlockers) {\n const blockedBy = toMeaningfulString(item.blocked_by);\n const blockedReason = toMeaningfulString(item.blocked_reason);\n const blockedReasonNormalized = blockedReason?.toLowerCase();\n const reasons: string[] = [];\n const normalizedStatus = normalizeStatusForRegistry(item.status, statusRegistry);\n\n if (!blockedStatuses.has(normalizedStatus)) {\n if (blockedBy) {\n reasons.push(\"non_blocked_status_has_blocked_by\");\n }\n if (blockedReason) {\n reasons.push(\"non_blocked_status_has_blocked_reason\");\n }\n } else {\n if (!blockedBy && !blockedReason) {\n reasons.push(\"blocked_status_missing_blocker_context\");\n }\n if (blockedReasonNormalized?.includes(\"no active blocker\")) {\n reasons.push(\"blocked_status_reason_reports_no_active_blocker\");\n }\n if (\n blockedReasonNormalized &&\n lifecyclePatternPolicy.stale_blocker_reason_patterns.some((pattern) => blockedReasonNormalized.includes(pattern))\n ) {\n reasons.push(\"blocked_status_reason_matches_stale_pattern\");\n }\n }\n\n if (reasons.length > 0) {\n staleBlockerRows.push({\n id: item.id,\n status: item.status,\n reasons: [...new Set(reasons)].sort((left, right) => left.localeCompare(right)),\n });\n }\n }\n }\n\n closureLikeRows.sort((left, right) => left.id.localeCompare(right.id));\n terminalParentRows.sort(\n (left, right) => left.id.localeCompare(right.id) || left.parent_id.localeCompare(right.parent_id),\n );\n terminalParentFixRows.sort(\n (left, right) => left.id.localeCompare(right.id) || left.parent_id.localeCompare(right.parent_id),\n );\n staleBlockerRows.sort((left, right) => left.id.localeCompare(right.id));\n const dependencyCycleDiagnostics = detectLifecycleDependencyCycles(activeItems, idPrefix);\n const parentCycleDiagnostics = detectLifecycleParentCycles(items);\n\n const warnings: string[] = [];\n if (closureLikeRows.length > 0) {\n warnings.push(`validate_lifecycle_active_closure_like_metadata:${closureLikeRows.length}`);\n }\n if (terminalParentRows.length > 0) {\n warnings.push(`validate_lifecycle_active_terminal_parent:${terminalParentRows.length}`);\n }\n if (includeStaleBlockers && staleBlockerRows.length > 0) {\n warnings.push(`validate_lifecycle_stale_blockers:${staleBlockerRows.length}`);\n }\n if (dependencyCycleDiagnostics.cycle_count > 0 && dependencyCycleSeverity !== \"off\") {\n warnings.push(\n `${\n dependencyCycleSeverity === \"error\"\n ? \"validate_lifecycle_dependency_cycles_error\"\n : \"validate_lifecycle_dependency_cycles\"\n }:${dependencyCycleDiagnostics.cycle_count}`,\n );\n }\n if (parentCycleDiagnostics.cycle_count > 0 && parentCycleSeverity !== \"off\") {\n warnings.push(\n `${\n parentCycleSeverity === \"error\"\n ? \"validate_hierarchy_parent_cycle_error\"\n : \"validate_hierarchy_parent_cycle\"\n }:${parentCycleDiagnostics.cycle_count}`,\n );\n }\n\n const diagnosticLimit = verboseDiagnostics ? Number.POSITIVE_INFINITY : DIAGNOSTIC_LIST_SUMMARY_LIMIT;\n const summarizedClosureLikeRows = summarizeList(\n closureLikeRows.map((row) => `${row.id}:${row.fields.join(\",\")}`),\n diagnosticLimit,\n );\n const summarizedTerminalParentRows = summarizeList(\n terminalParentRows.map((row) => `${row.id}:${row.parent_id}:${row.parent_status}`),\n diagnosticLimit,\n );\n const summarizedStaleBlockerRows = summarizeList(\n staleBlockerRows.map((row) => `${row.id}:${row.status}:${row.reasons.join(\",\")}`),\n diagnosticLimit,\n );\n const summarizedDependencyCycleItemIds = summarizeList(dependencyCycleDiagnostics.cycle_item_ids, diagnosticLimit);\n const summarizedDependencyCycleSamplePaths = summarizeList(dependencyCycleDiagnostics.cycle_sample_paths, diagnosticLimit);\n const summarizedParentCycleItemIds = summarizeList(parentCycleDiagnostics.cycle_item_ids, diagnosticLimit);\n const summarizedParentCycleSamplePaths = summarizeList(parentCycleDiagnostics.cycle_sample_paths, diagnosticLimit);\n\n const hasErrorSeverityCycle =\n (dependencyCycleDiagnostics.cycle_count > 0 && dependencyCycleSeverity === \"error\") ||\n (parentCycleDiagnostics.cycle_count > 0 && parentCycleSeverity === \"error\");\n\n return {\n check: {\n name: \"lifecycle\",\n status: hasErrorSeverityCycle\n ? \"error\"\n : warnings.length === 0\n ? \"ok\"\n : \"warn\",\n details: {\n checked_active_items: activeItems.length,\n active_closure_like_metadata_items: closureLikeRows.length,\n active_closure_like_metadata_rows: summarizedClosureLikeRows.values,\n active_closure_like_metadata_rows_truncated: summarizedClosureLikeRows.truncated,\n active_terminal_parent_items: terminalParentRows.length,\n active_terminal_parent_rows: summarizedTerminalParentRows.values,\n active_terminal_parent_rows_truncated: summarizedTerminalParentRows.truncated,\n stale_blocker_checks_enabled: includeStaleBlockers,\n stale_blocker_items: staleBlockerRows.length,\n stale_blocker_rows: summarizedStaleBlockerRows.values,\n stale_blocker_rows_truncated: summarizedStaleBlockerRows.truncated,\n dependency_cycle_severity_policy: dependencyCycleSeverity,\n dependency_cycle_count: dependencyCycleDiagnostics.cycle_count,\n dependency_cycle_item_count: dependencyCycleDiagnostics.cycle_item_ids.length,\n dependency_cycle_item_ids: summarizedDependencyCycleItemIds.values,\n dependency_cycle_item_ids_truncated: summarizedDependencyCycleItemIds.truncated,\n dependency_cycle_sample_paths: summarizedDependencyCycleSamplePaths.values,\n dependency_cycle_sample_paths_truncated: summarizedDependencyCycleSamplePaths.truncated,\n parent_cycle_severity_policy: parentCycleSeverity,\n parent_cycle_count: parentCycleDiagnostics.cycle_count,\n parent_cycle_item_count: parentCycleDiagnostics.cycle_item_ids.length,\n parent_cycle_item_ids: summarizedParentCycleItemIds.values,\n parent_cycle_item_ids_truncated: summarizedParentCycleItemIds.truncated,\n parent_cycle_sample_paths: summarizedParentCycleSamplePaths.values,\n parent_cycle_sample_paths_truncated: summarizedParentCycleSamplePaths.truncated,\n stale_blocker_reason_patterns: [...lifecyclePatternPolicy.stale_blocker_reason_patterns],\n stale_blocker_reason_pattern_source: lifecyclePatternPolicy.stale_blocker_reason_pattern_source,\n closure_like_blocked_reason_patterns: [\n ...lifecyclePatternPolicy.closure_like_metadata_field_patterns.blocked_reason,\n ],\n closure_like_blocked_reason_pattern_source:\n lifecyclePatternPolicy.closure_like_metadata_field_pattern_sources.blocked_reason,\n closure_like_resolution_patterns: [...lifecyclePatternPolicy.closure_like_metadata_field_patterns.resolution],\n closure_like_resolution_pattern_source:\n lifecyclePatternPolicy.closure_like_metadata_field_pattern_sources.resolution,\n closure_like_actual_result_patterns: [...lifecyclePatternPolicy.closure_like_metadata_field_patterns.actual_result],\n closure_like_actual_result_pattern_source:\n lifecyclePatternPolicy.closure_like_metadata_field_pattern_sources.actual_result,\n },\n },\n warnings,\n terminalParentFixRows,\n };\n}\n/* c8 ignore stop */\n\n/* c8 ignore start -- files-check candidate filtering/classification permutations are covered by file-audit integration suites */\nasync function buildFilesCheck(\n items: ItemWithBody[],\n workspaceRoot: string,\n pmRoot: string,\n fileScanMode: ValidateFileScanMode,\n includePmInternals: boolean,\n verboseFileLists: boolean,\n): Promise<{ check: ValidateCheck; warnings: string[]; staleLinkPruneRows: StaleLinkPruneRow[] }> {\n const linkedProjectPaths = new Set<string>();\n const missingLinkedPaths: string[] = [];\n const staleLinkRows: Array<{ item_id: string; path: string; link_kind: \"files\" | \"docs\" }> = [];\n const itemsById = new Map(items.map((item) => [item.id, item]));\n\n for (const item of items) {\n const linkedArtifactGroups = [\n { link_kind: \"files\" as const, artifacts: item.files ?? [] },\n { link_kind: \"docs\" as const, artifacts: item.docs ?? [] },\n ];\n for (const group of linkedArtifactGroups) {\n for (const artifact of group.artifacts) {\n if (artifact.scope !== \"project\") {\n continue;\n }\n const normalizedPath = normalizeRelativePath(artifact.path);\n if (normalizedPath.length === 0) {\n continue;\n }\n linkedProjectPaths.add(normalizedPath);\n const absolutePath = path.isAbsolute(artifact.path) ? artifact.path : path.resolve(workspaceRoot, artifact.path);\n let missing = false;\n try {\n const stats = await fs.stat(absolutePath);\n if (!stats.isFile() && !stats.isDirectory()) {\n missing = true;\n }\n } catch {\n missing = true;\n }\n if (missing) {\n missingLinkedPaths.push(normalizedPath);\n staleLinkRows.push({ item_id: item.id, path: normalizedPath, link_kind: group.link_kind });\n }\n }\n }\n }\n\n const uniqueMissingLinkedPaths = [...new Set(missingLinkedPaths)].sort((left, right) => left.localeCompare(right));\n const fileCandidates = await collectProjectFileCandidates(workspaceRoot, fileScanMode);\n const strictTrackedAllMode = fileScanMode === \"tracked-all-strict\";\n const strictModeForcesPmInternals = strictTrackedAllMode && !includePmInternals;\n const includePmInternalsEffective = includePmInternals || strictTrackedAllMode;\n const pmInternalCandidatePrefixes = includePmInternalsEffective ? [] : resolvePmInternalCandidatePrefixes(pmRoot, workspaceRoot);\n const excludedPmInternalPaths =\n pmInternalCandidatePrefixes.length === 0\n ? []\n : fileCandidates.candidateFiles.filter((candidate) => hasPathPrefix(candidate, pmInternalCandidatePrefixes));\n const candidateFiles =\n pmInternalCandidatePrefixes.length === 0\n ? fileCandidates.candidateFiles\n : fileCandidates.candidateFiles.filter((candidate) => !hasPathPrefix(candidate, pmInternalCandidatePrefixes));\n const excludedPmInternalCount = excludedPmInternalPaths.length;\n const excludedByReason: Record<string, unknown> = {};\n if (excludedPmInternalCount > 0) {\n const summarizedPmInternalPaths = summarizeFileList(excludedPmInternalPaths, verboseFileLists);\n excludedByReason.pm_internals = {\n count: excludedPmInternalCount,\n paths: summarizedPmInternalPaths.values,\n paths_truncated: summarizedPmInternalPaths.truncated,\n paths_total: summarizedPmInternalPaths.total,\n };\n }\n const orphanedFiles = candidateFiles.filter((candidate) => !linkedProjectPaths.has(candidate));\n const orphanedPathRows = buildOrphanedPathRows(orphanedFiles, items);\n // Stale-path classification (pm-0v2m / GH-184): a missing linked path whose\n // basename still exists in the candidate scan is reported as `moved` (with\n // relink candidates); otherwise it is `deleted` and safe to prune.\n const classifiedStalePaths = classifyStaleLinkedPaths(uniqueMissingLinkedPaths, candidateFiles);\n const classificationByPath = new Map(classifiedStalePaths.map((entry) => [entry.path, entry.classification]));\n const movedStalePathCount = classifiedStalePaths.filter((entry) => entry.classification === \"moved\").length;\n const staleLinkPruneRows: StaleLinkPruneRow[] = staleLinkRows\n .map((row) => ({\n ...row,\n classification: classificationByPath.get(row.path) ?? (\"deleted\" as const),\n }))\n .sort(\n (left, right) =>\n left.item_id.localeCompare(right.item_id) ||\n left.path.localeCompare(right.path) ||\n left.link_kind.localeCompare(right.link_kind),\n );\n const warnings: string[] = [];\n if (strictModeForcesPmInternals) {\n warnings.push(\"validate_files_tracked_all_strict_forces_pm_internals\");\n }\n if (uniqueMissingLinkedPaths.length > 0) {\n warnings.push(`validate_files_missing_linked_paths:${uniqueMissingLinkedPaths.length}`);\n }\n if (orphanedFiles.length > 0) {\n warnings.push(`validate_files_orphaned_paths:${orphanedFiles.length}`);\n }\n const summarizedMissing = summarizeFileList(uniqueMissingLinkedPaths, verboseFileLists);\n const summarizedOrphaned = summarizeFileList(orphanedFiles, verboseFileLists);\n const summarizedOrphanedClassifications = summarizeFileList(\n orphanedPathRows.map((row) => `${row.path}:${row.classification}:owner_candidate=${row.owner_candidate?.id ?? \"unowned\"}`),\n verboseFileLists,\n );\n const orphanedPathRowDetail = verboseFileLists\n ? orphanedPathRows\n : summarizeFileList(summarizeOrphanedPathRows(orphanedPathRows), false).values;\n const summarizedClassifications = summarizeFileList(\n summarizeStaleLinkedPathClassifications(classifiedStalePaths),\n verboseFileLists,\n );\n // Owner attribution for missing linked paths (GH-210): per-path rows naming\n // the owning item(s) so cleanup is evidence-based instead of requiring a\n // reverse lookup. Full structured objects under --verbose-file-lists; compact\n // `path:classification owner=… field=…` one-liners (capped) otherwise — same\n // full/summary split as the other file-check lists (file_list_detail_mode).\n const missingLinkedPathRows: StaleLinkOwnerInput[] = staleLinkPruneRows.map((row) => ({\n item_id: row.item_id,\n path: row.path,\n link_kind: row.link_kind,\n classification: row.classification,\n }));\n const ownerRows = buildMissingLinkedPathRows(missingLinkedPathRows, (id) => {\n const owner = itemsById.get(id);\n return owner ? { type: owner.type, title: owner.title, status: owner.status } : undefined;\n });\n // Default to token-efficient compact one-liners; expose the full structured\n // rows (the GH-210 JSON shape) under --verbose-file-lists.\n const ownerRowDetail = verboseFileLists\n ? ownerRows\n : summarizeFileList(summarizeMissingLinkedPathRows(ownerRows), false).values;\n\n return {\n check: {\n name: \"files\",\n status: warnings.length === 0 ? \"ok\" : \"warn\",\n details: {\n workspace_root: workspaceRoot,\n scan_mode_requested: fileCandidates.requestedMode,\n scan_mode_applied: fileCandidates.appliedMode,\n strict_tracked_all_mode: strictTrackedAllMode,\n strict_mode_forces_pm_internals: strictModeForcesPmInternals,\n strict_mode_forces_pm_internals_notice: strictModeForcesPmInternals\n ? \"tracked-all-strict force-enables PM internals; pass --include-pm-internals to make inclusion explicit.\"\n : null,\n file_list_detail_mode: verboseFileLists ? \"full\" : \"summary\",\n file_list_summary_limit: FILE_LIST_SUMMARY_LIMIT,\n candidate_scan_source: fileCandidates.source,\n include_pm_internals: includePmInternalsEffective,\n include_pm_internals_requested: includePmInternals,\n pm_internal_candidate_prefixes: pmInternalCandidatePrefixes,\n pm_internal_excluded_count: excludedPmInternalCount,\n excluded_total: excludedPmInternalCount,\n excluded_by_reason: excludedByReason,\n linked_project_paths: linkedProjectPaths.size,\n candidate_total_raw: fileCandidates.candidateTotal,\n candidate_scanned_raw: fileCandidates.candidateScanned,\n candidate_total: candidateFiles.length,\n candidate_scanned: candidateFiles.length,\n scanned_candidate_files: candidateFiles.length,\n missing_linked_paths_count: uniqueMissingLinkedPaths.length,\n missing_linked_paths_total: summarizedMissing.total,\n missing_linked_paths: summarizedMissing.values,\n missing_linked_paths_truncated: summarizedMissing.truncated,\n missing_linked_paths_moved_count: movedStalePathCount,\n missing_linked_paths_deleted_count: uniqueMissingLinkedPaths.length - movedStalePathCount,\n missing_linked_path_classifications: summarizedClassifications.values,\n missing_linked_path_classifications_truncated: summarizedClassifications.truncated,\n missing_linked_path_rows_count: ownerRows.length,\n missing_linked_path_rows: ownerRowDetail,\n orphaned_paths_count: orphanedFiles.length,\n orphaned_paths_total: summarizedOrphaned.total,\n orphaned_paths: summarizedOrphaned.values,\n orphaned_paths_truncated: summarizedOrphaned.truncated,\n orphaned_path_classifications: summarizedOrphanedClassifications.values,\n orphaned_path_classifications_truncated: summarizedOrphanedClassifications.truncated,\n orphaned_path_rows_count: orphanedPathRows.length,\n orphaned_path_rows: orphanedPathRowDetail,\n },\n },\n warnings,\n staleLinkPruneRows,\n };\n}\n/* c8 ignore stop */\n\n/* c8 ignore start -- history-drift warning/count projection permutations are covered by drift integration tests */\nasync function buildHistoryDriftCheck(\n pmRoot: string,\n items: ItemWithBody[],\n verboseDiagnostics: boolean,\n): Promise<{ check: ValidateCheck; warnings: string[] }> {\n const { missingStreams, unreadableStreams, hashMismatches, chainMismatches, driftedItems } = await scanHistoryDrift(\n pmRoot,\n items,\n );\n const warnings: string[] = [];\n if (missingStreams.length > 0) {\n warnings.push(`validate_history_drift_missing_streams:${missingStreams.length}`);\n }\n if (unreadableStreams.length > 0) {\n warnings.push(`validate_history_drift_unreadable_streams:${unreadableStreams.length}`);\n }\n if (hashMismatches.length > 0) {\n warnings.push(`validate_history_drift_hash_mismatches:${hashMismatches.length}`);\n }\n if (chainMismatches.length > 0) {\n warnings.push(`validate_history_drift_chain_mismatches:${chainMismatches.length}`);\n }\n const diagnosticLimit = verboseDiagnostics ? Number.POSITIVE_INFINITY : DIAGNOSTIC_LIST_SUMMARY_LIMIT;\n const summarizedDrifted = summarizeList(driftedItems, diagnosticLimit);\n return {\n check: {\n name: \"history_drift\",\n status: warnings.length === 0 ? \"ok\" : \"warn\",\n details: {\n checked_items: items.length,\n drifted_items_count: driftedItems.length,\n drifted_items: summarizedDrifted.values,\n drifted_items_truncated: summarizedDrifted.truncated,\n counts: {\n missing_streams: missingStreams.length,\n unreadable_streams: unreadableStreams.length,\n hash_mismatches: hashMismatches.length,\n chain_mismatches: chainMismatches.length,\n },\n },\n },\n warnings,\n };\n}\n/* c8 ignore stop */\n\n/* c8 ignore start -- command preview truncation formatting is covered by command-reference integration fixtures */\nfunction summarizeCommandReferenceRow(ownerId: string, referencedId: string, command: string): string {\n const normalizedCommand = command.trim().replaceAll(/\\s+/g, \" \");\n const commandPreview = normalizedCommand.length > 120 ? `${normalizedCommand.slice(0, 117)}...` : normalizedCommand;\n return `${ownerId}:${referencedId}:${commandPreview}`;\n}\n/* c8 ignore stop */\n\n/* c8 ignore start -- command-reference discovery/stale-id permutations are covered by linked-test integration suites */\nfunction buildCommandReferencesCheck(\n items: ItemWithBody[],\n idPrefix: string,\n verboseDiagnostics: boolean,\n): { check: ValidateCheck; warnings: string[] } {\n const knownIds = new Set(items.map((item) => item.id.toLowerCase()));\n let linkedCommandsScanned = 0;\n let referencedPmIdCount = 0;\n const referencedPmIds = new Set<string>();\n const staleReferenceRows: string[] = [];\n\n for (const item of items) {\n for (const linkedTest of item.tests ?? []) {\n if (typeof linkedTest.command !== \"string\" || linkedTest.command.trim().length === 0) {\n continue;\n }\n linkedCommandsScanned += 1;\n const referencedIds = extractReferencedPmItemIdsFromCommand(linkedTest.command, idPrefix);\n if (referencedIds.length === 0) {\n continue;\n }\n referencedPmIdCount += referencedIds.length;\n for (const referencedId of referencedIds) {\n referencedPmIds.add(referencedId);\n if (!knownIds.has(referencedId.toLowerCase())) {\n staleReferenceRows.push(summarizeCommandReferenceRow(item.id, referencedId, linkedTest.command));\n }\n }\n }\n }\n\n const uniqueStaleReferenceRows = [...new Set(staleReferenceRows)].sort((left, right) => left.localeCompare(right));\n const stalePmIds = [...new Set(uniqueStaleReferenceRows.map((row) => row.split(\":\")[1] ?? \"\"))]\n .filter((value) => value.length > 0)\n .sort((left, right) => left.localeCompare(right));\n const warnings =\n uniqueStaleReferenceRows.length > 0 ? [`validate_command_references_stale_pm_ids:${uniqueStaleReferenceRows.length}`] : [];\n const diagnosticLimit = verboseDiagnostics ? Number.POSITIVE_INFINITY : DIAGNOSTIC_LIST_SUMMARY_LIMIT;\n const summarizedRows = summarizeList(uniqueStaleReferenceRows, diagnosticLimit);\n const summarizedStalePmIds = summarizeList(stalePmIds, diagnosticLimit);\n const summarizedReferencedPmIds = summarizeList(\n [...referencedPmIds].sort((left, right) => left.localeCompare(right)),\n diagnosticLimit,\n );\n\n return {\n check: {\n name: \"command_references\",\n status: warnings.length === 0 ? \"ok\" : \"warn\",\n details: {\n checked_items: items.length,\n linked_commands_scanned: linkedCommandsScanned,\n referenced_pm_ids_count: referencedPmIdCount,\n unique_referenced_pm_ids_count: referencedPmIds.size,\n unique_referenced_pm_ids: summarizedReferencedPmIds.values,\n unique_referenced_pm_ids_truncated: summarizedReferencedPmIds.truncated,\n stale_pm_id_references_count: uniqueStaleReferenceRows.length,\n stale_pm_ids_count: stalePmIds.length,\n stale_pm_ids: summarizedStalePmIds.values,\n stale_pm_ids_truncated: summarizedStalePmIds.truncated,\n stale_pm_id_reference_rows: summarizedRows.values,\n stale_pm_id_reference_rows_truncated: summarizedRows.truncated,\n },\n },\n warnings,\n };\n}\n/* c8 ignore stop */\n\n/* c8 ignore start -- format-version diagnostics projection is covered by validate format-version integration fixtures */\nfunction buildFormatVersionCheck(\n items: ItemWithBody[],\n verboseDiagnostics: boolean,\n): { check: ValidateCheck; warnings: string[] } {\n const scan = scanItemFormatVersions(\n items.map((item) => ({ ref: item.id, version: effectiveItemFormatVersion(item) })),\n );\n const warnings: string[] = [];\n if (scan.outdated.length > 0) {\n warnings.push(`validate_format_version_outdated_items:${scan.outdated.length}`);\n }\n if (scan.ahead.length > 0) {\n warnings.push(`validate_format_version_ahead_items:${scan.ahead.length}`);\n }\n const diagnosticLimit = verboseDiagnostics ? Number.POSITIVE_INFINITY : DIAGNOSTIC_LIST_SUMMARY_LIMIT;\n const summarizedOutdated = summarizeList(scan.outdated, diagnosticLimit);\n const summarizedAhead = summarizeList(scan.ahead, diagnosticLimit);\n // `ahead` items were written by a newer pm than this runtime: validation\n // cannot vouch for fields it does not understand, so it is an error (upgrade\n // pm). `outdated` items are a non-fatal warning (a migration would rewrite\n // them). At the current baseline version neither list is populated.\n const status: ValidateStatus = scan.ahead.length > 0 ? \"error\" : scan.outdated.length > 0 ? \"warn\" : \"ok\";\n return {\n check: {\n name: \"format_version\",\n status,\n details: {\n checked_items: items.length,\n current_format_version: CURRENT_ITEM_FORMAT_VERSION,\n outdated_items_count: scan.outdated.length,\n outdated_items: summarizedOutdated.values,\n outdated_items_truncated: summarizedOutdated.truncated,\n ahead_items_count: scan.ahead.length,\n ahead_items: summarizedAhead.values,\n ahead_items_truncated: summarizedAhead.truncated,\n },\n },\n warnings,\n };\n}\n/* c8 ignore stop */\n\nconst VALIDATE_AUTO_FIX_MESSAGE = \"pm validate auto-fix\";\n\n/**\n * Apply one planned fix through the SAME audited command paths an operator\n * would use by hand (`pm update` / `pm files --remove` / `pm docs --remove`),\n * so every applied fix carries normal history, locking, and hook behavior.\n * Command modules are imported lazily: plain validate runs stay read-only and\n * never pay the mutation-stack import cost.\n */\n/* c8 ignore start -- lazy mutation-command dispatch branches are covered by validate auto-fix integration tests */\nasync function applyValidateFix(fix: ValidateFixRecord, global: GlobalOptions): Promise<void> {\n switch (fix.kind) {\n case \"set_resolution\":\n case \"set_close_reason\":\n case \"set_estimate\":\n case \"reparent\":\n case \"unset_parent\": {\n const { runUpdate } = await import(\"./update.js\");\n const updateOptions: Record<string, unknown> = { message: VALIDATE_AUTO_FIX_MESSAGE };\n if (fix.kind === \"set_resolution\") {\n updateOptions.resolution = fix.value;\n } else if (fix.kind === \"set_close_reason\") {\n updateOptions.closeReason = fix.value;\n } else if (fix.kind === \"set_estimate\") {\n updateOptions.estimatedMinutes = fix.value;\n } else if (fix.kind === \"reparent\") {\n updateOptions.parent = fix.parent_id;\n } else {\n updateOptions.unset = [\"parent\"];\n }\n await runUpdate(fix.item_id, updateOptions, global);\n return;\n }\n case \"prune_file_link\": {\n throw new Error(`Unsupported non-batched fix kind: ${fix.kind}`);\n }\n case \"prune_doc_link\": {\n throw new Error(`Unsupported non-batched fix kind: ${fix.kind}`);\n }\n }\n}\n/* c8 ignore stop */\n\nfunction pruneBatchKey(fix: ValidateFixRecord): string | null {\n if (fix.kind !== \"prune_file_link\" && fix.kind !== \"prune_doc_link\") {\n return null;\n }\n return `${fix.kind}:${fix.item_id}`;\n}\n\n/* c8 ignore start -- batched prune/apply failure fan-out permutations are covered by auto-fix integration suites */\nasync function applyValidateFixes(applicable: ValidateFixRecord[], global: GlobalOptions): Promise<{\n applied: ValidateFixRecord[];\n failed: Array<{ fix: ValidateFixRecord; error: unknown }>;\n}> {\n const applied: ValidateFixRecord[] = [];\n const failed: Array<{ fix: ValidateFixRecord; error: unknown }> = [];\n const pruneBatches = new Map<string, ValidateFixRecord[]>();\n\n for (const fix of applicable) {\n const batchKey = pruneBatchKey(fix);\n if (batchKey === null) {\n try {\n await applyValidateFix(fix, global);\n applied.push(fix);\n } catch (error) {\n failed.push({ fix, error });\n }\n continue;\n }\n const existing = pruneBatches.get(batchKey);\n if (existing) {\n existing.push(fix);\n } else {\n pruneBatches.set(batchKey, [fix]);\n }\n }\n\n for (const batch of pruneBatches.values()) {\n const first = batch[0];\n /* c8 ignore next 2 -- pruneBatches values are only created with at least one fix */\n if (!first) {\n continue;\n }\n const remove = batch\n .map((fix) => fix.path)\n .filter((value): value is string => typeof value === \"string\" && value.length > 0);\n try {\n if (first.kind === \"prune_file_link\") {\n const { runFiles } = await import(\"./files.js\");\n await runFiles(first.item_id, { remove, message: VALIDATE_AUTO_FIX_MESSAGE }, global);\n } else {\n const { runDocs } = await import(\"./docs.js\");\n await runDocs(first.item_id, { remove, message: VALIDATE_AUTO_FIX_MESSAGE }, global);\n }\n applied.push(...batch);\n } catch (error) {\n failed.push(...batch.map((fix) => ({ fix, error })));\n }\n }\n\n return { applied, failed };\n}\n/* c8 ignore stop */\n\nexport const _testOnlyValidateCommand = {\n applyValidateFix,\n applyValidateFixes,\n attachValidateFixHints,\n buildCommandReferencesCheck,\n buildFilesCheck,\n buildLifecycleCheck,\n buildLifecycleDependencyGraph,\n buildLifecycleParentGraph,\n buildOrphanedPathRows,\n classifyOrphanedPath,\n collectDefaultProjectFileCandidates,\n collectTrackedGitFileCandidates,\n detectLifecycleDependencyCycles,\n detectLifecycleParentCycles,\n escapeRegExp,\n extractItemIds,\n findLifecycleDependencyCycleComponents,\n isMetadataFieldMissing,\n listFilesRecursive,\n resolveDependencyCycleSeverity,\n resolveParentCycleSeverity,\n resolveFileScanMode,\n resolveLifecycleDependencyCycleSamplePath,\n resolveRequestedChecks,\n resolveValidateMetadataProfile,\n resolveWorkspaceRoot,\n sharedDirectoryPrefixLength,\n summarizeOrphanedPathRows,\n summarizeDuplicateIssueCodes,\n toMeaningfulString,\n};\n\n/* c8 ignore start -- validate orchestration + fix-application matrices are covered by end-to-end command integration runs */\n/**\n * Implements run validate for the public runtime surface of this module.\n */\nexport async function runValidate(options: ValidateCommandOptions, global: GlobalOptions): Promise<ValidateResult> {\n const fixesRequested = options.autoFix === true || options.pruneMissing === true;\n if (options.dryRun === true && !fixesRequested) {\n throw new PmCliError(\n \"--dry-run requires --auto-fix or --prune-missing (there is nothing to preview otherwise).\",\n EXIT_CODE.USAGE,\n );\n }\n if (options.fixScope !== undefined && options.fixScope.length > 0 && options.autoFix !== true) {\n throw new PmCliError(\"--fix-scope requires --auto-fix.\", EXIT_CODE.USAGE);\n }\n // Resolved up-front so unknown --fix-scope values fail fast before any scan.\n const grantedFixScopes = resolveGrantedFixScopes(options.fixScope);\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);\n }\n\n const settings = await readSettings(pmRoot);\n const statusRegistry = resolveRuntimeStatusRegistry(settings.schema);\n const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());\n const itemReadWarnings: string[] = [];\n const items = await listAllFrontMatterWithBody(\n pmRoot,\n settings.item_format,\n typeRegistry.type_to_folder,\n itemReadWarnings,\n settings.schema,\n );\n const requestedChecks = resolveRequestedChecks(options);\n const metadataProfileSource: \"default\" | \"settings\" | \"option\" =\n typeof options.metadataProfile === \"string\" ? \"option\" : \"settings\";\n const metadataProfile = resolveValidateMetadataProfile(\n typeof options.metadataProfile === \"string\" ? options.metadataProfile : settings.validation.metadata_profile,\n );\n const metadataPolicy = resolveValidateMetadataPolicy(\n metadataProfile,\n metadataProfileSource,\n settings.validation.metadata_required_fields,\n );\n const lifecyclePatternPolicy = resolveLifecyclePatternPolicy(settings);\n const dependencyCycleSeverity = resolveDependencyCycleSeverity(options.dependencyCycleSeverity);\n const parentCycleSeverity = resolveParentCycleSeverity(options.parentCycleSeverity);\n const fileScanMode = resolveFileScanMode(options.scanMode);\n const workspaceRoot = resolveWorkspaceRoot(pmRoot);\n const checks: ValidateCheck[] = [];\n const warnings = [...new Set(itemReadWarnings)];\n const fixHintsEnabled = options.fixHints === true;\n // Full (un-truncated) diagnostic ID lists when the agent asks for them\n // (--verbose-diagnostics/--all-affected-ids) or whenever output is JSON:\n // machine consumers expect complete *_item_ids arrays, never a 5-item cap.\n const fullDiagnostics =\n options.verboseDiagnostics === true || options.allAffectedIds === true || global.json === true;\n const record = (built: { check: ValidateCheck; warnings: string[] }): void => {\n if (fixHintsEnabled) {\n attachValidateFixHints(built.check, built.warnings);\n }\n checks.push(built.check);\n warnings.push(...built.warnings);\n };\n\n let closeReasonBackfillRows: CloseReasonBackfillRow[] = [];\n let estimateBackfillRows: EstimateBackfillRow[] = [];\n let resolutionBackfillRows: ResolutionBackfillRow[] = [];\n let terminalParentFixRows: TerminalParentFixRow[] = [];\n let staleLinkPruneRows: StaleLinkPruneRow[] = [];\n\n if (requestedChecks.has(\"metadata\")) {\n const built = buildMetadataCheck(items, metadataPolicy, statusRegistry, fullDiagnostics);\n closeReasonBackfillRows = built.closeReasonBackfillRows;\n estimateBackfillRows = built.estimateBackfillRows;\n record(built);\n }\n if (requestedChecks.has(\"resolution\")) {\n const built = buildResolutionCheck(items, statusRegistry, fullDiagnostics);\n resolutionBackfillRows = built.resolutionBackfillRows;\n record(built);\n }\n if (requestedChecks.has(\"lifecycle\")) {\n const built = buildLifecycleCheck(\n items,\n Boolean(options.checkStaleBlockers),\n dependencyCycleSeverity,\n parentCycleSeverity,\n statusRegistry,\n lifecyclePatternPolicy,\n fullDiagnostics,\n settings.id_prefix,\n );\n terminalParentFixRows = built.terminalParentFixRows;\n record(built);\n }\n if (requestedChecks.has(\"files\")) {\n const built = await buildFilesCheck(\n items,\n workspaceRoot,\n pmRoot,\n fileScanMode,\n Boolean(options.includePmInternals),\n Boolean(options.verboseFileLists),\n );\n staleLinkPruneRows = built.staleLinkPruneRows;\n record(built);\n }\n if (requestedChecks.has(\"command_references\")) {\n record(buildCommandReferencesCheck(items, settings.id_prefix, fullDiagnostics));\n }\n if (requestedChecks.has(\"history_drift\")) {\n record(await buildHistoryDriftCheck(pmRoot, items, fullDiagnostics));\n }\n if (requestedChecks.has(\"format_version\")) {\n record(buildFormatVersionCheck(items, fullDiagnostics));\n }\n\n // Remediation phase (pm-c3sz / pm-8jss / pm-0v2m). Plans are derived from\n // the findings of THIS run; checks above always report the pre-fix state.\n // Safe field backfills apply by default under --auto-fix; gated lifecycle\n // fixes are planned but withheld unless --fix-scope lifecycle grants them;\n // --dry-run previews without mutating; failures never abort the run.\n let fixes: ValidateFixesSummary | undefined;\n if (fixesRequested) {\n const planned: ValidateFixRecord[] = [];\n if (options.autoFix === true) {\n planned.push(...planCloseReasonBackfillFixes(closeReasonBackfillRows));\n planned.push(...planResolutionBackfillFixes(resolutionBackfillRows));\n planned.push(...planEstimateBackfillFixes(estimateBackfillRows, settings.validation.estimate_defaults_by_type));\n planned.push(...planTerminalParentFixes(terminalParentFixRows));\n }\n if (options.pruneMissing === true) {\n planned.push(...planStaleLinkPruneFixes(staleLinkPruneRows));\n }\n const { applicable, gated } = partitionFixesByGrant(planned, grantedFixScopes);\n const dryRun = options.dryRun === true;\n const appliedFixRows: Array<Record<string, unknown>> = [];\n const failedFixRows: Array<Record<string, unknown>> = [];\n if (!dryRun) {\n const applied = await applyValidateFixes(applicable, global);\n appliedFixRows.push(...applied.applied.map(toFixOutputRow));\n failedFixRows.push(\n ...applied.failed.map(({ fix, error }) => ({\n ...toFixOutputRow(fix),\n error: error instanceof Error ? error.message : String(error),\n })),\n );\n }\n fixes = {\n mode: dryRun ? \"dry_run\" : \"apply\",\n auto_fix: options.autoFix === true,\n prune_missing: options.pruneMissing === true,\n granted_fix_scopes: [...grantedFixScopes].sort((left, right) => left.localeCompare(right)),\n planned_count: planned.length,\n applied_count: appliedFixRows.length,\n gated_count: gated.length,\n failed_count: failedFixRows.length,\n planned_fixes: planned.map(toFixOutputRow),\n applied_fixes: appliedFixRows,\n gated_fixes: gated.map((fix) => ({\n ...toFixOutputRow(fix),\n gate_hint: `Withheld: re-run with --fix-scope ${fix.gate} to apply.`,\n })),\n failed_fixes: failedFixRows,\n };\n }\n\n const normalizedWarnings = [...new Set(warnings)].sort((left, right) => left.localeCompare(right));\n const hasErrors = checks.some((check) => check.status === \"error\");\n return {\n ok: !hasErrors,\n has_warnings: normalizedWarnings.length > 0,\n checks,\n warnings: normalizedWarnings,\n ...(fixes !== undefined ? { fixes } : {}),\n generated_at: nowIso(),\n };\n}\n/* c8 ignore stop */\n"],"names":[],"mappings":"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","debugId":"45e0faee-e9a6-5db2-bdf1-f955fd494833"}
1
+ {"version":3,"file":"validate.js","sources":["cli/commands/validate.ts"],"sourceRoot":"/","sourcesContent":["/**\n * @module cli/commands/validate\n *\n * Implements the pm validate command surface and its agent-facing runtime behavior.\n */\nimport fs from \"node:fs/promises\";\nimport { realpathSync } from \"node:fs\";\nimport type { Dirent } from \"node:fs\";\nimport { execFile } from \"node:child_process\";\nimport path from \"node:path\";\nimport { promisify } from \"node:util\";\nimport { buildRemediationCommands } from \"../../core/diagnostics/remediation.js\";\nimport { getActiveExtensionRegistrations } from \"../../core/extensions/index.js\";\nimport { pathExists } from \"../../core/fs/fs-utils.js\";\nimport { scanHistoryDrift } from \"../../core/history/drift-scan.js\";\nimport { normalizeStatusInput } from \"../../core/item/status.js\";\nimport { resolveItemTypeRegistry } from \"../../core/item/type-registry.js\";\nimport { resolveRuntimeStatusRegistry, type RuntimeStatusRegistry } from \"../../core/schema/runtime-schema.js\";\nimport {\n DEFAULT_VALIDATE_CLOSURE_LIKE_METADATA_FIELD_PATTERNS,\n DEFAULT_VALIDATE_STALE_BLOCKER_REASON_PATTERNS,\n EXIT_CODE,\n PM_DIRNAME,\n} from \"../../core/shared/constants.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { toNonEmptyStringOrUndefined } from \"../../core/shared/primitives.js\";\nimport { nowIso } from \"../../core/shared/time.js\";\nimport {\n CURRENT_ITEM_FORMAT_VERSION,\n effectiveItemFormatVersion,\n scanItemFormatVersions,\n} from \"../../core/item/item-format-version.js\";\nimport { listAllFrontMatterWithBody } from \"../../core/store/item-store.js\";\nimport { getSettingsPath, resolvePmRoot } from \"../../core/store/paths.js\";\nimport { readSettings } from \"../../core/store/settings.js\";\nimport {\n partitionFixesByGrant,\n planCloseReasonBackfillFixes,\n planEstimateBackfillFixes,\n planResolutionBackfillFixes,\n planStaleLinkPruneFixes,\n planTerminalParentFixes,\n resolveGrantedFixScopes,\n toFixOutputRow,\n type CloseReasonBackfillRow,\n type EstimateBackfillRow,\n type ResolutionBackfillRow,\n type StaleLinkPruneRow,\n type TerminalParentFixRow,\n type ValidateFixRecord,\n} from \"../../core/validate/fix-planning.js\";\nimport { findDuplicateIssueCodes, type DuplicateIssueCode } from \"../../core/governance/issue-codes.js\";\nimport { buildMissingByTypeCounts, type MissingFieldOccurrence } from \"../../core/validate/missing-by-type.js\";\nimport {\n classifyStaleLinkedPaths,\n summarizeStaleLinkedPathClassifications,\n} from \"../../core/validate/stale-file-classification.js\";\nimport { isRemoteLinkedArtifactReference } from \"../../core/validate/linked-artifact-reference.js\";\nimport {\n buildMissingLinkedPathRows,\n summarizeMissingLinkedPathRows,\n type StaleLinkOwnerInput,\n} from \"../../core/validate/missing-link-owners.js\";\nimport type { ValidateMetadataProfile, ValidateMetadataRequiredField } from \"../../types/index.js\";\nimport { extractReferencedPmItemIdsFromCommand } from \"./test.js\";\n\ntype ValidateCheckName =\n | \"metadata\"\n | \"resolution\"\n | \"lifecycle\"\n | \"files\"\n | \"command_references\"\n | \"history_drift\"\n | \"format_version\";\ntype ValidateStatus = \"ok\" | \"warn\" | \"error\";\ntype ValidateDependencyCycleSeverity = \"off\" | \"warn\" | \"error\";\ntype ValidateFileScanMode = \"default\" | \"tracked-all\" | \"tracked-all-strict\";\ntype ItemWithBody = Awaited<ReturnType<typeof listAllFrontMatterWithBody>>[number];\ntype FileCandidateSource = \"default-curated\" | \"tracked-git\" | \"tracked-all-fallback-default\";\ntype OrphanedPathClassification = \"docs_unowned\" | \"tests_unowned\" | \"source_unowned\" | \"unlinked_existing\";\n\nconst FILE_SCAN_DIRECTORIES = [\"src\", \"tests\", \"docs\"] as const;\nconst FILE_SCAN_ROOT_FILES = [\n \"README.md\",\n \"PRD.md\",\n \"CHANGELOG.md\",\n \"AGENTS.md\",\n \"CONTRIBUTING.md\",\n \"SECURITY.md\",\n \"CODE_OF_CONDUCT.md\",\n \"LICENSE\",\n] as const;\nconst DIRECTORY_IGNORE_SET = new Set([\"node_modules\", \".git\", \".cursor\", \".agents\", \"dist\", \"coverage\"]);\nconst RESOLUTION_FIELD_KEYS = [\"resolution\", \"expected_result\", \"actual_result\"] as const;\ntype ResolutionFieldKey = (typeof RESOLUTION_FIELD_KEYS)[number];\nconst VALIDATE_FILE_SCAN_MODES = [\"default\", \"tracked-all\", \"tracked-all-strict\"] as const;\nconst VALIDATE_METADATA_PROFILE_VALUES = [\"core\", \"strict\", \"custom\"] as const;\nconst VALIDATE_DEPENDENCY_CYCLE_SEVERITY_VALUES = [\"off\", \"warn\", \"error\"] as const;\nconst LIFECYCLE_PATTERN_FIELD_KEYS = [\"blocked_reason\", \"resolution\", \"actual_result\"] as const;\ntype LifecyclePatternFieldKey = (typeof LIFECYCLE_PATTERN_FIELD_KEYS)[number];\nconst CORE_METADATA_REQUIRED_FIELDS = [\"author\", \"acceptance_criteria\", \"estimated_minutes\", \"close_reason\"] as const;\nconst STRICT_METADATA_REQUIRED_FIELDS = [\n ...CORE_METADATA_REQUIRED_FIELDS,\n \"reviewer\",\n \"risk\",\n \"confidence\",\n \"sprint\",\n \"release\",\n] as const;\n// Keep this deduplicated so future list edits cannot double-count metadata diagnostics.\nconst SUPPORTED_METADATA_REQUIRED_FIELDS: readonly ValidateMetadataRequiredField[] = Array.from(\n new Set<ValidateMetadataRequiredField>(STRICT_METADATA_REQUIRED_FIELDS),\n);\nconst METADATA_REQUIRED_FIELD_ALIASES: Record<string, ValidateMetadataRequiredField> = {\n author: \"author\",\n acceptance_criteria: \"acceptance_criteria\",\n \"acceptance-criteria\": \"acceptance_criteria\",\n estimated_minutes: \"estimated_minutes\",\n \"estimated-minutes\": \"estimated_minutes\",\n estimate: \"estimated_minutes\",\n close_reason: \"close_reason\",\n \"close-reason\": \"close_reason\",\n reviewer: \"reviewer\",\n risk: \"risk\",\n confidence: \"confidence\",\n sprint: \"sprint\",\n release: \"release\",\n};\nconst METADATA_WARNING_TOKEN_BY_FIELD: Record<ValidateMetadataRequiredField, string> = {\n author: \"validate_metadata_missing_author\",\n acceptance_criteria: \"validate_metadata_missing_acceptance_criteria\",\n estimated_minutes: \"validate_metadata_missing_estimate\",\n close_reason: \"validate_metadata_missing_close_reason\",\n reviewer: \"validate_metadata_missing_reviewer\",\n risk: \"validate_metadata_missing_risk\",\n confidence: \"validate_metadata_missing_confidence\",\n sprint: \"validate_metadata_missing_sprint\",\n release: \"validate_metadata_missing_release\",\n};\nconst METADATA_COUNT_KEY_BY_FIELD: Record<ValidateMetadataRequiredField, string> = {\n author: \"missing_author\",\n acceptance_criteria: \"missing_acceptance_criteria\",\n estimated_minutes: \"missing_estimated_minutes\",\n close_reason: \"closed_missing_close_reason\",\n reviewer: \"missing_reviewer\",\n risk: \"missing_risk\",\n confidence: \"missing_confidence\",\n sprint: \"missing_sprint\",\n release: \"missing_release\",\n};\nconst METADATA_ITEM_IDS_KEY_BY_FIELD: Record<ValidateMetadataRequiredField, string> = {\n author: \"missing_author_item_ids\",\n acceptance_criteria: \"missing_acceptance_criteria_item_ids\",\n estimated_minutes: \"missing_estimated_minutes_item_ids\",\n close_reason: \"closed_missing_close_reason_item_ids\",\n reviewer: \"missing_reviewer_item_ids\",\n risk: \"missing_risk_item_ids\",\n confidence: \"missing_confidence_item_ids\",\n sprint: \"missing_sprint_item_ids\",\n release: \"missing_release_item_ids\",\n};\nconst METADATA_TRUNCATED_KEY_BY_FIELD: Record<ValidateMetadataRequiredField, string> = {\n author: \"missing_author_truncated\",\n acceptance_criteria: \"missing_acceptance_criteria_truncated\",\n estimated_minutes: \"missing_estimated_minutes_truncated\",\n close_reason: \"closed_missing_close_reason_truncated\",\n reviewer: \"missing_reviewer_truncated\",\n risk: \"missing_risk_truncated\",\n confidence: \"missing_confidence_truncated\",\n sprint: \"missing_sprint_truncated\",\n release: \"missing_release_truncated\",\n};\nconst GIT_LS_FILES_MAX_BUFFER = 32 * 1024 * 1024;\nconst FILE_LIST_SUMMARY_LIMIT = 40;\nconst DIAGNOSTIC_LIST_SUMMARY_LIMIT = 5;\nconst execFileAsync = promisify(execFile);\n\n/**\n * Documents the validate command options payload exchanged by command, SDK, and package integrations.\n */\nexport interface ValidateCommandOptions {\n checkMetadata?: boolean;\n checkResolution?: boolean;\n checkLifecycle?: boolean;\n checkStaleBlockers?: boolean;\n dependencyCycleSeverity?: string;\n parentCycleSeverity?: string;\n checkFiles?: boolean;\n includePmInternals?: boolean;\n verboseFileLists?: boolean;\n verboseDiagnostics?: boolean;\n /** Emit complete *_item_ids diagnostic lists (no 5-item cap); implied by --json. */\n allAffectedIds?: boolean;\n checkHistoryDrift?: boolean;\n checkCommandReferences?: boolean;\n scanMode?: string;\n metadataProfile?: string;\n fixHints?: boolean;\n autoFix?: boolean;\n dryRun?: boolean;\n fixScope?: string[];\n pruneMissing?: boolean;\n}\n\n/**\n * Documents the validate check payload exchanged by command, SDK, and package integrations.\n */\nexport interface ValidateCheck {\n name: ValidateCheckName;\n status: ValidateStatus;\n details: Record<string, unknown>;\n}\n\n/**\n * Documents the validate fixes summary payload exchanged by command, SDK, and package integrations.\n */\nexport interface ValidateFixesSummary {\n mode: \"apply\" | \"dry_run\";\n auto_fix: boolean;\n prune_missing: boolean;\n granted_fix_scopes: string[];\n planned_count: number;\n applied_count: number;\n gated_count: number;\n failed_count: number;\n planned_fixes: Array<Record<string, unknown>>;\n applied_fixes: Array<Record<string, unknown>>;\n gated_fixes: Array<Record<string, unknown>>;\n failed_fixes: Array<Record<string, unknown>>;\n}\n\n/**\n * Documents the validate result payload exchanged by command, SDK, and package integrations.\n */\nexport interface ValidateResult {\n ok: boolean;\n has_warnings: boolean;\n checks: ValidateCheck[];\n warnings: string[];\n /** Present when --auto-fix or --prune-missing was requested; checks always reflect the PRE-fix state. */\n fixes?: ValidateFixesSummary;\n generated_at: string;\n}\n\nfunction normalizeRelativePath(value: string): string {\n return value.replaceAll(\"\\\\\", \"/\").replace(/^\\.\\/+/, \"\").replace(/^\\/+/, \"\");\n}\n\nfunction normalizeRelativeDirectoryPath(value: string): string {\n const normalized = normalizeRelativePath(value);\n return normalized.replace(/\\/+$/, \"\");\n}\n\n\n\nfunction toMeaningfulString(value: unknown): string | undefined {\n const normalized = toNonEmptyStringOrUndefined(value);\n if (!normalized) {\n return undefined;\n }\n const lowered = normalized.toLowerCase();\n if (lowered === \"none\" || lowered === \"null\" || lowered === \"n/a\" || lowered === \"na\") {\n return undefined;\n }\n return normalized;\n}\n\n/* c8 ignore start -- runtime-status alias normalization is covered by status-registry integration tests */\nfunction normalizeStatusForRegistry(status: string, statusRegistry: RuntimeStatusRegistry): string {\n return normalizeStatusInput(status, statusRegistry) ?? status;\n}\n/* c8 ignore stop */\n\nfunction isTerminalStatus(status: string, statusRegistry: RuntimeStatusRegistry): boolean {\n return statusRegistry.terminal_statuses.has(normalizeStatusForRegistry(status, statusRegistry));\n}\n\ninterface ValidateMetadataPolicy {\n profile: ValidateMetadataProfile;\n profile_source: \"default\" | \"settings\" | \"option\";\n required_fields: ValidateMetadataRequiredField[];\n configured_custom_fields: ValidateMetadataRequiredField[];\n fallback_to_core: boolean;\n warnings: string[];\n}\n\ntype LifecyclePatternSource = \"default\" | \"settings\";\n\ninterface LifecyclePatternPolicy {\n stale_blocker_reason_patterns: string[];\n stale_blocker_reason_pattern_source: LifecyclePatternSource;\n closure_like_metadata_field_patterns: Record<LifecyclePatternFieldKey, string[]>;\n closure_like_metadata_field_pattern_sources: Record<LifecyclePatternFieldKey, LifecyclePatternSource>;\n}\n\ninterface LifecyclePatternSettingsSource {\n validation: {\n lifecycle_stale_blocker_reason_patterns: string[];\n lifecycle_closure_like_blocked_reason_patterns: string[];\n lifecycle_closure_like_resolution_patterns: string[];\n lifecycle_closure_like_actual_result_patterns: string[];\n };\n}\n\n/* c8 ignore start -- lifecycle pattern normalization/default-vs-settings matrix is covered by lifecycle integration tests */\nfunction normalizeLifecyclePatternList(values: readonly string[] | undefined): string[] {\n return [...new Set((values ?? []).map((value) => value.trim().toLowerCase()).filter((value) => value.length > 0))].sort(\n (left, right) => left.localeCompare(right),\n );\n}\n\nfunction areSortedStringListsEqual(left: readonly string[], right: readonly string[]): boolean {\n if (left.length !== right.length) {\n return false;\n }\n return left.every((value, index) => value === right[index]);\n}\n\nfunction resolveLifecyclePatternPolicy(settings: LifecyclePatternSettingsSource): LifecyclePatternPolicy {\n const defaultStalePatterns = normalizeLifecyclePatternList(DEFAULT_VALIDATE_STALE_BLOCKER_REASON_PATTERNS);\n const defaultClosureLikePatterns = {\n blocked_reason: normalizeLifecyclePatternList(DEFAULT_VALIDATE_CLOSURE_LIKE_METADATA_FIELD_PATTERNS.blocked_reason),\n resolution: normalizeLifecyclePatternList(DEFAULT_VALIDATE_CLOSURE_LIKE_METADATA_FIELD_PATTERNS.resolution),\n actual_result: normalizeLifecyclePatternList(DEFAULT_VALIDATE_CLOSURE_LIKE_METADATA_FIELD_PATTERNS.actual_result),\n } satisfies Record<LifecyclePatternFieldKey, string[]>;\n const staleBlockerReasonPatterns = normalizeLifecyclePatternList(\n settings.validation.lifecycle_stale_blocker_reason_patterns,\n );\n const closureLikePatterns = {\n blocked_reason: normalizeLifecyclePatternList(settings.validation.lifecycle_closure_like_blocked_reason_patterns),\n resolution: normalizeLifecyclePatternList(settings.validation.lifecycle_closure_like_resolution_patterns),\n actual_result: normalizeLifecyclePatternList(settings.validation.lifecycle_closure_like_actual_result_patterns),\n } satisfies Record<LifecyclePatternFieldKey, string[]>;\n return {\n stale_blocker_reason_patterns: staleBlockerReasonPatterns,\n stale_blocker_reason_pattern_source: areSortedStringListsEqual(staleBlockerReasonPatterns, defaultStalePatterns)\n ? \"default\"\n : \"settings\",\n closure_like_metadata_field_patterns: closureLikePatterns,\n closure_like_metadata_field_pattern_sources: {\n blocked_reason: areSortedStringListsEqual(closureLikePatterns.blocked_reason, defaultClosureLikePatterns.blocked_reason)\n ? \"default\"\n : \"settings\",\n resolution: areSortedStringListsEqual(closureLikePatterns.resolution, defaultClosureLikePatterns.resolution)\n ? \"default\"\n : \"settings\",\n actual_result: areSortedStringListsEqual(closureLikePatterns.actual_result, defaultClosureLikePatterns.actual_result)\n ? \"default\"\n : \"settings\",\n },\n };\n}\n/* c8 ignore stop */\n\nfunction resolveValidateMetadataProfile(value: string | undefined): ValidateMetadataProfile {\n const normalized = value?.trim().toLowerCase();\n if (!normalized || normalized.length === 0) {\n return \"core\";\n }\n if ((VALIDATE_METADATA_PROFILE_VALUES as readonly string[]).includes(normalized)) {\n return normalized as ValidateMetadataProfile;\n }\n throw new PmCliError(\n `Unknown --metadata-profile value \"${value}\". Supported values: ${VALIDATE_METADATA_PROFILE_VALUES.join(\", \")}.`,\n EXIT_CODE.USAGE,\n );\n}\n\nfunction resolveDependencyCycleSeverity(value: string | undefined): ValidateDependencyCycleSeverity {\n const normalized = value?.trim().toLowerCase();\n if (!normalized || normalized.length === 0) {\n return \"warn\";\n }\n if ((VALIDATE_DEPENDENCY_CYCLE_SEVERITY_VALUES as readonly string[]).includes(normalized)) {\n return normalized as ValidateDependencyCycleSeverity;\n }\n throw new PmCliError(\n `Unknown --dependency-cycle-severity value \"${value}\". Supported values: ${VALIDATE_DEPENDENCY_CYCLE_SEVERITY_VALUES.join(\", \")}.`,\n EXIT_CODE.USAGE,\n );\n}\n\nfunction resolveParentCycleSeverity(value: string | undefined): ValidateDependencyCycleSeverity {\n const normalized = value?.trim().toLowerCase();\n if (!normalized || normalized.length === 0) {\n return \"warn\";\n }\n if ((VALIDATE_DEPENDENCY_CYCLE_SEVERITY_VALUES as readonly string[]).includes(normalized)) {\n return normalized as ValidateDependencyCycleSeverity;\n }\n throw new PmCliError(\n `Unknown --parent-cycle-severity value \"${value}\". Supported values: ${VALIDATE_DEPENDENCY_CYCLE_SEVERITY_VALUES.join(\", \")}.`,\n EXIT_CODE.USAGE,\n );\n}\n\n/* c8 ignore start -- metadata required-field alias normalization is covered by metadata-policy integration tests */\nfunction normalizeMetadataRequiredFieldsFromSettings(\n values: readonly ValidateMetadataRequiredField[] | undefined,\n): ValidateMetadataRequiredField[] {\n const normalized = [...new Set((values ?? []).map((value) => value.trim().toLowerCase().replaceAll(\"-\", \"_\")))];\n return normalized\n .map((value) => METADATA_REQUIRED_FIELD_ALIASES[value])\n .filter((value): value is ValidateMetadataRequiredField => value !== undefined)\n .sort((left, right) => left.localeCompare(right));\n}\n/* c8 ignore stop */\n\nfunction resolveValidateMetadataPolicy(\n profile: ValidateMetadataProfile,\n profileSource: \"default\" | \"settings\" | \"option\",\n configuredCustomFields: readonly ValidateMetadataRequiredField[],\n): ValidateMetadataPolicy {\n const normalizedCustomFields = normalizeMetadataRequiredFieldsFromSettings(configuredCustomFields);\n if (profile === \"core\") {\n return {\n profile,\n profile_source: profileSource,\n required_fields: [...CORE_METADATA_REQUIRED_FIELDS],\n configured_custom_fields: normalizedCustomFields,\n fallback_to_core: false,\n warnings: [],\n };\n }\n if (profile === \"strict\") {\n return {\n profile,\n profile_source: profileSource,\n required_fields: [...STRICT_METADATA_REQUIRED_FIELDS],\n configured_custom_fields: normalizedCustomFields,\n fallback_to_core: false,\n warnings: [],\n };\n }\n if (normalizedCustomFields.length > 0) {\n return {\n profile,\n profile_source: profileSource,\n required_fields: normalizedCustomFields,\n configured_custom_fields: normalizedCustomFields,\n fallback_to_core: false,\n warnings: [],\n };\n }\n return {\n profile,\n profile_source: profileSource,\n required_fields: [...CORE_METADATA_REQUIRED_FIELDS],\n configured_custom_fields: normalizedCustomFields,\n fallback_to_core: true,\n warnings: [\"validate_metadata_custom_profile_missing_required_fields:0\"],\n };\n}\n\n/**\n * Planning fields whose absence is only actionable on live work (GH-276): an\n * agent backfills an estimate or acceptance criteria to plan/execute an item,\n * so flagging them on a terminal (closed/canceled) historical item is pure\n * noise. Under the `strict` profile these are still enforced everywhere for\n * projects that want full historical coverage.\n */\nconst TERMINAL_EXEMPT_PLANNING_FIELDS: ReadonlySet<ValidateMetadataRequiredField> = new Set([\n \"acceptance_criteria\",\n \"estimated_minutes\",\n]);\n\nfunction isMetadataFieldMissing(\n item: ItemWithBody,\n field: ValidateMetadataRequiredField,\n statusRegistry: RuntimeStatusRegistry,\n enforcePlanningFieldsOnTerminal: boolean,\n): boolean {\n // GH-276: skip planning-field gaps on retired (closed/canceled) items unless\n // the resolved profile explicitly demands strict historical coverage.\n if (\n !enforcePlanningFieldsOnTerminal &&\n TERMINAL_EXEMPT_PLANNING_FIELDS.has(field) &&\n isTerminalStatus(item.status, statusRegistry)\n ) {\n return false;\n }\n if (field === \"author\") {\n return !toNonEmptyStringOrUndefined(item.author);\n }\n if (field === \"acceptance_criteria\") {\n return !toNonEmptyStringOrUndefined(item.acceptance_criteria);\n }\n if (field === \"estimated_minutes\") {\n return !Number.isFinite(item.estimated_minutes);\n }\n if (field === \"close_reason\") {\n return normalizeStatusForRegistry(item.status, statusRegistry) === statusRegistry.close_status && !toNonEmptyStringOrUndefined(item.close_reason);\n }\n if (field === \"reviewer\") {\n return !toNonEmptyStringOrUndefined(item.reviewer);\n }\n if (field === \"risk\") {\n return !toNonEmptyStringOrUndefined(item.risk);\n }\n if (field === \"confidence\") {\n if (typeof item.confidence === \"number\") {\n return !Number.isFinite(item.confidence);\n }\n return !toNonEmptyStringOrUndefined(item.confidence);\n }\n if (field === \"sprint\") {\n return !toNonEmptyStringOrUndefined(item.sprint);\n }\n return !toNonEmptyStringOrUndefined(item.release);\n}\n\nfunction resolveFileScanMode(scanMode: string | undefined): ValidateFileScanMode {\n if (scanMode === undefined) {\n return \"default\";\n }\n const normalized = scanMode.trim().toLowerCase();\n if (normalized.length === 0) {\n return \"default\";\n }\n if (normalized === \"default\") {\n return \"default\";\n }\n if (normalized === \"tracked-all\" || normalized === \"tracked_all\") {\n return \"tracked-all\";\n }\n if (normalized === \"tracked-all-strict\" || normalized === \"tracked_all_strict\") {\n return \"tracked-all-strict\";\n }\n throw new PmCliError(\n `Unknown --scan-mode value \"${scanMode}\". Supported values: ${VALIDATE_FILE_SCAN_MODES.join(\", \")}.`,\n EXIT_CODE.USAGE,\n );\n}\n\nfunction resolveWorkspaceRoot(pmRoot: string): string {\n const resolvedPmRoot = path.resolve(pmRoot);\n const normalizedPmRoot = resolvedPmRoot.replaceAll(\"\\\\\", \"/\");\n if (normalizedPmRoot.endsWith(\"/.agents/pm\")) {\n return path.dirname(path.dirname(resolvedPmRoot));\n }\n const resolvedCwd = path.resolve(process.cwd());\n const canonicalPmRoot = realpathForWorkspaceRoot(resolvedPmRoot);\n const canonicalCwd = realpathForWorkspaceRoot(resolvedCwd);\n const relativeFromPmRoot = path.relative(canonicalPmRoot, canonicalCwd);\n const cwdInsidePmRoot =\n relativeFromPmRoot.length === 0 ||\n (!relativeFromPmRoot.startsWith(\"..\") && !path.isAbsolute(relativeFromPmRoot));\n if (cwdInsidePmRoot) {\n return resolvedPmRoot;\n }\n /* c8 ignore next 2 -- non-standard PM root layouts are integration-only edge cases. */\n return resolvedCwd;\n}\n\nfunction realpathForWorkspaceRoot(inputPath: string): string {\n try {\n return realpathSync.native(inputPath);\n } catch {\n return path.resolve(inputPath);\n }\n}\n\n/* c8 ignore start -- recursive file-walk dirent/permission edge cases are covered by filesystem integration suites */\nasync function listFilesRecursive(basePath: string, relativePath: string, output: string[]): Promise<void> {\n const targetDirectory = relativePath.length > 0 ? path.join(basePath, relativePath) : basePath;\n let entries: Dirent[];\n try {\n entries = await fs.readdir(targetDirectory, { withFileTypes: true });\n } catch (error: unknown) {\n if (typeof error === \"object\" && error !== null && \"code\" in error && (error as { code?: string }).code === \"ENOENT\") {\n return;\n }\n throw error;\n }\n\n for (const entry of entries) {\n if (entry.name.startsWith(\".\")) {\n continue;\n }\n const childRelative = relativePath.length > 0 ? path.join(relativePath, entry.name) : entry.name;\n if (entry.isDirectory()) {\n if (DIRECTORY_IGNORE_SET.has(entry.name)) {\n continue;\n }\n await listFilesRecursive(basePath, childRelative, output);\n continue;\n }\n /* c8 ignore next 3 -- non-file dirent variants (symlink/socket) are filesystem-specific. */\n if (!entry.isFile()) {\n continue;\n }\n output.push(normalizeRelativePath(childRelative));\n }\n}\n/* c8 ignore stop */\n\nasync function collectDefaultProjectFileCandidates(workspaceRoot: string): Promise<string[]> {\n const discovered: string[] = [];\n for (const directory of FILE_SCAN_DIRECTORIES) {\n await listFilesRecursive(workspaceRoot, directory, discovered);\n }\n for (const candidate of FILE_SCAN_ROOT_FILES) {\n const absolute = path.join(workspaceRoot, candidate);\n try {\n const stats = await fs.stat(absolute);\n /* c8 ignore start -- root-candidate presence depends on fixture workspace composition. */\n if (stats.isFile()) {\n discovered.push(normalizeRelativePath(candidate));\n }\n /* c8 ignore stop */\n } catch {\n // Ignore root-file candidates that are not present in this workspace.\n }\n }\n return [...new Set(discovered)].sort((left, right) => left.localeCompare(right));\n}\n\nasync function collectTrackedGitFileCandidates(workspaceRoot: string): Promise<string[] | null> {\n try {\n const { stdout } = await execFileAsync(\"git\", [\"ls-files\", \"-z\"], {\n cwd: workspaceRoot,\n encoding: \"utf8\",\n maxBuffer: GIT_LS_FILES_MAX_BUFFER,\n windowsHide: true,\n });\n const discovered = stdout\n .split(\"\\0\")\n .map((value) => normalizeRelativePath(value))\n .filter((value) => value.length > 0);\n return [...new Set(discovered)].sort((left, right) => left.localeCompare(right));\n } catch {\n /* c8 ignore start -- fallback path exercised only when git metadata is unavailable. */\n return null;\n /* c8 ignore stop */\n }\n}\n\ninterface FileCandidateCollection {\n requestedMode: ValidateFileScanMode;\n appliedMode: ValidateFileScanMode;\n source: FileCandidateSource;\n candidateFiles: string[];\n candidateTotal: number;\n candidateScanned: number;\n}\n\n/* c8 ignore start -- PM-internal prefix derivation permutations are covered by file-scan integration tests */\nfunction resolvePmInternalCandidatePrefixes(pmRoot: string, workspaceRoot: string): string[] {\n const prefixes = new Set<string>();\n const configuredDefault = normalizeRelativeDirectoryPath(PM_DIRNAME);\n if (configuredDefault.length > 0) {\n prefixes.add(configuredDefault);\n }\n const relativePmRoot = normalizeRelativeDirectoryPath(path.relative(workspaceRoot, pmRoot));\n if (relativePmRoot.length > 0 && !relativePmRoot.startsWith(\"..\")) {\n prefixes.add(relativePmRoot);\n }\n return [...prefixes].sort((left, right) => left.localeCompare(right));\n}\n/* c8 ignore stop */\n\nfunction hasPathPrefix(candidate: string, prefixes: string[]): boolean {\n for (const prefix of prefixes) {\n if (candidate === prefix || candidate.startsWith(`${prefix}/`)) {\n return true;\n }\n }\n return false;\n}\n\nasync function collectProjectFileCandidates(\n workspaceRoot: string,\n scanMode: ValidateFileScanMode,\n): Promise<FileCandidateCollection> {\n if (scanMode === \"tracked-all\" || scanMode === \"tracked-all-strict\") {\n const trackedCandidates = await collectTrackedGitFileCandidates(workspaceRoot);\n /* c8 ignore start -- tracked-git availability fallback is covered by git/non-git integration fixtures */\n if (trackedCandidates) {\n return {\n requestedMode: scanMode,\n appliedMode: scanMode,\n source: \"tracked-git\",\n candidateFiles: trackedCandidates,\n candidateTotal: trackedCandidates.length,\n candidateScanned: trackedCandidates.length,\n };\n }\n /* c8 ignore stop */\n /* c8 ignore start -- deterministic fallback retained for non-git workspaces. */\n const fallbackCandidates = await collectDefaultProjectFileCandidates(workspaceRoot);\n return {\n requestedMode: scanMode,\n appliedMode: \"default\",\n source: \"tracked-all-fallback-default\",\n candidateFiles: fallbackCandidates,\n candidateTotal: fallbackCandidates.length,\n candidateScanned: fallbackCandidates.length,\n };\n /* c8 ignore stop */\n }\n\n const defaultCandidates = await collectDefaultProjectFileCandidates(workspaceRoot);\n return {\n requestedMode: scanMode,\n appliedMode: \"default\",\n source: \"default-curated\",\n candidateFiles: defaultCandidates,\n candidateTotal: defaultCandidates.length,\n candidateScanned: defaultCandidates.length,\n };\n}\n\nfunction summarizeList(values: string[], limit = DIAGNOSTIC_LIST_SUMMARY_LIMIT): { values: string[]; truncated: boolean } {\n /* c8 ignore start -- truncation behavior only surfaces with very large synthetic datasets. */\n if (values.length <= limit) {\n return { values, truncated: false };\n }\n return {\n values: values.slice(0, limit),\n truncated: true,\n };\n /* c8 ignore stop */\n}\n\nfunction summarizeFileList(\n values: string[],\n verboseFileLists: boolean,\n): {\n values: string[];\n truncated: boolean;\n total: number;\n} {\n if (verboseFileLists) {\n return {\n values,\n truncated: false,\n total: values.length,\n };\n }\n const summary = summarizeList(values, FILE_LIST_SUMMARY_LIMIT);\n return {\n values: summary.values,\n truncated: summary.truncated,\n total: values.length,\n };\n}\n\nconst RESOLUTION_REMEDIATION_FLAG_BY_FIELD: Record<ResolutionFieldKey, string> = {\n resolution: \"--resolution\",\n expected_result: \"--expected-result\",\n actual_result: \"--actual-result\",\n};\n\nconst RESOLUTION_REMEDIATION_PLACEHOLDER_BY_FIELD: Record<ResolutionFieldKey, string> = {\n resolution: \"Describe how this item was resolved\",\n expected_result: \"Describe the expected result\",\n actual_result: \"Describe the actual result\",\n};\n\nfunction buildResolutionRemediationCommand(row: { id: string; missing_fields: ResolutionFieldKey[] }): string {\n const fieldArguments = row.missing_fields\n .map((field) => `${RESOLUTION_REMEDIATION_FLAG_BY_FIELD[field]} \\\"${RESOLUTION_REMEDIATION_PLACEHOLDER_BY_FIELD[field]}\\\"`)\n .join(\" \");\n return `pm update ${row.id} ${fieldArguments} --message \\\"Backfill resolution metadata\\\"`;\n}\n\n/**\n * Attach a uniform, machine-executable `fix_hints` array to a validate check's\n * details when `--fix-hints` is requested. The resolution check's existing\n * per-row remediation commands (which already carry concrete item ids) are\n * aliased in so agents read one uniform field across every check; all other\n * checks derive one generic command per distinct warning code from the shared\n * remediation registry. Generic hints may contain `<id>`/`<field>`/`<path>`\n * placeholders the caller substitutes before running — they are templates, not\n * always directly executable as-is. Read-only: this only enriches the diagnostic\n * output, never mutates any item.\n */\n/* c8 ignore start -- fix-hint projection/truncation combinations are covered by validate output integration tests */\nfunction attachValidateFixHints(check: ValidateCheck, checkWarnings: string[]): void {\n const existingResolutionHints = check.details?.missing_resolution_remediation_hints;\n const aliasedResolution = Array.isArray(existingResolutionHints) && existingResolutionHints.length > 0;\n const fixHints = aliasedResolution\n ? (existingResolutionHints as unknown[]).filter((hint): hint is string => typeof hint === \"string\")\n : buildRemediationCommands(checkWarnings);\n if (fixHints.length === 0) {\n return;\n }\n // The resolution check truncates its per-row hint list for low-token output;\n // carry that marker onto fix_hints so an agent knows the list is partial and\n // there are more items to repair beyond the ones shown.\n const truncated = aliasedResolution && check.details?.missing_resolution_remediation_hints_truncated === true;\n check.details = {\n ...check.details,\n fix_hints: fixHints,\n ...(truncated ? { fix_hints_truncated: true } : {}),\n };\n}\n/* c8 ignore stop */\n\nfunction resolveRequestedChecks(options: ValidateCommandOptions): Set<ValidateCheckName> {\n const requested = new Set<ValidateCheckName>();\n if (options.checkMetadata) {\n requested.add(\"metadata\");\n }\n if (options.checkResolution) {\n requested.add(\"resolution\");\n }\n if (options.checkLifecycle || options.checkStaleBlockers) {\n requested.add(\"lifecycle\");\n }\n if (options.checkFiles) {\n requested.add(\"files\");\n }\n if (options.checkHistoryDrift) {\n requested.add(\"history_drift\");\n }\n if (options.checkCommandReferences) {\n requested.add(\"command_references\");\n }\n if (requested.size === 0) {\n // Remediation flags without explicit --check-* flags scope the run to the\n // checks that can produce fixes: --auto-fix plans metadata/resolution\n // backfills and gated lifecycle fixes; --prune-missing needs the files\n // scan. With neither, the historical run-everything default applies.\n if (options.autoFix) {\n requested.add(\"metadata\");\n requested.add(\"resolution\");\n requested.add(\"lifecycle\");\n }\n if (options.pruneMissing) {\n requested.add(\"files\");\n }\n if (requested.size === 0) {\n requested.add(\"metadata\");\n requested.add(\"resolution\");\n requested.add(\"lifecycle\");\n requested.add(\"files\");\n requested.add(\"command_references\");\n requested.add(\"history_drift\");\n requested.add(\"format_version\");\n }\n return requested;\n }\n // Explicit check flags are respected as-is, except --prune-missing always\n // needs the files scan it acts on.\n if (options.pruneMissing) {\n requested.add(\"files\");\n }\n return requested;\n}\n\nconst DUPLICATE_ISSUE_CODE_WARNING_TOKEN = \"validate_metadata_duplicate_issue_codes\";\n\n/**\n * Project the duplicate logical issue-code findings (GH-235) into the\n * metadata-check `details` shape plus an advisory warning token. Duplicate\n * codes are advisory (warn), never an error — matching every other metadata\n * finding — so an otherwise clean tracker that simply reuses a title prefix is\n * not failed by `pm validate`. Kept outside the c8-ignored builder block so the\n * projection/remediation logic is fully covered by unit tests.\n */\nfunction summarizeDuplicateIssueCodes(\n duplicates: DuplicateIssueCode[],\n verboseDiagnostics: boolean,\n): { rows: Array<Record<string, unknown>>; truncated: boolean; warnings: string[] } {\n if (duplicates.length === 0) {\n return { rows: [], truncated: false, warnings: [] };\n }\n const limit = verboseDiagnostics ? duplicates.length : DIAGNOSTIC_LIST_SUMMARY_LIMIT;\n const shown = duplicates.slice(0, limit);\n const rows = shown.map((duplicate) => ({\n code: duplicate.code,\n count: duplicate.count,\n ids: duplicate.ids,\n titles: duplicate.titles,\n remediation_hint: `Items ${duplicate.ids.join(\", \")} share issue code \"${duplicate.code}\"; rename or merge so each logical code maps to one item.`,\n }));\n return {\n rows,\n truncated: shown.length < duplicates.length,\n warnings: [`${DUPLICATE_ISSUE_CODE_WARNING_TOKEN}:${duplicates.length}`],\n };\n}\n\n/* c8 ignore start -- metadata diagnostics/backfill planning permutations are covered by validate integration suites */\nfunction buildMetadataCheck(\n items: ItemWithBody[],\n metadataPolicy: ValidateMetadataPolicy,\n statusRegistry: RuntimeStatusRegistry,\n verboseDiagnostics: boolean,\n): {\n check: ValidateCheck;\n warnings: string[];\n closeReasonBackfillRows: CloseReasonBackfillRow[];\n estimateBackfillRows: EstimateBackfillRow[];\n} {\n const missingByField = Object.fromEntries(\n SUPPORTED_METADATA_REQUIRED_FIELDS.map((field) => [field, [] as string[]]),\n ) as Record<ValidateMetadataRequiredField, string[]>;\n const itemsById = new Map(items.map((item) => [item.id, item]));\n\n // GH-276: only the `strict` profile enforces planning fields on terminal\n // (closed/canceled) historical items; core/minimal/custom profiles treat a\n // retired item's missing estimate or acceptance criteria as resolved.\n const enforcePlanningFieldsOnTerminal = metadataPolicy.profile === \"strict\";\n\n for (const item of items) {\n for (const field of SUPPORTED_METADATA_REQUIRED_FIELDS) {\n if (!isMetadataFieldMissing(item, field, statusRegistry, enforcePlanningFieldsOnTerminal)) {\n continue;\n }\n missingByField[field].push(item.id);\n }\n }\n\n const warningTokens = [...metadataPolicy.warnings];\n for (const field of metadataPolicy.required_fields) {\n const missingItems = missingByField[field];\n if (missingItems.length === 0) {\n continue;\n }\n warningTokens.push(`${METADATA_WARNING_TOKEN_BY_FIELD[field]}:${missingItems.length}`);\n }\n\n // Duplicate logical issue-code detection (GH-235): advisory warning when two\n // or more items share a leading title issue code (e.g. `ISSUE-004`).\n const duplicateIssueCodes = findDuplicateIssueCodes(items);\n const duplicateIssueCodeSummary = summarizeDuplicateIssueCodes(duplicateIssueCodes, verboseDiagnostics);\n warningTokens.push(...duplicateIssueCodeSummary.warnings);\n\n // Zero-suppress counts to reduce agent token cost (telemetry pm-tylj).\n // Only emit counts for the ACTIVE required fields of the resolved profile so a\n // looser profile (e.g. core) never reports missing reviewer/risk/sprint/etc.\n // Defensive guards (Gemini high #1, PR #78 follow-up): a future settings\n // shape could include an unsupported field in required_fields — fall back\n // to 0 instead of throwing TypeError, and skip writing when the count-key\n // mapping is undefined.\n const counts: Record<string, number> = {};\n for (const field of metadataPolicy.required_fields) {\n const value = missingByField[field]?.length ?? 0;\n const countKey = METADATA_COUNT_KEY_BY_FIELD[field];\n if (value > 0 && countKey) {\n counts[countKey] = value;\n }\n }\n // Per-item-type grouping of missing required-field counts (pm-pmyq /\n // GH-172): counts only — never row dumps — and only for the ACTIVE required\n // fields, so the grouping mirrors `counts` at type granularity (e.g.\n // `{ Task: { close_reason: 3 } }`). Zero-suppressed at both levels.\n const missingFieldOccurrences: MissingFieldOccurrence[] = [];\n for (const field of metadataPolicy.required_fields) {\n for (const itemId of missingByField[field] ?? []) {\n const itemType = itemsById.get(itemId)?.type;\n missingFieldOccurrences.push({ item_type: typeof itemType === \"string\" && itemType.length > 0 ? itemType : \"Unknown\", field });\n }\n }\n const missingByType = buildMissingByTypeCounts(missingFieldOccurrences);\n const details: Record<string, unknown> = {\n checked_items: items.length,\n metadata_profile: metadataPolicy.profile,\n metadata_profile_source: metadataPolicy.profile_source,\n metadata_profile_fallback_to_core: metadataPolicy.fallback_to_core,\n required_fields: [...metadataPolicy.required_fields],\n supported_required_fields: [...SUPPORTED_METADATA_REQUIRED_FIELDS],\n counts,\n missing_by_type: missingByType,\n duplicate_issue_codes_count: duplicateIssueCodes.length,\n duplicate_issue_codes: duplicateIssueCodeSummary.rows,\n duplicate_issue_codes_truncated: duplicateIssueCodeSummary.truncated,\n };\n if (metadataPolicy.configured_custom_fields.length > 0) {\n details.configured_custom_required_fields = [...metadataPolicy.configured_custom_fields];\n }\n\n // Only emit per-field item_ids/truncated keys for the ACTIVE required fields of\n // the resolved profile (and only when there are missing items). This stops a\n // looser profile (e.g. core) from emitting the identical full ID array for\n // reviewer/risk/confidence/sprint/release that it does not even require\n // (pm-edge #2 — ~150 redundant lines per validate run on minimal/core).\n // Defensive guard (Gemini high #2, PR #78 follow-up): same optional-chain\n // safety as the counts loop above — never throw if a future settings shape\n // includes an unsupported field.\n for (const field of metadataPolicy.required_fields) {\n const missing = missingByField[field];\n if (!missing || missing.length === 0) {\n continue;\n }\n const idsKey = METADATA_ITEM_IDS_KEY_BY_FIELD[field];\n const truncatedKey = METADATA_TRUNCATED_KEY_BY_FIELD[field];\n if (!idsKey || !truncatedKey) {\n continue;\n }\n const summarized = summarizeList(missing, verboseDiagnostics ? missing.length : DIAGNOSTIC_LIST_SUMMARY_LIMIT);\n details[idsKey] = summarized.values;\n details[truncatedKey] = summarized.truncated;\n }\n\n // Auto-fix planning input (pm-c3sz): closed items flagged for a missing\n // close_reason whose resolution can serve as the derivable source value.\n // Only collected when close_reason is an active required field, so fixes\n // always trace back to an actual finding of this run.\n const closeReasonBackfillRows: CloseReasonBackfillRow[] = metadataPolicy.required_fields.includes(\"close_reason\")\n ? (missingByField.close_reason ?? []).map((itemId) => ({\n id: itemId,\n resolution: toNonEmptyStringOrUndefined(itemsById.get(itemId)?.resolution),\n }))\n : [];\n\n // Estimate auto-fix planning input (GH-212): items flagged for a missing\n // estimated_minutes whose type drives the config-driven default backfill.\n // Only collected when estimated_minutes is an active required field, so fixes\n // always trace back to an actual finding of this run.\n const estimateBackfillRows: EstimateBackfillRow[] = metadataPolicy.required_fields.includes(\"estimated_minutes\")\n ? (missingByField.estimated_minutes ?? []).map((itemId) => ({\n id: itemId,\n type: toNonEmptyStringOrUndefined(itemsById.get(itemId)?.type),\n }))\n : [];\n\n return {\n check: {\n name: \"metadata\",\n status: warningTokens.length === 0 ? \"ok\" : \"warn\",\n details,\n },\n warnings: warningTokens,\n closeReasonBackfillRows,\n estimateBackfillRows,\n };\n}\n/* c8 ignore stop */\n\nfunction buildResolutionCheck(\n items: ItemWithBody[],\n statusRegistry: RuntimeStatusRegistry,\n verboseDiagnostics: boolean,\n): { check: ValidateCheck; warnings: string[]; resolutionBackfillRows: ResolutionBackfillRow[] } {\n const terminalDoneStatuses = new Set<string>(statusRegistry.terminal_done_statuses);\n terminalDoneStatuses.add(statusRegistry.close_status);\n const closedItems = items.filter((item) => terminalDoneStatuses.has(normalizeStatusForRegistry(item.status, statusRegistry)));\n const missingResolutionRows: Array<{ id: string; missing_fields: ResolutionFieldKey[] }> = [];\n const resolutionBackfillRows: ResolutionBackfillRow[] = [];\n\n for (const item of closedItems) {\n const missingFields = RESOLUTION_FIELD_KEYS.filter((field) => !toNonEmptyStringOrUndefined(item[field]));\n if (missingFields.length === 0) {\n continue;\n }\n missingResolutionRows.push({\n id: item.id,\n missing_fields: missingFields,\n });\n // Auto-fix planning input (pm-c3sz): the planner backfills only the\n // `resolution` field, deriving from the item's close_reason when present.\n resolutionBackfillRows.push({\n id: item.id,\n missing_fields: missingFields,\n close_reason: toNonEmptyStringOrUndefined(item.close_reason),\n });\n }\n\n const warnings =\n missingResolutionRows.length > 0 ? [`validate_resolution_missing_fields:${missingResolutionRows.length}`] : [];\n const diagnosticLimit = verboseDiagnostics ? Number.POSITIVE_INFINITY : DIAGNOSTIC_LIST_SUMMARY_LIMIT;\n const summarizedRows = summarizeList(\n missingResolutionRows.map((row) => `${row.id}:${row.missing_fields.join(\",\")}`),\n diagnosticLimit,\n );\n const remediationHints = missingResolutionRows.map((row) => buildResolutionRemediationCommand(row));\n const summarizedHints = summarizeList(remediationHints, diagnosticLimit);\n return {\n check: {\n name: \"resolution\",\n status: warnings.length === 0 ? \"ok\" : \"warn\",\n details: {\n checked_closed_items: closedItems.length,\n missing_resolution_items: missingResolutionRows.length,\n missing_resolution_rows: summarizedRows.values,\n missing_resolution_rows_truncated: summarizedRows.truncated,\n missing_resolution_remediation_hints: summarizedHints.values,\n missing_resolution_remediation_hints_truncated: summarizedHints.truncated,\n },\n },\n warnings,\n resolutionBackfillRows,\n };\n}\n\n/* c8 ignore start -- lifecycle dependency-graph cycle analysis is covered by lifecycle integration fixtures */\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction buildLifecycleDependencyGraph(activeItems: ItemWithBody[], idPrefix = \"pm\"): Map<string, string[]> {\n const activeItemIds = new Set(activeItems.map((item) => item.id));\n const graph = new Map<string, string[]>();\n const sortedItems = [...activeItems].sort((left, right) => left.id.localeCompare(right.id));\n for (const item of sortedItems) {\n const edges = new Set<string>();\n const blockedBy = toMeaningfulString(item.blocked_by);\n if (blockedBy && activeItemIds.has(blockedBy)) {\n edges.add(blockedBy);\n }\n for (const dependency of item.dependencies ?? []) {\n const dependencyId = toMeaningfulString(dependency.id);\n if (!dependencyId || !activeItemIds.has(dependencyId)) {\n continue;\n }\n edges.add(dependencyId);\n }\n const definitionOfReady = toMeaningfulString(item.definition_of_ready);\n if (definitionOfReady) {\n for (const referencedId of extractItemIds(definitionOfReady, idPrefix)) {\n if (activeItemIds.has(referencedId)) {\n edges.add(referencedId);\n }\n }\n }\n graph.set(item.id, [...edges].sort((left, right) => left.localeCompare(right)));\n }\n return graph;\n}\n/* c8 ignore stop */\n\nfunction extractItemIds(value: string, idPrefix = \"pm\"): string[] {\n const normalizedPrefix = (idPrefix.trim().toLowerCase() || \"pm\").replace(/-+$/g, \"\");\n const pattern = new RegExp(`(?:^|[^a-z0-9-])(${escapeRegExp(normalizedPrefix)}-[a-z0-9][a-z0-9-]*)`, \"gi\");\n return [...new Set([...value.matchAll(pattern)].map((match) => match[1]!.toLowerCase()))].sort(\n (left, right) => left.localeCompare(right),\n );\n}\n\n/* c8 ignore start -- Tarjan SCC traversal branch matrix is covered by lifecycle cycle integration fixtures */\nfunction findLifecycleDependencyCycleComponents(graph: Map<string, string[]>): string[][] {\n let nextIndex = 0;\n const indexById = new Map<string, number>();\n const lowLinkById = new Map<string, number>();\n const stack: string[] = [];\n const inStack = new Set<string>();\n const components: string[][] = [];\n\n const visit = (id: string): void => {\n indexById.set(id, nextIndex);\n lowLinkById.set(id, nextIndex);\n nextIndex += 1;\n stack.push(id);\n inStack.add(id);\n\n for (const dependencyId of graph.get(id) ?? []) {\n if (!indexById.has(dependencyId)) {\n visit(dependencyId);\n lowLinkById.set(id, Math.min(lowLinkById.get(id)!, lowLinkById.get(dependencyId)!));\n } else if (inStack.has(dependencyId)) {\n lowLinkById.set(id, Math.min(lowLinkById.get(id)!, indexById.get(dependencyId)!));\n }\n }\n\n if (lowLinkById.get(id) !== indexById.get(id)) {\n return;\n }\n const component: string[] = [];\n while (stack.length > 0) {\n const member = stack.pop()!;\n inStack.delete(member);\n component.push(member);\n if (member === id) {\n break;\n }\n }\n component.sort((left, right) => left.localeCompare(right));\n components.push(component);\n };\n\n const sortedNodeIds = [...graph.keys()].sort((left, right) => left.localeCompare(right));\n for (const id of sortedNodeIds) {\n if (!indexById.has(id)) {\n visit(id);\n }\n }\n\n const cycleComponents = components.filter((component) => {\n if (component.length > 1) {\n return true;\n }\n const selfId = component[0];\n return (graph.get(selfId) ?? []).includes(selfId);\n });\n return cycleComponents.sort(\n (left, right) =>\n left[0].localeCompare(right[0]) ||\n left.length - right.length ||\n left.join(\",\").localeCompare(right.join(\",\")),\n );\n}\n/* c8 ignore stop */\n\n/* c8 ignore start -- cycle sample-path fallback branches are covered by lifecycle graph integration tests */\nfunction resolveLifecycleDependencyCycleSamplePath(component: string[], graph: Map<string, string[]>): string[] {\n const start = component[0];\n if (component.length === 1) {\n return [start, start];\n }\n const componentSet = new Set(component);\n const path: string[] = [start];\n const visited = new Set<string>([start]);\n\n const search = (current: string): boolean => {\n const neighbors = (graph.get(current) ?? []).filter((candidate) => componentSet.has(candidate));\n for (const next of neighbors) {\n if (next === start && path.length > 1) {\n path.push(start);\n return true;\n }\n if (visited.has(next)) {\n continue;\n }\n visited.add(next);\n path.push(next);\n if (search(next)) {\n return true;\n }\n path.pop();\n visited.delete(next);\n }\n return false;\n };\n\n if (search(start)) {\n return [...path];\n }\n return [...component, start];\n}\n/* c8 ignore stop */\n\nfunction detectLifecycleDependencyCycles(activeItems: ItemWithBody[], idPrefix = \"pm\"): {\n cycle_count: number;\n cycle_item_ids: string[];\n cycle_sample_paths: string[];\n} {\n const graph = buildLifecycleDependencyGraph(activeItems, idPrefix);\n const cycleComponents = findLifecycleDependencyCycleComponents(graph);\n const cycleItemIds = [...new Set(cycleComponents.flat())].sort((left, right) => left.localeCompare(right));\n const cycleSamplePaths = cycleComponents.map((component) =>\n resolveLifecycleDependencyCycleSamplePath(component, graph).join(\"->\"),\n );\n return {\n cycle_count: cycleComponents.length,\n cycle_item_ids: cycleItemIds,\n cycle_sample_paths: cycleSamplePaths,\n };\n}\n\n// Parent (composition) cycle detection (pm-8vul / GH-280). The dependency-cycle\n// path above only walks blocked_by/definition_of_ready edges across ACTIVE items;\n// it never traverses item.parent, so a parent cycle (A.parent=B, B.parent=A, or\n// any longer ring) goes undetected while it silently breaks `pm list --tree`,\n// orphan detection, and progress rollups. We reuse the generic Tarjan SCC helper\n// on a child->[parent] adjacency map. Unlike dependency cycles we scan ALL items\n// (not just active ones) because a parent cycle among closed items is still\n// structural corruption of the hierarchy.\nfunction buildLifecycleParentGraph(items: ItemWithBody[]): Map<string, string[]> {\n // PR #279 made parent matching case-insensitive (e.g. `parent: PM-FK49`\n // resolves to `id: pm-fk49`). Resolve parent references to their canonical\n // item id the same way so a casing mismatch can never silently drop a cycle\n // edge and hide a parent cycle (false negative).\n const canonicalIdByLowercase = new Map(items.map((item) => [item.id.toLowerCase(), item.id]));\n const graph = new Map<string, string[]>();\n const sortedItems = [...items].sort((left, right) => left.id.localeCompare(right.id));\n for (const item of sortedItems) {\n const edges: string[] = [];\n const parentId = toMeaningfulString(item.parent);\n const canonicalParentId = parentId ? canonicalIdByLowercase.get(parentId.toLowerCase()) : undefined;\n if (canonicalParentId) {\n edges.push(canonicalParentId);\n }\n graph.set(item.id, edges);\n }\n return graph;\n}\n\nfunction detectLifecycleParentCycles(items: ItemWithBody[]): {\n cycle_count: number;\n cycle_item_ids: string[];\n cycle_sample_paths: string[];\n} {\n const graph = buildLifecycleParentGraph(items);\n const cycleComponents = findLifecycleDependencyCycleComponents(graph);\n const cycleItemIds = [...new Set(cycleComponents.flat())].sort((left, right) => left.localeCompare(right));\n const cycleSamplePaths = cycleComponents.map((component) =>\n resolveLifecycleDependencyCycleSamplePath(component, graph).join(\"->\"),\n );\n return {\n cycle_count: cycleComponents.length,\n cycle_item_ids: cycleItemIds,\n cycle_sample_paths: cycleSamplePaths,\n };\n}\n\ninterface OrphanedPathRow {\n path: string;\n classification: OrphanedPathClassification;\n owner_candidate: {\n id: string;\n type: string;\n title: string;\n status: string;\n confidence: \"path_prefix\" | \"same_directory\" | \"shared_directory\";\n } | null;\n remediation_hint: string;\n}\n\nfunction classifyOrphanedPath(pathValue: string): OrphanedPathClassification {\n if (pathValue.startsWith(\"docs/\")) {\n return \"docs_unowned\";\n }\n if (pathValue.startsWith(\"tests/\")) {\n return \"tests_unowned\";\n }\n if (pathValue.startsWith(\"src/\")) {\n return \"source_unowned\";\n }\n if (pathValue.endsWith(\".md\")) {\n return \"docs_unowned\";\n }\n return \"unlinked_existing\";\n}\n\nfunction directoryOf(relativePath: string): string {\n const slash = relativePath.lastIndexOf(\"/\");\n return slash === -1 ? \"\" : relativePath.slice(0, slash);\n}\n\nfunction sharedDirectoryPrefixLength(left: string, right: string): number {\n const leftParts = directoryOf(left).split(\"/\").filter(Boolean);\n const rightParts = directoryOf(right).split(\"/\").filter(Boolean);\n let count = 0;\n while (count < leftParts.length && count < rightParts.length && leftParts[count] === rightParts[count]) {\n count += 1;\n }\n return count;\n}\n\nfunction findOrphanOwnerCandidate(\n pathValue: string,\n classification: OrphanedPathClassification,\n items: readonly ItemWithBody[],\n): OrphanedPathRow[\"owner_candidate\"] {\n const linkKind = classification === \"docs_unowned\" ? \"docs\" : \"files\";\n let best:\n | {\n item: ItemWithBody;\n score: number;\n confidence: \"path_prefix\" | \"same_directory\" | \"shared_directory\";\n }\n | undefined;\n for (const item of items) {\n const links = linkKind === \"docs\" ? item.docs ?? [] : item.files ?? [];\n for (const link of links) {\n if (link.scope !== \"project\") {\n continue;\n }\n const linkedPath = normalizeRelativePath(link.path);\n if (linkedPath.length === 0 || linkedPath === pathValue) {\n continue;\n }\n const linkedDir = directoryOf(linkedPath);\n const orphanDir = directoryOf(pathValue);\n const directoryPrefix = linkedPath.endsWith(\"/\") ? linkedPath : `${linkedPath}/`;\n const isDirectoryPrefix = pathValue.startsWith(directoryPrefix);\n const sameDirectory = linkedDir.length > 0 && linkedDir === orphanDir;\n const sharedPrefixLength = sharedDirectoryPrefixLength(pathValue, linkedPath);\n if (!isDirectoryPrefix && !sameDirectory && sharedPrefixLength === 0) {\n continue;\n }\n const score = isDirectoryPrefix ? linkedPath.length + 1000 : sameDirectory ? sharedPrefixLength + 500 : sharedPrefixLength;\n if (best === undefined || score > best.score || (score === best.score && item.id.localeCompare(best.item.id) < 0)) {\n best = {\n item,\n score,\n confidence: isDirectoryPrefix ? \"path_prefix\" : sameDirectory ? \"same_directory\" : \"shared_directory\",\n };\n }\n }\n }\n if (!best) {\n return null;\n }\n return {\n id: best.item.id,\n type: best.item.type,\n title: best.item.title,\n status: best.item.status,\n confidence: best.confidence,\n };\n}\n\nfunction buildOrphanedPathRows(orphanedFiles: readonly string[], items: readonly ItemWithBody[]): OrphanedPathRow[] {\n return orphanedFiles.map((pathValue) => {\n const classification = classifyOrphanedPath(pathValue);\n const linkCommand = classification === \"docs_unowned\" ? \"docs\" : \"files\";\n const ownerCandidate = findOrphanOwnerCandidate(pathValue, classification, items);\n const target = ownerCandidate?.id ?? \"<id>\";\n return {\n path: pathValue,\n classification,\n owner_candidate: ownerCandidate,\n remediation_hint: `pm ${linkCommand} ${target} --add path=${pathValue},scope=project,note=\"<why this artifact belongs to the item>\"`,\n };\n });\n}\n\nfunction summarizeOrphanedPathRows(rows: readonly OrphanedPathRow[]): string[] {\n return rows.map(\n (row) =>\n `${row.path}:${row.classification} owner_candidate=${row.owner_candidate?.id ?? \"unowned\"} hint=${JSON.stringify(row.remediation_hint)}`,\n );\n}\n\n/* c8 ignore start -- lifecycle stale/terminal/dependency diagnostics matrix is covered by end-to-end validate integration runs */\nfunction buildLifecycleCheck(\n items: ItemWithBody[],\n includeStaleBlockers: boolean,\n dependencyCycleSeverity: ValidateDependencyCycleSeverity,\n parentCycleSeverity: ValidateDependencyCycleSeverity,\n statusRegistry: RuntimeStatusRegistry,\n lifecyclePatternPolicy: LifecyclePatternPolicy,\n verboseDiagnostics: boolean,\n idPrefix = \"pm\",\n): { check: ValidateCheck; warnings: string[]; terminalParentFixRows: TerminalParentFixRow[] } {\n const itemsById = new Map(items.map((item) => [item.id, item]));\n const blockedStatuses =\n statusRegistry.blocked_statuses.size > 0 ? statusRegistry.blocked_statuses : new Set<string>([\"blocked\"]);\n const activeItems = items.filter((item) => !isTerminalStatus(item.status, statusRegistry));\n const closureLikeRows: Array<{ id: string; fields: string[] }> = [];\n const terminalParentRows: Array<{ id: string; parent_id: string; parent_status: string }> = [];\n const terminalParentFixRows: TerminalParentFixRow[] = [];\n const staleBlockerRows: Array<{ id: string; status: string; reasons: string[] }> = [];\n\n for (const item of activeItems) {\n const closureLikeFields = Object.entries(lifecyclePatternPolicy.closure_like_metadata_field_patterns)\n .filter(([field, patterns]) => {\n const value = toMeaningfulString(item[field as keyof ItemWithBody]);\n if (!value) {\n return false;\n }\n const normalized = value.toLowerCase();\n return patterns.some((pattern) => normalized.includes(pattern));\n })\n .map(([field]) => field)\n .sort((left, right) => left.localeCompare(right));\n\n if (closureLikeFields.length > 0) {\n closureLikeRows.push({\n id: item.id,\n fields: closureLikeFields,\n });\n }\n\n const parentId = toMeaningfulString(item.parent);\n if (parentId) {\n const parent = itemsById.get(parentId);\n if (parent && isTerminalStatus(parent.status, statusRegistry)) {\n terminalParentRows.push({\n id: item.id,\n parent_id: parent.id,\n parent_status: parent.status,\n });\n // Gated lifecycle auto-fix input (pm-8jss): when the terminal parent\n // has its own ACTIVE parent, the child can be reparented one level up;\n // otherwise the suggested fix clears the parent link.\n const grandparentId = toMeaningfulString(parent.parent);\n const grandparent = grandparentId ? itemsById.get(grandparentId) : undefined;\n terminalParentFixRows.push({\n id: item.id,\n parent_id: parent.id,\n grandparent_id: grandparent?.id,\n grandparent_active: grandparent !== undefined && !isTerminalStatus(grandparent.status, statusRegistry),\n });\n }\n }\n\n if (includeStaleBlockers) {\n const blockedBy = toMeaningfulString(item.blocked_by);\n const blockedReason = toMeaningfulString(item.blocked_reason);\n const blockedReasonNormalized = blockedReason?.toLowerCase();\n const reasons: string[] = [];\n const normalizedStatus = normalizeStatusForRegistry(item.status, statusRegistry);\n\n if (!blockedStatuses.has(normalizedStatus)) {\n if (blockedBy) {\n reasons.push(\"non_blocked_status_has_blocked_by\");\n }\n if (blockedReason) {\n reasons.push(\"non_blocked_status_has_blocked_reason\");\n }\n } else {\n if (!blockedBy && !blockedReason) {\n reasons.push(\"blocked_status_missing_blocker_context\");\n }\n if (blockedReasonNormalized?.includes(\"no active blocker\")) {\n reasons.push(\"blocked_status_reason_reports_no_active_blocker\");\n }\n if (\n blockedReasonNormalized &&\n lifecyclePatternPolicy.stale_blocker_reason_patterns.some((pattern) => blockedReasonNormalized.includes(pattern))\n ) {\n reasons.push(\"blocked_status_reason_matches_stale_pattern\");\n }\n }\n\n if (reasons.length > 0) {\n staleBlockerRows.push({\n id: item.id,\n status: item.status,\n reasons: [...new Set(reasons)].sort((left, right) => left.localeCompare(right)),\n });\n }\n }\n }\n\n closureLikeRows.sort((left, right) => left.id.localeCompare(right.id));\n terminalParentRows.sort(\n (left, right) => left.id.localeCompare(right.id) || left.parent_id.localeCompare(right.parent_id),\n );\n terminalParentFixRows.sort(\n (left, right) => left.id.localeCompare(right.id) || left.parent_id.localeCompare(right.parent_id),\n );\n staleBlockerRows.sort((left, right) => left.id.localeCompare(right.id));\n const dependencyCycleDiagnostics = detectLifecycleDependencyCycles(activeItems, idPrefix);\n const parentCycleDiagnostics = detectLifecycleParentCycles(items);\n\n const warnings: string[] = [];\n if (closureLikeRows.length > 0) {\n warnings.push(`validate_lifecycle_active_closure_like_metadata:${closureLikeRows.length}`);\n }\n if (terminalParentRows.length > 0) {\n warnings.push(`validate_lifecycle_active_terminal_parent:${terminalParentRows.length}`);\n }\n if (includeStaleBlockers && staleBlockerRows.length > 0) {\n warnings.push(`validate_lifecycle_stale_blockers:${staleBlockerRows.length}`);\n }\n if (dependencyCycleDiagnostics.cycle_count > 0 && dependencyCycleSeverity !== \"off\") {\n warnings.push(\n `${\n dependencyCycleSeverity === \"error\"\n ? \"validate_lifecycle_dependency_cycles_error\"\n : \"validate_lifecycle_dependency_cycles\"\n }:${dependencyCycleDiagnostics.cycle_count}`,\n );\n }\n if (parentCycleDiagnostics.cycle_count > 0 && parentCycleSeverity !== \"off\") {\n warnings.push(\n `${\n parentCycleSeverity === \"error\"\n ? \"validate_hierarchy_parent_cycle_error\"\n : \"validate_hierarchy_parent_cycle\"\n }:${parentCycleDiagnostics.cycle_count}`,\n );\n }\n\n const diagnosticLimit = verboseDiagnostics ? Number.POSITIVE_INFINITY : DIAGNOSTIC_LIST_SUMMARY_LIMIT;\n const summarizedClosureLikeRows = summarizeList(\n closureLikeRows.map((row) => `${row.id}:${row.fields.join(\",\")}`),\n diagnosticLimit,\n );\n const summarizedTerminalParentRows = summarizeList(\n terminalParentRows.map((row) => `${row.id}:${row.parent_id}:${row.parent_status}`),\n diagnosticLimit,\n );\n const summarizedStaleBlockerRows = summarizeList(\n staleBlockerRows.map((row) => `${row.id}:${row.status}:${row.reasons.join(\",\")}`),\n diagnosticLimit,\n );\n const summarizedDependencyCycleItemIds = summarizeList(dependencyCycleDiagnostics.cycle_item_ids, diagnosticLimit);\n const summarizedDependencyCycleSamplePaths = summarizeList(dependencyCycleDiagnostics.cycle_sample_paths, diagnosticLimit);\n const summarizedParentCycleItemIds = summarizeList(parentCycleDiagnostics.cycle_item_ids, diagnosticLimit);\n const summarizedParentCycleSamplePaths = summarizeList(parentCycleDiagnostics.cycle_sample_paths, diagnosticLimit);\n\n const hasErrorSeverityCycle =\n (dependencyCycleDiagnostics.cycle_count > 0 && dependencyCycleSeverity === \"error\") ||\n (parentCycleDiagnostics.cycle_count > 0 && parentCycleSeverity === \"error\");\n\n return {\n check: {\n name: \"lifecycle\",\n status: hasErrorSeverityCycle\n ? \"error\"\n : warnings.length === 0\n ? \"ok\"\n : \"warn\",\n details: {\n checked_active_items: activeItems.length,\n active_closure_like_metadata_items: closureLikeRows.length,\n active_closure_like_metadata_rows: summarizedClosureLikeRows.values,\n active_closure_like_metadata_rows_truncated: summarizedClosureLikeRows.truncated,\n active_terminal_parent_items: terminalParentRows.length,\n active_terminal_parent_rows: summarizedTerminalParentRows.values,\n active_terminal_parent_rows_truncated: summarizedTerminalParentRows.truncated,\n stale_blocker_checks_enabled: includeStaleBlockers,\n stale_blocker_items: staleBlockerRows.length,\n stale_blocker_rows: summarizedStaleBlockerRows.values,\n stale_blocker_rows_truncated: summarizedStaleBlockerRows.truncated,\n dependency_cycle_severity_policy: dependencyCycleSeverity,\n dependency_cycle_count: dependencyCycleDiagnostics.cycle_count,\n dependency_cycle_item_count: dependencyCycleDiagnostics.cycle_item_ids.length,\n dependency_cycle_item_ids: summarizedDependencyCycleItemIds.values,\n dependency_cycle_item_ids_truncated: summarizedDependencyCycleItemIds.truncated,\n dependency_cycle_sample_paths: summarizedDependencyCycleSamplePaths.values,\n dependency_cycle_sample_paths_truncated: summarizedDependencyCycleSamplePaths.truncated,\n parent_cycle_severity_policy: parentCycleSeverity,\n parent_cycle_count: parentCycleDiagnostics.cycle_count,\n parent_cycle_item_count: parentCycleDiagnostics.cycle_item_ids.length,\n parent_cycle_item_ids: summarizedParentCycleItemIds.values,\n parent_cycle_item_ids_truncated: summarizedParentCycleItemIds.truncated,\n parent_cycle_sample_paths: summarizedParentCycleSamplePaths.values,\n parent_cycle_sample_paths_truncated: summarizedParentCycleSamplePaths.truncated,\n stale_blocker_reason_patterns: [...lifecyclePatternPolicy.stale_blocker_reason_patterns],\n stale_blocker_reason_pattern_source: lifecyclePatternPolicy.stale_blocker_reason_pattern_source,\n closure_like_blocked_reason_patterns: [\n ...lifecyclePatternPolicy.closure_like_metadata_field_patterns.blocked_reason,\n ],\n closure_like_blocked_reason_pattern_source:\n lifecyclePatternPolicy.closure_like_metadata_field_pattern_sources.blocked_reason,\n closure_like_resolution_patterns: [...lifecyclePatternPolicy.closure_like_metadata_field_patterns.resolution],\n closure_like_resolution_pattern_source:\n lifecyclePatternPolicy.closure_like_metadata_field_pattern_sources.resolution,\n closure_like_actual_result_patterns: [...lifecyclePatternPolicy.closure_like_metadata_field_patterns.actual_result],\n closure_like_actual_result_pattern_source:\n lifecyclePatternPolicy.closure_like_metadata_field_pattern_sources.actual_result,\n },\n },\n warnings,\n terminalParentFixRows,\n };\n}\n/* c8 ignore stop */\n\n/* c8 ignore start -- files-check candidate filtering/classification permutations are covered by file-audit integration suites */\nasync function buildFilesCheck(\n items: ItemWithBody[],\n workspaceRoot: string,\n pmRoot: string,\n fileScanMode: ValidateFileScanMode,\n includePmInternals: boolean,\n verboseFileLists: boolean,\n): Promise<{ check: ValidateCheck; warnings: string[]; staleLinkPruneRows: StaleLinkPruneRow[] }> {\n const linkedProjectPaths = new Set<string>();\n const remoteLinkedPaths = new Set<string>();\n const missingLinkedPaths: string[] = [];\n const staleLinkRows: Array<{ item_id: string; path: string; link_kind: \"files\" | \"docs\" }> = [];\n const itemsById = new Map(items.map((item) => [item.id, item]));\n\n for (const item of items) {\n const linkedArtifactGroups = [\n { link_kind: \"files\" as const, artifacts: item.files ?? [] },\n { link_kind: \"docs\" as const, artifacts: item.docs ?? [] },\n ];\n for (const group of linkedArtifactGroups) {\n for (const artifact of group.artifacts) {\n if (artifact.scope !== \"project\") {\n continue;\n }\n // Remote references (https:// PR/issue/design-doc URLs recorded via\n // `pm docs --add`) are not local files: they must never be stat'd,\n // classified as moved/deleted, counted missing, or pruned by\n // --prune-missing (which would silently destroy recorded context).\n if (isRemoteLinkedArtifactReference(artifact.path)) {\n remoteLinkedPaths.add(artifact.path.trim());\n continue;\n }\n const normalizedPath = normalizeRelativePath(artifact.path);\n if (normalizedPath.length === 0) {\n continue;\n }\n linkedProjectPaths.add(normalizedPath);\n const absolutePath = path.isAbsolute(artifact.path) ? artifact.path : path.resolve(workspaceRoot, artifact.path);\n let missing = false;\n try {\n const stats = await fs.stat(absolutePath);\n if (!stats.isFile() && !stats.isDirectory()) {\n missing = true;\n }\n } catch {\n missing = true;\n }\n if (missing) {\n missingLinkedPaths.push(normalizedPath);\n staleLinkRows.push({ item_id: item.id, path: normalizedPath, link_kind: group.link_kind });\n }\n }\n }\n }\n\n const uniqueMissingLinkedPaths = [...new Set(missingLinkedPaths)].sort((left, right) => left.localeCompare(right));\n const fileCandidates = await collectProjectFileCandidates(workspaceRoot, fileScanMode);\n const strictTrackedAllMode = fileScanMode === \"tracked-all-strict\";\n const strictModeForcesPmInternals = strictTrackedAllMode && !includePmInternals;\n const includePmInternalsEffective = includePmInternals || strictTrackedAllMode;\n const pmInternalCandidatePrefixes = includePmInternalsEffective ? [] : resolvePmInternalCandidatePrefixes(pmRoot, workspaceRoot);\n const excludedPmInternalPaths =\n pmInternalCandidatePrefixes.length === 0\n ? []\n : fileCandidates.candidateFiles.filter((candidate) => hasPathPrefix(candidate, pmInternalCandidatePrefixes));\n const candidateFiles =\n pmInternalCandidatePrefixes.length === 0\n ? fileCandidates.candidateFiles\n : fileCandidates.candidateFiles.filter((candidate) => !hasPathPrefix(candidate, pmInternalCandidatePrefixes));\n const excludedPmInternalCount = excludedPmInternalPaths.length;\n const excludedByReason: Record<string, unknown> = {};\n if (excludedPmInternalCount > 0) {\n const summarizedPmInternalPaths = summarizeFileList(excludedPmInternalPaths, verboseFileLists);\n excludedByReason.pm_internals = {\n count: excludedPmInternalCount,\n paths: summarizedPmInternalPaths.values,\n paths_truncated: summarizedPmInternalPaths.truncated,\n paths_total: summarizedPmInternalPaths.total,\n };\n }\n const orphanedFiles = candidateFiles.filter((candidate) => !linkedProjectPaths.has(candidate));\n const orphanedPathRows = buildOrphanedPathRows(orphanedFiles, items);\n // Stale-path classification (pm-0v2m / GH-184): a missing linked path whose\n // basename still exists in the candidate scan is reported as `moved` (with\n // relink candidates); otherwise it is `deleted` and safe to prune.\n const classifiedStalePaths = classifyStaleLinkedPaths(uniqueMissingLinkedPaths, candidateFiles);\n const classificationByPath = new Map(classifiedStalePaths.map((entry) => [entry.path, entry.classification]));\n const movedStalePathCount = classifiedStalePaths.filter((entry) => entry.classification === \"moved\").length;\n const staleLinkPruneRows: StaleLinkPruneRow[] = staleLinkRows\n .map((row) => ({\n ...row,\n classification: classificationByPath.get(row.path) ?? (\"deleted\" as const),\n }))\n .sort(\n (left, right) =>\n left.item_id.localeCompare(right.item_id) ||\n left.path.localeCompare(right.path) ||\n left.link_kind.localeCompare(right.link_kind),\n );\n const warnings: string[] = [];\n if (strictModeForcesPmInternals) {\n warnings.push(\"validate_files_tracked_all_strict_forces_pm_internals\");\n }\n if (uniqueMissingLinkedPaths.length > 0) {\n warnings.push(`validate_files_missing_linked_paths:${uniqueMissingLinkedPaths.length}`);\n }\n if (orphanedFiles.length > 0) {\n warnings.push(`validate_files_orphaned_paths:${orphanedFiles.length}`);\n }\n const uniqueRemoteLinkedPaths = [...remoteLinkedPaths].sort((left, right) => left.localeCompare(right));\n const summarizedRemote = summarizeFileList(uniqueRemoteLinkedPaths, verboseFileLists);\n const summarizedMissing = summarizeFileList(uniqueMissingLinkedPaths, verboseFileLists);\n const summarizedOrphaned = summarizeFileList(orphanedFiles, verboseFileLists);\n const summarizedOrphanedClassifications = summarizeFileList(\n orphanedPathRows.map((row) => `${row.path}:${row.classification}:owner_candidate=${row.owner_candidate?.id ?? \"unowned\"}`),\n verboseFileLists,\n );\n const orphanedPathRowDetail = verboseFileLists\n ? orphanedPathRows\n : summarizeFileList(summarizeOrphanedPathRows(orphanedPathRows), false).values;\n const summarizedClassifications = summarizeFileList(\n summarizeStaleLinkedPathClassifications(classifiedStalePaths),\n verboseFileLists,\n );\n // Owner attribution for missing linked paths (GH-210): per-path rows naming\n // the owning item(s) so cleanup is evidence-based instead of requiring a\n // reverse lookup. Full structured objects under --verbose-file-lists; compact\n // `path:classification owner=… field=…` one-liners (capped) otherwise — same\n // full/summary split as the other file-check lists (file_list_detail_mode).\n const missingLinkedPathRows: StaleLinkOwnerInput[] = staleLinkPruneRows.map((row) => ({\n item_id: row.item_id,\n path: row.path,\n link_kind: row.link_kind,\n classification: row.classification,\n }));\n const ownerRows = buildMissingLinkedPathRows(missingLinkedPathRows, (id) => {\n const owner = itemsById.get(id);\n return owner ? { type: owner.type, title: owner.title, status: owner.status } : undefined;\n });\n // Default to token-efficient compact one-liners; expose the full structured\n // rows (the GH-210 JSON shape) under --verbose-file-lists.\n const ownerRowDetail = verboseFileLists\n ? ownerRows\n : summarizeFileList(summarizeMissingLinkedPathRows(ownerRows), false).values;\n\n return {\n check: {\n name: \"files\",\n status: warnings.length === 0 ? \"ok\" : \"warn\",\n details: {\n workspace_root: workspaceRoot,\n scan_mode_requested: fileCandidates.requestedMode,\n scan_mode_applied: fileCandidates.appliedMode,\n strict_tracked_all_mode: strictTrackedAllMode,\n strict_mode_forces_pm_internals: strictModeForcesPmInternals,\n strict_mode_forces_pm_internals_notice: strictModeForcesPmInternals\n ? \"tracked-all-strict force-enables PM internals; pass --include-pm-internals to make inclusion explicit.\"\n : null,\n file_list_detail_mode: verboseFileLists ? \"full\" : \"summary\",\n file_list_summary_limit: FILE_LIST_SUMMARY_LIMIT,\n candidate_scan_source: fileCandidates.source,\n include_pm_internals: includePmInternalsEffective,\n include_pm_internals_requested: includePmInternals,\n pm_internal_candidate_prefixes: pmInternalCandidatePrefixes,\n pm_internal_excluded_count: excludedPmInternalCount,\n excluded_total: excludedPmInternalCount,\n excluded_by_reason: excludedByReason,\n linked_project_paths: linkedProjectPaths.size,\n remote_linked_paths_count: uniqueRemoteLinkedPaths.length,\n remote_linked_paths_total: summarizedRemote.total,\n remote_linked_paths: summarizedRemote.values,\n remote_linked_paths_truncated: summarizedRemote.truncated,\n candidate_total_raw: fileCandidates.candidateTotal,\n candidate_scanned_raw: fileCandidates.candidateScanned,\n candidate_total: candidateFiles.length,\n candidate_scanned: candidateFiles.length,\n scanned_candidate_files: candidateFiles.length,\n missing_linked_paths_count: uniqueMissingLinkedPaths.length,\n missing_linked_paths_total: summarizedMissing.total,\n missing_linked_paths: summarizedMissing.values,\n missing_linked_paths_truncated: summarizedMissing.truncated,\n missing_linked_paths_moved_count: movedStalePathCount,\n missing_linked_paths_deleted_count: uniqueMissingLinkedPaths.length - movedStalePathCount,\n missing_linked_path_classifications: summarizedClassifications.values,\n missing_linked_path_classifications_truncated: summarizedClassifications.truncated,\n missing_linked_path_rows_count: ownerRows.length,\n missing_linked_path_rows: ownerRowDetail,\n orphaned_paths_count: orphanedFiles.length,\n orphaned_paths_total: summarizedOrphaned.total,\n orphaned_paths: summarizedOrphaned.values,\n orphaned_paths_truncated: summarizedOrphaned.truncated,\n orphaned_path_classifications: summarizedOrphanedClassifications.values,\n orphaned_path_classifications_truncated: summarizedOrphanedClassifications.truncated,\n orphaned_path_rows_count: orphanedPathRows.length,\n orphaned_path_rows: orphanedPathRowDetail,\n },\n },\n warnings,\n staleLinkPruneRows,\n };\n}\n/* c8 ignore stop */\n\n/* c8 ignore start -- history-drift warning/count projection permutations are covered by drift integration tests */\nasync function buildHistoryDriftCheck(\n pmRoot: string,\n items: ItemWithBody[],\n verboseDiagnostics: boolean,\n): Promise<{ check: ValidateCheck; warnings: string[] }> {\n const { missingStreams, unreadableStreams, hashMismatches, chainMismatches, driftedItems } = await scanHistoryDrift(\n pmRoot,\n items,\n );\n const warnings: string[] = [];\n if (missingStreams.length > 0) {\n warnings.push(`validate_history_drift_missing_streams:${missingStreams.length}`);\n }\n if (unreadableStreams.length > 0) {\n warnings.push(`validate_history_drift_unreadable_streams:${unreadableStreams.length}`);\n }\n if (hashMismatches.length > 0) {\n warnings.push(`validate_history_drift_hash_mismatches:${hashMismatches.length}`);\n }\n if (chainMismatches.length > 0) {\n warnings.push(`validate_history_drift_chain_mismatches:${chainMismatches.length}`);\n }\n const diagnosticLimit = verboseDiagnostics ? Number.POSITIVE_INFINITY : DIAGNOSTIC_LIST_SUMMARY_LIMIT;\n const summarizedDrifted = summarizeList(driftedItems, diagnosticLimit);\n return {\n check: {\n name: \"history_drift\",\n status: warnings.length === 0 ? \"ok\" : \"warn\",\n details: {\n checked_items: items.length,\n drifted_items_count: driftedItems.length,\n drifted_items: summarizedDrifted.values,\n drifted_items_truncated: summarizedDrifted.truncated,\n counts: {\n missing_streams: missingStreams.length,\n unreadable_streams: unreadableStreams.length,\n hash_mismatches: hashMismatches.length,\n chain_mismatches: chainMismatches.length,\n },\n },\n },\n warnings,\n };\n}\n/* c8 ignore stop */\n\n/* c8 ignore start -- command preview truncation formatting is covered by command-reference integration fixtures */\nfunction summarizeCommandReferenceRow(ownerId: string, referencedId: string, command: string): string {\n const normalizedCommand = command.trim().replaceAll(/\\s+/g, \" \");\n const commandPreview = normalizedCommand.length > 120 ? `${normalizedCommand.slice(0, 117)}...` : normalizedCommand;\n return `${ownerId}:${referencedId}:${commandPreview}`;\n}\n/* c8 ignore stop */\n\n/* c8 ignore start -- command-reference discovery/stale-id permutations are covered by linked-test integration suites */\nfunction buildCommandReferencesCheck(\n items: ItemWithBody[],\n idPrefix: string,\n verboseDiagnostics: boolean,\n): { check: ValidateCheck; warnings: string[] } {\n const knownIds = new Set(items.map((item) => item.id.toLowerCase()));\n let linkedCommandsScanned = 0;\n let referencedPmIdCount = 0;\n const referencedPmIds = new Set<string>();\n const staleReferenceRows: string[] = [];\n\n for (const item of items) {\n for (const linkedTest of item.tests ?? []) {\n if (typeof linkedTest.command !== \"string\" || linkedTest.command.trim().length === 0) {\n continue;\n }\n linkedCommandsScanned += 1;\n const referencedIds = extractReferencedPmItemIdsFromCommand(linkedTest.command, idPrefix);\n if (referencedIds.length === 0) {\n continue;\n }\n referencedPmIdCount += referencedIds.length;\n for (const referencedId of referencedIds) {\n referencedPmIds.add(referencedId);\n if (!knownIds.has(referencedId.toLowerCase())) {\n staleReferenceRows.push(summarizeCommandReferenceRow(item.id, referencedId, linkedTest.command));\n }\n }\n }\n }\n\n const uniqueStaleReferenceRows = [...new Set(staleReferenceRows)].sort((left, right) => left.localeCompare(right));\n const stalePmIds = [...new Set(uniqueStaleReferenceRows.map((row) => row.split(\":\")[1] ?? \"\"))]\n .filter((value) => value.length > 0)\n .sort((left, right) => left.localeCompare(right));\n const warnings =\n uniqueStaleReferenceRows.length > 0 ? [`validate_command_references_stale_pm_ids:${uniqueStaleReferenceRows.length}`] : [];\n const diagnosticLimit = verboseDiagnostics ? Number.POSITIVE_INFINITY : DIAGNOSTIC_LIST_SUMMARY_LIMIT;\n const summarizedRows = summarizeList(uniqueStaleReferenceRows, diagnosticLimit);\n const summarizedStalePmIds = summarizeList(stalePmIds, diagnosticLimit);\n const summarizedReferencedPmIds = summarizeList(\n [...referencedPmIds].sort((left, right) => left.localeCompare(right)),\n diagnosticLimit,\n );\n\n return {\n check: {\n name: \"command_references\",\n status: warnings.length === 0 ? \"ok\" : \"warn\",\n details: {\n checked_items: items.length,\n linked_commands_scanned: linkedCommandsScanned,\n referenced_pm_ids_count: referencedPmIdCount,\n unique_referenced_pm_ids_count: referencedPmIds.size,\n unique_referenced_pm_ids: summarizedReferencedPmIds.values,\n unique_referenced_pm_ids_truncated: summarizedReferencedPmIds.truncated,\n stale_pm_id_references_count: uniqueStaleReferenceRows.length,\n stale_pm_ids_count: stalePmIds.length,\n stale_pm_ids: summarizedStalePmIds.values,\n stale_pm_ids_truncated: summarizedStalePmIds.truncated,\n stale_pm_id_reference_rows: summarizedRows.values,\n stale_pm_id_reference_rows_truncated: summarizedRows.truncated,\n },\n },\n warnings,\n };\n}\n/* c8 ignore stop */\n\n/* c8 ignore start -- format-version diagnostics projection is covered by validate format-version integration fixtures */\nfunction buildFormatVersionCheck(\n items: ItemWithBody[],\n verboseDiagnostics: boolean,\n): { check: ValidateCheck; warnings: string[] } {\n const scan = scanItemFormatVersions(\n items.map((item) => ({ ref: item.id, version: effectiveItemFormatVersion(item) })),\n );\n const warnings: string[] = [];\n if (scan.outdated.length > 0) {\n warnings.push(`validate_format_version_outdated_items:${scan.outdated.length}`);\n }\n if (scan.ahead.length > 0) {\n warnings.push(`validate_format_version_ahead_items:${scan.ahead.length}`);\n }\n const diagnosticLimit = verboseDiagnostics ? Number.POSITIVE_INFINITY : DIAGNOSTIC_LIST_SUMMARY_LIMIT;\n const summarizedOutdated = summarizeList(scan.outdated, diagnosticLimit);\n const summarizedAhead = summarizeList(scan.ahead, diagnosticLimit);\n // `ahead` items were written by a newer pm than this runtime: validation\n // cannot vouch for fields it does not understand, so it is an error (upgrade\n // pm). `outdated` items are a non-fatal warning (a migration would rewrite\n // them). At the current baseline version neither list is populated.\n const status: ValidateStatus = scan.ahead.length > 0 ? \"error\" : scan.outdated.length > 0 ? \"warn\" : \"ok\";\n return {\n check: {\n name: \"format_version\",\n status,\n details: {\n checked_items: items.length,\n current_format_version: CURRENT_ITEM_FORMAT_VERSION,\n outdated_items_count: scan.outdated.length,\n outdated_items: summarizedOutdated.values,\n outdated_items_truncated: summarizedOutdated.truncated,\n ahead_items_count: scan.ahead.length,\n ahead_items: summarizedAhead.values,\n ahead_items_truncated: summarizedAhead.truncated,\n },\n },\n warnings,\n };\n}\n/* c8 ignore stop */\n\nconst VALIDATE_AUTO_FIX_MESSAGE = \"pm validate auto-fix\";\n\n/**\n * Apply one planned fix through the SAME audited command paths an operator\n * would use by hand (`pm update` / `pm files --remove` / `pm docs --remove`),\n * so every applied fix carries normal history, locking, and hook behavior.\n * Command modules are imported lazily: plain validate runs stay read-only and\n * never pay the mutation-stack import cost.\n */\n/* c8 ignore start -- lazy mutation-command dispatch branches are covered by validate auto-fix integration tests */\nasync function applyValidateFix(fix: ValidateFixRecord, global: GlobalOptions): Promise<void> {\n switch (fix.kind) {\n case \"set_resolution\":\n case \"set_close_reason\":\n case \"set_estimate\":\n case \"reparent\":\n case \"unset_parent\": {\n const { runUpdate } = await import(\"./update.js\");\n const updateOptions: Record<string, unknown> = { message: VALIDATE_AUTO_FIX_MESSAGE };\n if (fix.kind === \"set_resolution\") {\n updateOptions.resolution = fix.value;\n } else if (fix.kind === \"set_close_reason\") {\n updateOptions.closeReason = fix.value;\n } else if (fix.kind === \"set_estimate\") {\n updateOptions.estimatedMinutes = fix.value;\n } else if (fix.kind === \"reparent\") {\n updateOptions.parent = fix.parent_id;\n } else {\n updateOptions.unset = [\"parent\"];\n }\n await runUpdate(fix.item_id, updateOptions, global);\n return;\n }\n case \"prune_file_link\": {\n throw new Error(`Unsupported non-batched fix kind: ${fix.kind}`);\n }\n case \"prune_doc_link\": {\n throw new Error(`Unsupported non-batched fix kind: ${fix.kind}`);\n }\n }\n}\n/* c8 ignore stop */\n\nfunction pruneBatchKey(fix: ValidateFixRecord): string | null {\n if (fix.kind !== \"prune_file_link\" && fix.kind !== \"prune_doc_link\") {\n return null;\n }\n return `${fix.kind}:${fix.item_id}`;\n}\n\n/* c8 ignore start -- batched prune/apply failure fan-out permutations are covered by auto-fix integration suites */\nasync function applyValidateFixes(applicable: ValidateFixRecord[], global: GlobalOptions): Promise<{\n applied: ValidateFixRecord[];\n failed: Array<{ fix: ValidateFixRecord; error: unknown }>;\n}> {\n const applied: ValidateFixRecord[] = [];\n const failed: Array<{ fix: ValidateFixRecord; error: unknown }> = [];\n const pruneBatches = new Map<string, ValidateFixRecord[]>();\n\n for (const fix of applicable) {\n const batchKey = pruneBatchKey(fix);\n if (batchKey === null) {\n try {\n await applyValidateFix(fix, global);\n applied.push(fix);\n } catch (error) {\n failed.push({ fix, error });\n }\n continue;\n }\n const existing = pruneBatches.get(batchKey);\n if (existing) {\n existing.push(fix);\n } else {\n pruneBatches.set(batchKey, [fix]);\n }\n }\n\n for (const batch of pruneBatches.values()) {\n const first = batch[0];\n /* c8 ignore next 2 -- pruneBatches values are only created with at least one fix */\n if (!first) {\n continue;\n }\n const remove = batch\n .map((fix) => fix.path)\n .filter((value): value is string => typeof value === \"string\" && value.length > 0);\n try {\n if (first.kind === \"prune_file_link\") {\n const { runFiles } = await import(\"./files.js\");\n await runFiles(first.item_id, { remove, message: VALIDATE_AUTO_FIX_MESSAGE }, global);\n } else {\n const { runDocs } = await import(\"./docs.js\");\n await runDocs(first.item_id, { remove, message: VALIDATE_AUTO_FIX_MESSAGE }, global);\n }\n applied.push(...batch);\n } catch (error) {\n failed.push(...batch.map((fix) => ({ fix, error })));\n }\n }\n\n return { applied, failed };\n}\n/* c8 ignore stop */\n\nexport const _testOnlyValidateCommand = {\n applyValidateFix,\n applyValidateFixes,\n attachValidateFixHints,\n buildCommandReferencesCheck,\n buildFilesCheck,\n buildLifecycleCheck,\n buildLifecycleDependencyGraph,\n buildLifecycleParentGraph,\n buildOrphanedPathRows,\n classifyOrphanedPath,\n collectDefaultProjectFileCandidates,\n collectTrackedGitFileCandidates,\n detectLifecycleDependencyCycles,\n detectLifecycleParentCycles,\n escapeRegExp,\n extractItemIds,\n findLifecycleDependencyCycleComponents,\n isMetadataFieldMissing,\n listFilesRecursive,\n resolveDependencyCycleSeverity,\n resolveParentCycleSeverity,\n resolveFileScanMode,\n resolveLifecycleDependencyCycleSamplePath,\n resolveRequestedChecks,\n resolveValidateMetadataProfile,\n resolveWorkspaceRoot,\n sharedDirectoryPrefixLength,\n summarizeOrphanedPathRows,\n summarizeDuplicateIssueCodes,\n toMeaningfulString,\n};\n\n/* c8 ignore start -- validate orchestration + fix-application matrices are covered by end-to-end command integration runs */\n/**\n * Implements run validate for the public runtime surface of this module.\n */\nexport async function runValidate(options: ValidateCommandOptions, global: GlobalOptions): Promise<ValidateResult> {\n const fixesRequested = options.autoFix === true || options.pruneMissing === true;\n if (options.dryRun === true && !fixesRequested) {\n throw new PmCliError(\n \"--dry-run requires --auto-fix or --prune-missing (there is nothing to preview otherwise).\",\n EXIT_CODE.USAGE,\n );\n }\n if (options.fixScope !== undefined && options.fixScope.length > 0 && options.autoFix !== true) {\n throw new PmCliError(\"--fix-scope requires --auto-fix.\", EXIT_CODE.USAGE);\n }\n // Resolved up-front so unknown --fix-scope values fail fast before any scan.\n const grantedFixScopes = resolveGrantedFixScopes(options.fixScope);\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);\n }\n\n const settings = await readSettings(pmRoot);\n const statusRegistry = resolveRuntimeStatusRegistry(settings.schema);\n const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());\n const itemReadWarnings: string[] = [];\n const items = await listAllFrontMatterWithBody(\n pmRoot,\n settings.item_format,\n typeRegistry.type_to_folder,\n itemReadWarnings,\n settings.schema,\n );\n const requestedChecks = resolveRequestedChecks(options);\n const metadataProfileSource: \"default\" | \"settings\" | \"option\" =\n typeof options.metadataProfile === \"string\" ? \"option\" : \"settings\";\n const metadataProfile = resolveValidateMetadataProfile(\n typeof options.metadataProfile === \"string\" ? options.metadataProfile : settings.validation.metadata_profile,\n );\n const metadataPolicy = resolveValidateMetadataPolicy(\n metadataProfile,\n metadataProfileSource,\n settings.validation.metadata_required_fields,\n );\n const lifecyclePatternPolicy = resolveLifecyclePatternPolicy(settings);\n const dependencyCycleSeverity = resolveDependencyCycleSeverity(options.dependencyCycleSeverity);\n const parentCycleSeverity = resolveParentCycleSeverity(options.parentCycleSeverity);\n const fileScanMode = resolveFileScanMode(options.scanMode);\n const workspaceRoot = resolveWorkspaceRoot(pmRoot);\n const checks: ValidateCheck[] = [];\n const warnings = [...new Set(itemReadWarnings)];\n const fixHintsEnabled = options.fixHints === true;\n // Full (un-truncated) diagnostic ID lists when the agent asks for them\n // (--verbose-diagnostics/--all-affected-ids) or whenever output is JSON:\n // machine consumers expect complete *_item_ids arrays, never a 5-item cap.\n const fullDiagnostics =\n options.verboseDiagnostics === true || options.allAffectedIds === true || global.json === true;\n const record = (built: { check: ValidateCheck; warnings: string[] }): void => {\n if (fixHintsEnabled) {\n attachValidateFixHints(built.check, built.warnings);\n }\n checks.push(built.check);\n warnings.push(...built.warnings);\n };\n\n let closeReasonBackfillRows: CloseReasonBackfillRow[] = [];\n let estimateBackfillRows: EstimateBackfillRow[] = [];\n let resolutionBackfillRows: ResolutionBackfillRow[] = [];\n let terminalParentFixRows: TerminalParentFixRow[] = [];\n let staleLinkPruneRows: StaleLinkPruneRow[] = [];\n\n if (requestedChecks.has(\"metadata\")) {\n const built = buildMetadataCheck(items, metadataPolicy, statusRegistry, fullDiagnostics);\n closeReasonBackfillRows = built.closeReasonBackfillRows;\n estimateBackfillRows = built.estimateBackfillRows;\n record(built);\n }\n if (requestedChecks.has(\"resolution\")) {\n const built = buildResolutionCheck(items, statusRegistry, fullDiagnostics);\n resolutionBackfillRows = built.resolutionBackfillRows;\n record(built);\n }\n if (requestedChecks.has(\"lifecycle\")) {\n const built = buildLifecycleCheck(\n items,\n Boolean(options.checkStaleBlockers),\n dependencyCycleSeverity,\n parentCycleSeverity,\n statusRegistry,\n lifecyclePatternPolicy,\n fullDiagnostics,\n settings.id_prefix,\n );\n terminalParentFixRows = built.terminalParentFixRows;\n record(built);\n }\n if (requestedChecks.has(\"files\")) {\n const built = await buildFilesCheck(\n items,\n workspaceRoot,\n pmRoot,\n fileScanMode,\n Boolean(options.includePmInternals),\n Boolean(options.verboseFileLists),\n );\n staleLinkPruneRows = built.staleLinkPruneRows;\n record(built);\n }\n if (requestedChecks.has(\"command_references\")) {\n record(buildCommandReferencesCheck(items, settings.id_prefix, fullDiagnostics));\n }\n if (requestedChecks.has(\"history_drift\")) {\n record(await buildHistoryDriftCheck(pmRoot, items, fullDiagnostics));\n }\n if (requestedChecks.has(\"format_version\")) {\n record(buildFormatVersionCheck(items, fullDiagnostics));\n }\n\n // Remediation phase (pm-c3sz / pm-8jss / pm-0v2m). Plans are derived from\n // the findings of THIS run; checks above always report the pre-fix state.\n // Safe field backfills apply by default under --auto-fix; gated lifecycle\n // fixes are planned but withheld unless --fix-scope lifecycle grants them;\n // --dry-run previews without mutating; failures never abort the run.\n let fixes: ValidateFixesSummary | undefined;\n if (fixesRequested) {\n const planned: ValidateFixRecord[] = [];\n if (options.autoFix === true) {\n planned.push(...planCloseReasonBackfillFixes(closeReasonBackfillRows));\n planned.push(...planResolutionBackfillFixes(resolutionBackfillRows));\n planned.push(...planEstimateBackfillFixes(estimateBackfillRows, settings.validation.estimate_defaults_by_type));\n planned.push(...planTerminalParentFixes(terminalParentFixRows));\n }\n if (options.pruneMissing === true) {\n planned.push(...planStaleLinkPruneFixes(staleLinkPruneRows));\n }\n const { applicable, gated } = partitionFixesByGrant(planned, grantedFixScopes);\n const dryRun = options.dryRun === true;\n const appliedFixRows: Array<Record<string, unknown>> = [];\n const failedFixRows: Array<Record<string, unknown>> = [];\n if (!dryRun) {\n const applied = await applyValidateFixes(applicable, global);\n appliedFixRows.push(...applied.applied.map(toFixOutputRow));\n failedFixRows.push(\n ...applied.failed.map(({ fix, error }) => ({\n ...toFixOutputRow(fix),\n error: error instanceof Error ? error.message : String(error),\n })),\n );\n }\n fixes = {\n mode: dryRun ? \"dry_run\" : \"apply\",\n auto_fix: options.autoFix === true,\n prune_missing: options.pruneMissing === true,\n granted_fix_scopes: [...grantedFixScopes].sort((left, right) => left.localeCompare(right)),\n planned_count: planned.length,\n applied_count: appliedFixRows.length,\n gated_count: gated.length,\n failed_count: failedFixRows.length,\n planned_fixes: planned.map(toFixOutputRow),\n applied_fixes: appliedFixRows,\n gated_fixes: gated.map((fix) => ({\n ...toFixOutputRow(fix),\n gate_hint: `Withheld: re-run with --fix-scope ${fix.gate} to apply.`,\n })),\n failed_fixes: failedFixRows,\n };\n }\n\n const normalizedWarnings = [...new Set(warnings)].sort((left, right) => left.localeCompare(right));\n const hasErrors = checks.some((check) => check.status === \"error\");\n return {\n ok: !hasErrors,\n has_warnings: normalizedWarnings.length > 0,\n checks,\n warnings: normalizedWarnings,\n ...(fixes !== undefined ? { fixes } : {}),\n generated_at: nowIso(),\n };\n}\n/* c8 ignore stop */\n"],"names":[],"mappings":"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","debugId":"a9087567-b334-5e9c-8ed7-e52d8cb35801"}