@unbrained/pm-cli 2026.5.31 → 2026.6.5
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.
- package/CHANGELOG.md +127 -0
- package/dist/cli/argv-utils.js +7 -3
- package/dist/cli/argv-utils.js.map +1 -1
- package/dist/cli/bootstrap-args.d.ts +1 -0
- package/dist/cli/bootstrap-args.js +23 -3
- package/dist/cli/bootstrap-args.js.map +1 -1
- package/dist/cli/commands/calendar.js +17 -3
- package/dist/cli/commands/calendar.js.map +1 -1
- package/dist/cli/commands/close-many.d.ts +63 -0
- package/dist/cli/commands/close-many.js +302 -0
- package/dist/cli/commands/close-many.js.map +1 -0
- package/dist/cli/commands/completion.d.ts +1 -0
- package/dist/cli/commands/completion.js +241 -27
- package/dist/cli/commands/completion.js.map +1 -1
- package/dist/cli/commands/config.d.ts +4 -4
- package/dist/cli/commands/config.js +115 -3
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/contracts.js +191 -162
- package/dist/cli/commands/contracts.js.map +1 -1
- package/dist/cli/commands/create.d.ts +1 -0
- package/dist/cli/commands/create.js +77 -114
- package/dist/cli/commands/create.js.map +1 -1
- package/dist/cli/commands/extension/doctor.d.ts +12 -0
- package/dist/cli/commands/extension/doctor.js +97 -2
- package/dist/cli/commands/extension/doctor.js.map +1 -1
- package/dist/cli/commands/extension/scaffold.js +49 -48
- package/dist/cli/commands/extension/scaffold.js.map +1 -1
- package/dist/cli/commands/extension.js +51 -23
- package/dist/cli/commands/extension.js.map +1 -1
- package/dist/cli/commands/get.js +7 -7
- package/dist/cli/commands/get.js.map +1 -1
- package/dist/cli/commands/health.js +38 -3
- package/dist/cli/commands/health.js.map +1 -1
- package/dist/cli/commands/index.d.ts +2 -1
- package/dist/cli/commands/index.js +4 -3
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/init.d.ts +10 -0
- package/dist/cli/commands/init.js +107 -4
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/list.d.ts +5 -0
- package/dist/cli/commands/list.js +58 -26
- package/dist/cli/commands/list.js.map +1 -1
- package/dist/cli/commands/reindex.js +163 -47
- package/dist/cli/commands/reindex.js.map +1 -1
- package/dist/cli/commands/repeatable-metadata-parsers.d.ts +15 -0
- package/dist/cli/commands/repeatable-metadata-parsers.js +120 -0
- package/dist/cli/commands/repeatable-metadata-parsers.js.map +1 -0
- package/dist/cli/commands/restore.js +25 -4
- package/dist/cli/commands/restore.js.map +1 -1
- package/dist/cli/commands/schema.d.ts +122 -1
- package/dist/cli/commands/schema.js +536 -6
- package/dist/cli/commands/schema.js.map +1 -1
- package/dist/cli/commands/search.d.ts +1 -0
- package/dist/cli/commands/search.js +18 -4
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/test.js +4 -3
- package/dist/cli/commands/test.js.map +1 -1
- package/dist/cli/commands/update-many.js +69 -140
- package/dist/cli/commands/update-many.js.map +1 -1
- package/dist/cli/commands/update.d.ts +2 -0
- package/dist/cli/commands/update.js +138 -119
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/commands/validate.d.ts +1 -0
- package/dist/cli/commands/validate.js +63 -33
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/error-guidance.js +26 -3
- package/dist/cli/error-guidance.js.map +1 -1
- package/dist/cli/help-content.js +82 -3
- package/dist/cli/help-content.js.map +1 -1
- package/dist/cli/main.js +377 -23
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/register-list-query.js +9 -3
- package/dist/cli/register-list-query.js.map +1 -1
- package/dist/cli/register-mutation.js +200 -28
- package/dist/cli/register-mutation.js.map +1 -1
- package/dist/cli/register-operations.js +4 -2
- package/dist/cli/register-operations.js.map +1 -1
- package/dist/cli/register-setup.js +4 -2
- package/dist/cli/register-setup.js.map +1 -1
- package/dist/cli/registration-helpers.js +31 -4
- package/dist/cli/registration-helpers.js.map +1 -1
- package/dist/cli-bundle/chunks/activity-3RWRRNOW.js +20 -0
- package/dist/cli-bundle/chunks/activity-3RWRRNOW.js.map +1 -0
- package/dist/cli-bundle/chunks/activity-P5BUMWP3.js +16 -0
- package/dist/cli-bundle/chunks/aggregate-J35K7WZB.js +206 -0
- package/dist/cli-bundle/chunks/aggregate-J35K7WZB.js.map +1 -0
- package/dist/cli-bundle/chunks/{aggregate-ADUOSFRO.js → aggregate-OOAGKWRG.js} +11 -11
- package/dist/cli-bundle/chunks/{append-JD2DETU7.js → append-5JE3YGXU.js} +8 -9
- package/dist/cli-bundle/chunks/{append-JD2DETU7.js.map → append-5JE3YGXU.js.map} +1 -1
- package/dist/cli-bundle/chunks/append-PNN6UIBZ.js +69 -0
- package/dist/cli-bundle/chunks/append-PNN6UIBZ.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-26KTVXJW.js +218 -0
- package/dist/cli-bundle/chunks/chunk-26KTVXJW.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-JULRTHJQ.js → chunk-3OH4DAEB.js} +119 -6
- package/dist/cli-bundle/chunks/chunk-3OH4DAEB.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-4LTBNUYT.js +5553 -0
- package/dist/cli-bundle/chunks/chunk-4LTBNUYT.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-WDPXDQFG.js → chunk-4PJQSECJ.js} +6 -4
- package/dist/cli-bundle/chunks/chunk-4PJQSECJ.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-4QCR4QW3.js +1832 -0
- package/dist/cli-bundle/chunks/chunk-4QCR4QW3.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-6HT2F4TK.js → chunk-5IRA6IYD.js} +175 -54
- package/dist/cli-bundle/chunks/chunk-5IRA6IYD.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-5KB4X7YY.js +412 -0
- package/dist/cli-bundle/chunks/chunk-5KB4X7YY.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-5PAOPUZX.js +182 -0
- package/dist/cli-bundle/chunks/chunk-5PAOPUZX.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-7K24QB23.js +698 -0
- package/dist/cli-bundle/chunks/chunk-7K24QB23.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-A6PEXMYN.js +380 -0
- package/dist/cli-bundle/chunks/chunk-A6PEXMYN.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-ASQM3IF5.js +230 -0
- package/dist/cli-bundle/chunks/chunk-ASQM3IF5.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-G57E5D7T.js → chunk-ATBVS6WW.js} +5 -5
- package/dist/cli-bundle/chunks/chunk-AXXKLVTW.js +332 -0
- package/dist/cli-bundle/chunks/chunk-AXXKLVTW.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-PXUAZUUY.js → chunk-B3N4TKNL.js} +12 -11
- package/dist/cli-bundle/chunks/chunk-B3N4TKNL.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-KBQY3YG5.js → chunk-BNL6S7QH.js} +3 -3
- package/dist/cli-bundle/chunks/chunk-CCUFLH4J.js +154 -0
- package/dist/cli-bundle/chunks/chunk-CCUFLH4J.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-NGN7UV5K.js → chunk-CJDQB2ED.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-CWT53EYT.js +1340 -0
- package/dist/cli-bundle/chunks/chunk-CWT53EYT.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-D7AOMPRH.js → chunk-D3WUNETC.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-3M73P3G6.js → chunk-D5X7N6FI.js} +210 -132
- package/dist/cli-bundle/chunks/chunk-D5X7N6FI.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-6YCV7WSL.js → chunk-DFIZGAI5.js} +10 -12
- package/dist/cli-bundle/chunks/{chunk-6YCV7WSL.js.map → chunk-DFIZGAI5.js.map} +1 -1
- package/dist/cli-bundle/chunks/chunk-DFUSXJDE.js +1704 -0
- package/dist/cli-bundle/chunks/chunk-DFUSXJDE.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-EHXPIKKP.js +2988 -0
- package/dist/cli-bundle/chunks/chunk-EHXPIKKP.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-FVXM3GKS.js +128 -0
- package/dist/cli-bundle/chunks/chunk-FVXM3GKS.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-G5BACLYH.js +454 -0
- package/dist/cli-bundle/chunks/chunk-G5BACLYH.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-U7FMKRXH.js → chunk-GCAVRLGE.js} +37 -16
- package/dist/cli-bundle/chunks/chunk-GCAVRLGE.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-GFWHHMVV.js +57 -0
- package/dist/cli-bundle/chunks/chunk-GFWHHMVV.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-GNHVV4SY.js +3860 -0
- package/dist/cli-bundle/chunks/chunk-GNHVV4SY.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-GPGAYASV.js +346 -0
- package/dist/cli-bundle/chunks/chunk-GPGAYASV.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-MD7K4JYF.js → chunk-HPH6X4ZZ.js} +26 -15
- package/dist/cli-bundle/chunks/chunk-HPH6X4ZZ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-5HSEP75M.js → chunk-HZOS2UG5.js} +18 -6
- package/dist/cli-bundle/chunks/chunk-HZOS2UG5.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-IUV734HF.js +17 -0
- package/dist/cli-bundle/chunks/chunk-IUV734HF.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-J27KIHTG.js +15 -0
- package/dist/cli-bundle/chunks/chunk-J27KIHTG.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-L2FXEKDB.js → chunk-JB4RGL4V.js} +7 -7
- package/dist/cli-bundle/chunks/chunk-JQI2HE55.js +130 -0
- package/dist/cli-bundle/chunks/chunk-JQI2HE55.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-SEXQN4KL.js → chunk-K47WAYQV.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-CEFIVZPG.js → chunk-KA24HME7.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-KBG47ZOY.js +1325 -0
- package/dist/cli-bundle/chunks/chunk-KBG47ZOY.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-KCMIYKTA.js +242 -0
- package/dist/cli-bundle/chunks/chunk-KCMIYKTA.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-7Y53ZJIQ.js → chunk-KK6YPGH3.js} +22 -3
- package/dist/cli-bundle/chunks/chunk-KK6YPGH3.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-A7E7PUVX.js → chunk-LDJK7SHN.js} +7 -7
- package/dist/cli-bundle/chunks/chunk-LXYVKYMQ.js +24 -0
- package/dist/cli-bundle/chunks/chunk-LXYVKYMQ.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-MISYRLEP.js +80 -0
- package/dist/cli-bundle/chunks/chunk-MISYRLEP.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-FQE6XZDB.js → chunk-N5YF3VFN.js} +54 -32
- package/dist/cli-bundle/chunks/chunk-N5YF3VFN.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-NQP3ECKF.js +173 -0
- package/dist/cli-bundle/chunks/chunk-NQP3ECKF.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-O5IBJE6S.js +338 -0
- package/dist/cli-bundle/chunks/chunk-O5IBJE6S.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-OGZEG5TT.js → chunk-OIQIXTNB.js} +164 -53
- package/dist/cli-bundle/chunks/chunk-OIQIXTNB.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-ORTLYVA4.js +751 -0
- package/dist/cli-bundle/chunks/chunk-ORTLYVA4.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-JTWRXG4B.js → chunk-OUF3ARDX.js} +251 -251
- package/dist/cli-bundle/chunks/chunk-OUF3ARDX.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-PVNQLCIS.js → chunk-RANZIID5.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-RQAWLSUU.js +140 -0
- package/dist/cli-bundle/chunks/chunk-RQAWLSUU.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-JFWUHHS2.js → chunk-S3CV7JGJ.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-LSXGH6NE.js → chunk-SRVKTWPR.js} +748 -196
- package/dist/cli-bundle/chunks/chunk-SRVKTWPR.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-SSFMJCPF.js +76 -0
- package/dist/cli-bundle/chunks/chunk-SSFMJCPF.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-SZQCER6S.js +631 -0
- package/dist/cli-bundle/chunks/chunk-SZQCER6S.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-T2ORWB6D.js +540 -0
- package/dist/cli-bundle/chunks/chunk-T2ORWB6D.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-TBQVUNVH.js +422 -0
- package/dist/cli-bundle/chunks/chunk-TBQVUNVH.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-P53TN6IA.js → chunk-TK633IVD.js} +35 -8
- package/dist/cli-bundle/chunks/chunk-TK633IVD.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-TQ3ZK6VD.js +131 -0
- package/dist/cli-bundle/chunks/chunk-TQ3ZK6VD.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-UFCG3SWR.js +119 -0
- package/dist/cli-bundle/chunks/chunk-UFCG3SWR.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-UOVLWB47.js +1664 -0
- package/dist/cli-bundle/chunks/chunk-UOVLWB47.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-V3JQ4IPL.js +186 -0
- package/dist/cli-bundle/chunks/chunk-V3JQ4IPL.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-VGO2T3TY.js +182 -0
- package/dist/cli-bundle/chunks/chunk-VGO2T3TY.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-LRBOHPUE.js → chunk-WIKR7KFL.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-BUPWJ3IJ.js → chunk-XG7RJYHV.js} +484 -49
- package/dist/cli-bundle/chunks/chunk-XG7RJYHV.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-XSLQSXAH.js +53 -0
- package/dist/cli-bundle/chunks/chunk-XSLQSXAH.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-AKOOMO3T.js → chunk-XX5LRINW.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-WJ2NAC37.js → chunk-Y2AKE2HS.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-GN7IJPCD.js → chunk-ZQ4F6EC4.js} +301 -24
- package/dist/cli-bundle/chunks/chunk-ZQ4F6EC4.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-ZRVSMOMR.js +1809 -0
- package/dist/cli-bundle/chunks/chunk-ZRVSMOMR.js.map +1 -0
- package/dist/cli-bundle/chunks/{claim-EE4TKKCV.js → claim-AZLP7YFO.js} +10 -11
- package/dist/cli-bundle/chunks/{claim-EE4TKKCV.js.map → claim-AZLP7YFO.js.map} +1 -1
- package/dist/cli-bundle/chunks/claim-ZFA7HKU4.js +129 -0
- package/dist/cli-bundle/chunks/claim-ZFA7HKU4.js.map +1 -0
- package/dist/cli-bundle/chunks/close-65DFYAVS.js +17 -0
- package/dist/cli-bundle/chunks/close-65DFYAVS.js.map +1 -0
- package/dist/cli-bundle/chunks/close-RMHQ3KWH.js +13 -0
- package/dist/cli-bundle/chunks/close-many-AKPZNSGI.js +311 -0
- package/dist/cli-bundle/chunks/close-many-AKPZNSGI.js.map +1 -0
- package/dist/cli-bundle/chunks/close-many-UKZSQGM7.js +314 -0
- package/dist/cli-bundle/chunks/close-many-UKZSQGM7.js.map +7 -0
- package/dist/cli-bundle/chunks/{comments-AAKJQ6LW.js → comments-AGBNSJJH.js} +10 -11
- package/dist/cli-bundle/chunks/{comments-AAKJQ6LW.js.map → comments-AGBNSJJH.js.map} +1 -1
- package/dist/cli-bundle/chunks/comments-CJWXQI7X.js +100 -0
- package/dist/cli-bundle/chunks/comments-CJWXQI7X.js.map +1 -0
- package/dist/cli-bundle/chunks/{config-V3FZOKLI.js → config-5ON3ADRH.js} +121 -10
- package/dist/cli-bundle/chunks/config-5ON3ADRH.js.map +7 -0
- package/dist/cli-bundle/chunks/config-DDPYIA6J.js +1671 -0
- package/dist/cli-bundle/chunks/config-DDPYIA6J.js.map +1 -0
- package/dist/cli-bundle/chunks/{context-RZ5QPNJB.js → context-E6U3DWVM.js} +32 -19
- package/dist/cli-bundle/chunks/{context-RZ5QPNJB.js.map → context-E6U3DWVM.js.map} +2 -2
- package/dist/cli-bundle/chunks/context-ZOJEN5VT.js +1461 -0
- package/dist/cli-bundle/chunks/context-ZOJEN5VT.js.map +1 -0
- package/dist/cli-bundle/chunks/{contracts-YLMH33VU.js → contracts-CXSFM45B.js} +194 -162
- package/dist/cli-bundle/chunks/contracts-CXSFM45B.js.map +7 -0
- package/dist/cli-bundle/chunks/contracts-LCSX5R53.js +1274 -0
- package/dist/cli-bundle/chunks/contracts-LCSX5R53.js.map +1 -0
- package/dist/cli-bundle/chunks/create-ATONSAZW.js +27 -0
- package/dist/cli-bundle/chunks/create-WYFKN2U4.js +31 -0
- package/dist/cli-bundle/chunks/create-WYFKN2U4.js.map +1 -0
- package/dist/cli-bundle/chunks/{delete-RHCTEORS.js → delete-RONNH4F4.js} +7 -8
- package/dist/cli-bundle/chunks/{delete-RHCTEORS.js.map → delete-RONNH4F4.js.map} +1 -1
- package/dist/cli-bundle/chunks/delete-ZXWC56WO.js +55 -0
- package/dist/cli-bundle/chunks/delete-ZXWC56WO.js.map +1 -0
- package/dist/cli-bundle/chunks/deps-EHXIFOZR.js +225 -0
- package/dist/cli-bundle/chunks/deps-EHXIFOZR.js.map +1 -0
- package/dist/cli-bundle/chunks/{deps-MZYCMLAO.js → deps-WII3O4HB.js} +7 -8
- package/dist/cli-bundle/chunks/{deps-MZYCMLAO.js.map → deps-WII3O4HB.js.map} +1 -1
- package/dist/cli-bundle/chunks/{docs-FXXUCZYU.js → docs-JMVCFNHH.js} +9 -10
- package/dist/cli-bundle/chunks/{docs-FXXUCZYU.js.map → docs-JMVCFNHH.js.map} +1 -1
- package/dist/cli-bundle/chunks/docs-PDREIMLS.js +31 -0
- package/dist/cli-bundle/chunks/docs-PDREIMLS.js.map +1 -0
- package/dist/cli-bundle/chunks/extension-B4ROVWJD.js +28 -0
- package/dist/cli-bundle/chunks/extension-B4ROVWJD.js.map +1 -0
- package/dist/cli-bundle/chunks/{extension-B4WL7BQU.js → extension-G6UXSM5S.js} +4 -5
- package/dist/cli-bundle/chunks/files-2PN7UM2D.js +282 -0
- package/dist/cli-bundle/chunks/files-2PN7UM2D.js.map +1 -0
- package/dist/cli-bundle/chunks/{files-WVOX67PE.js → files-MXYS5W4M.js} +9 -10
- package/dist/cli-bundle/chunks/{files-WVOX67PE.js.map → files-MXYS5W4M.js.map} +1 -1
- package/dist/cli-bundle/chunks/gc-GT552UJH.js +178 -0
- package/dist/cli-bundle/chunks/gc-GT552UJH.js.map +1 -0
- package/dist/cli-bundle/chunks/{gc-JWNF66EC.js → gc-QNBRJG6H.js} +3 -3
- package/dist/cli-bundle/chunks/{get-LTK3HOCQ.js → get-CINFEUIY.js} +16 -17
- package/dist/cli-bundle/chunks/get-CINFEUIY.js.map +7 -0
- package/dist/cli-bundle/chunks/get-WXMLRG7M.js +194 -0
- package/dist/cli-bundle/chunks/get-WXMLRG7M.js.map +1 -0
- package/dist/cli-bundle/chunks/health-5VPOJQ53.js +1258 -0
- package/dist/cli-bundle/chunks/health-5VPOJQ53.js.map +1 -0
- package/dist/cli-bundle/chunks/{health-TCWL55KM.js → health-IT5DBPRJ.js} +43 -15
- package/dist/cli-bundle/chunks/health-IT5DBPRJ.js.map +7 -0
- package/dist/cli-bundle/chunks/history-6FC4H6HI.js +20 -0
- package/dist/cli-bundle/chunks/history-FLZIP7PM.js +24 -0
- package/dist/cli-bundle/chunks/history-FLZIP7PM.js.map +1 -0
- package/dist/cli-bundle/chunks/history-redact-SSZBAD76.js +23 -0
- package/dist/cli-bundle/chunks/history-redact-SSZBAD76.js.map +1 -0
- package/dist/cli-bundle/chunks/history-redact-XKYEZDBL.js +19 -0
- package/dist/cli-bundle/chunks/{history-repair-ZWSTDRH2.js → history-repair-KC5ZOJRZ.js} +12 -14
- package/dist/cli-bundle/chunks/{history-repair-ZWSTDRH2.js.map → history-repair-KC5ZOJRZ.js.map} +1 -1
- package/dist/cli-bundle/chunks/history-repair-X7CO5JJZ.js +193 -0
- package/dist/cli-bundle/chunks/history-repair-X7CO5JJZ.js.map +1 -0
- package/dist/cli-bundle/chunks/init-6MRFVOLH.js +20 -0
- package/dist/cli-bundle/chunks/init-6MRFVOLH.js.map +1 -0
- package/dist/cli-bundle/chunks/init-KHX3FEEM.js +16 -0
- package/dist/cli-bundle/chunks/{learnings-NXTWE3FR.js → learnings-A3CLB5CO.js} +10 -11
- package/dist/cli-bundle/chunks/{learnings-NXTWE3FR.js.map → learnings-A3CLB5CO.js.map} +1 -1
- package/dist/cli-bundle/chunks/learnings-DCX55BNX.js +44 -0
- package/dist/cli-bundle/chunks/learnings-DCX55BNX.js.map +1 -0
- package/dist/cli-bundle/chunks/list-53LZ2AEO.js +20 -0
- package/dist/cli-bundle/chunks/list-DBRECOG4.js +24 -0
- package/dist/cli-bundle/chunks/list-DBRECOG4.js.map +1 -0
- package/dist/cli-bundle/chunks/{notes-DFS5ZGOO.js → notes-42LIC3UE.js} +10 -11
- package/dist/cli-bundle/chunks/{notes-DFS5ZGOO.js.map → notes-42LIC3UE.js.map} +1 -1
- package/dist/cli-bundle/chunks/notes-P5O3VMQ3.js +44 -0
- package/dist/cli-bundle/chunks/notes-P5O3VMQ3.js.map +1 -0
- package/dist/cli-bundle/chunks/{plan-67AB2PLM.js → plan-HDQXEUKD.js} +13 -14
- package/dist/cli-bundle/chunks/{plan-67AB2PLM.js.map → plan-HDQXEUKD.js.map} +1 -1
- package/dist/cli-bundle/chunks/plan-IGTE3WOJ.js +1171 -0
- package/dist/cli-bundle/chunks/plan-IGTE3WOJ.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-list-query-UP3VRUFS.js → register-list-query-AG3XKXWL.js} +22 -24
- package/dist/cli-bundle/chunks/register-list-query-AG3XKXWL.js.map +7 -0
- package/dist/cli-bundle/chunks/register-list-query-EMNSIUO4.js +227 -0
- package/dist/cli-bundle/chunks/register-list-query-EMNSIUO4.js.map +1 -0
- package/dist/cli-bundle/chunks/register-mutation-M3YS6XDO.js +813 -0
- package/dist/cli-bundle/chunks/register-mutation-M3YS6XDO.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-mutation-YWSBF545.js → register-mutation-RSMT6DPK.js} +154 -43
- package/dist/cli-bundle/chunks/register-mutation-RSMT6DPK.js.map +7 -0
- package/dist/cli-bundle/chunks/register-operations-KYUOOOOD.js +370 -0
- package/dist/cli-bundle/chunks/register-operations-KYUOOOOD.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-operations-3BDTGSDH.js → register-operations-Q54JQZUN.js} +33 -34
- package/dist/cli-bundle/chunks/register-operations-Q54JQZUN.js.map +7 -0
- package/dist/cli-bundle/chunks/register-setup-DI6P7X75.js +242 -0
- package/dist/cli-bundle/chunks/register-setup-DI6P7X75.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-setup-V56GDRUS.js → register-setup-YJKIQRKA.js} +18 -19
- package/dist/cli-bundle/chunks/{register-setup-V56GDRUS.js.map → register-setup-YJKIQRKA.js.map} +2 -2
- package/dist/cli-bundle/chunks/restore-2XVTBLKQ.js +21 -0
- package/dist/cli-bundle/chunks/restore-2XVTBLKQ.js.map +1 -0
- package/dist/cli-bundle/chunks/restore-JL5QIH7H.js +17 -0
- package/dist/cli-bundle/chunks/schema-LVXZWFGY.js +770 -0
- package/dist/cli-bundle/chunks/schema-LVXZWFGY.js.map +1 -0
- package/dist/cli-bundle/chunks/schema-V6BX65Q2.js +780 -0
- package/dist/cli-bundle/chunks/schema-V6BX65Q2.js.map +7 -0
- package/dist/cli-bundle/chunks/{search-HENBL456.js → search-5A3BMFA7.js} +25 -16
- package/dist/cli-bundle/chunks/search-5A3BMFA7.js.map +7 -0
- package/dist/cli-bundle/chunks/search-C7NPB7G7.js +1127 -0
- package/dist/cli-bundle/chunks/search-C7NPB7G7.js.map +1 -0
- package/dist/cli-bundle/chunks/stats-FNLYVXTB.js +120 -0
- package/dist/cli-bundle/chunks/stats-FNLYVXTB.js.map +1 -0
- package/dist/cli-bundle/chunks/{stats-N6H3YP2F.js → stats-Y2CBTZSL.js} +7 -8
- package/dist/cli-bundle/chunks/{stats-N6H3YP2F.js.map → stats-Y2CBTZSL.js.map} +1 -1
- package/dist/cli-bundle/chunks/test-OFYONO3C.js +35 -0
- package/dist/cli-bundle/chunks/test-OFYONO3C.js.map +1 -0
- package/dist/cli-bundle/chunks/test-RJ4ZF35X.js +31 -0
- package/dist/cli-bundle/chunks/{test-all-G2AZOHXI.js → test-all-EEMKNTGU.js} +13 -14
- package/dist/cli-bundle/chunks/{test-all-G2AZOHXI.js.map → test-all-EEMKNTGU.js.map} +1 -1
- package/dist/cli-bundle/chunks/test-all-OJE6CIO7.js +328 -0
- package/dist/cli-bundle/chunks/test-all-OJE6CIO7.js.map +1 -0
- package/dist/cli-bundle/chunks/test-runs-IPOPFOAF.js +929 -0
- package/dist/cli-bundle/chunks/test-runs-IPOPFOAF.js.map +1 -0
- package/dist/cli-bundle/chunks/{test-runs-GX5HTPSF.js → test-runs-L2M7WKH7.js} +5 -5
- package/dist/cli-bundle/chunks/update-6YEHPVXH.js +25 -0
- package/dist/cli-bundle/chunks/update-6YEHPVXH.js.map +1 -0
- package/dist/cli-bundle/chunks/update-PYLVHMRD.js +21 -0
- package/dist/cli-bundle/chunks/{update-many-46HRSP2Q.js → update-many-322CCH2L.js} +78 -146
- package/dist/cli-bundle/chunks/update-many-322CCH2L.js.map +7 -0
- package/dist/cli-bundle/chunks/update-many-DYWGW57M.js +605 -0
- package/dist/cli-bundle/chunks/update-many-DYWGW57M.js.map +1 -0
- package/dist/cli-bundle/chunks/{upgrade-H5HHM5UV.js → upgrade-2U727SAM.js} +5 -7
- package/dist/cli-bundle/chunks/{upgrade-H5HHM5UV.js.map → upgrade-2U727SAM.js.map} +1 -1
- package/dist/cli-bundle/chunks/upgrade-3W3RVSNM.js +266 -0
- package/dist/cli-bundle/chunks/upgrade-3W3RVSNM.js.map +1 -0
- package/dist/cli-bundle/chunks/validate-GZ24NYHO.js +1120 -0
- package/dist/cli-bundle/chunks/validate-GZ24NYHO.js.map +1 -0
- package/dist/cli-bundle/chunks/{validate-TMCVKIGZ.js → validate-ZFVWPEEN.js} +61 -48
- package/dist/cli-bundle/chunks/validate-ZFVWPEEN.js.map +7 -0
- package/dist/cli-bundle/main.js +490 -52
- package/dist/cli-bundle/main.js.map +2 -2
- package/dist/core/checkpoint/mutation-checkpoint.d.ts +44 -0
- package/dist/core/checkpoint/mutation-checkpoint.js +119 -0
- package/dist/core/checkpoint/mutation-checkpoint.js.map +1 -0
- package/dist/core/config/positional-value.js +4 -2
- package/dist/core/config/positional-value.js.map +1 -1
- package/dist/core/diagnostics/remediation.d.ts +73 -0
- package/dist/core/diagnostics/remediation.js +328 -0
- package/dist/core/diagnostics/remediation.js.map +1 -0
- package/dist/core/extensions/extension-hook-runtime.js +9 -2
- package/dist/core/extensions/extension-hook-runtime.js.map +1 -1
- package/dist/core/extensions/extension-types.d.ts +60 -4
- package/dist/core/extensions/extension-types.js +2 -2
- package/dist/core/extensions/extension-types.js.map +1 -1
- package/dist/core/extensions/index.d.ts +5 -1
- package/dist/core/extensions/index.js +61 -2
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/item-fields.d.ts +5 -1
- package/dist/core/extensions/item-fields.js +126 -4
- package/dist/core/extensions/item-fields.js.map +1 -1
- package/dist/core/extensions/loader.js +283 -8
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/item/item-format.d.ts +3 -2
- package/dist/core/item/item-format.js +15 -10
- package/dist/core/item/item-format.js.map +1 -1
- package/dist/core/item/status-filter.d.ts +29 -0
- package/dist/core/item/status-filter.js +97 -0
- package/dist/core/item/status-filter.js.map +1 -0
- package/dist/core/item/type-registry.js +4 -2
- package/dist/core/item/type-registry.js.map +1 -1
- package/dist/core/output/output.js +17 -5
- package/dist/core/output/output.js.map +1 -1
- package/dist/core/schema/item-types-file.d.ts +15 -0
- package/dist/core/schema/item-types-file.js +27 -2
- package/dist/core/schema/item-types-file.js.map +1 -1
- package/dist/core/schema/runtime-field-filters.js +4 -3
- package/dist/core/schema/runtime-field-filters.js.map +1 -1
- package/dist/core/schema/runtime-field-values.d.ts +1 -1
- package/dist/core/schema/runtime-field-values.js +10 -4
- package/dist/core/schema/runtime-field-values.js.map +1 -1
- package/dist/core/schema/runtime-schema.js +75 -2
- package/dist/core/schema/runtime-schema.js.map +1 -1
- package/dist/core/schema/status-defs-file.d.ts +113 -0
- package/dist/core/schema/status-defs-file.js +260 -0
- package/dist/core/schema/status-defs-file.js.map +1 -0
- package/dist/core/schema/type-workflows.d.ts +64 -0
- package/dist/core/schema/type-workflows.js +98 -0
- package/dist/core/schema/type-workflows.js.map +1 -0
- package/dist/core/search/cache.d.ts +3 -1
- package/dist/core/search/cache.js +104 -28
- package/dist/core/search/cache.js.map +1 -1
- package/dist/core/search/http-client.d.ts +2 -2
- package/dist/core/search/http-client.js +2 -2
- package/dist/core/search/http-client.js.map +1 -1
- package/dist/core/search/vector-stores.d.ts +1 -0
- package/dist/core/search/vector-stores.js +64 -14
- package/dist/core/search/vector-stores.js.map +1 -1
- package/dist/core/search/vectorization-metadata.d.ts +13 -0
- package/dist/core/search/vectorization-metadata.js +65 -0
- package/dist/core/search/vectorization-metadata.js.map +1 -0
- package/dist/core/shared/serialization.d.ts +1 -0
- package/dist/core/shared/serialization.js +86 -2
- package/dist/core/shared/serialization.js.map +1 -1
- package/dist/core/store/front-matter-cache.js +14 -5
- package/dist/core/store/front-matter-cache.js.map +1 -1
- package/dist/core/store/item-store.d.ts +2 -0
- package/dist/core/store/item-store.js +61 -6
- package/dist/core/store/item-store.js.map +1 -1
- package/dist/core/store/settings-validator.js +18 -2
- package/dist/core/store/settings-validator.js.map +1 -1
- package/dist/core/store/settings.js +40 -5
- package/dist/core/store/settings.js.map +1 -1
- package/dist/core/telemetry/consent.js +3 -3
- package/dist/core/telemetry/consent.js.map +1 -1
- package/dist/core/telemetry/observability.js +4 -3
- package/dist/core/telemetry/observability.js.map +1 -1
- package/dist/mcp/server.js +221 -12
- package/dist/mcp/server.js.map +1 -1
- package/dist/sdk/cli-contracts/commander-mutation-options.js +16 -2
- package/dist/sdk/cli-contracts/commander-mutation-options.js.map +1 -1
- package/dist/sdk/cli-contracts/commander-types.js +7 -2
- package/dist/sdk/cli-contracts/commander-types.js.map +1 -1
- package/dist/sdk/cli-contracts/enum-contracts.d.ts +2 -2
- package/dist/sdk/cli-contracts/enum-contracts.js +4 -2
- package/dist/sdk/cli-contracts/enum-contracts.js.map +1 -1
- package/dist/sdk/cli-contracts/tool-option-contracts.d.ts +1 -0
- package/dist/sdk/cli-contracts/tool-option-contracts.js +53 -3
- package/dist/sdk/cli-contracts/tool-option-contracts.js.map +1 -1
- package/dist/sdk/cli-contracts/tool-parameter-tables.js +35 -6
- package/dist/sdk/cli-contracts/tool-parameter-tables.js.map +1 -1
- package/dist/sdk/cli-contracts.d.ts +19 -1
- package/dist/sdk/cli-contracts.js +187 -15
- package/dist/sdk/cli-contracts.js.map +1 -1
- package/dist/sdk/errors.d.ts +22 -0
- package/dist/sdk/errors.js +46 -0
- package/dist/sdk/errors.js.map +1 -0
- package/dist/sdk/index.d.ts +2 -1
- package/dist/sdk/index.js +3 -2
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/package-import-adapters.js +14 -3
- package/dist/sdk/package-import-adapters.js.map +1 -1
- package/dist/sdk/runtime.d.ts +1 -0
- package/dist/sdk/runtime.js +3 -2
- package/dist/sdk/runtime.js.map +1 -1
- package/dist/sdk/testing.d.ts +77 -0
- package/dist/sdk/testing.js +239 -0
- package/dist/sdk/testing.js.map +1 -0
- package/dist/types.d.ts +19 -0
- package/dist/types.js +3 -2
- package/dist/types.js.map +1 -1
- package/docs/AGENT_GUIDE.md +21 -2
- package/docs/COMMANDS.md +85 -5
- package/docs/CONFIGURATION.md +49 -2
- package/docs/EXTENSIONS.md +118 -6
- package/docs/QUICKSTART.md +2 -0
- package/docs/RELEASING.md +2 -2
- package/docs/SDK.md +273 -1
- package/docs/TESTING.md +17 -0
- package/docs/examples/policy-restricted-extension/manifest.json +1 -0
- package/docs/examples/starter-extension/index.js +9 -1
- package/docs/examples/starter-extension/manifest.json +1 -0
- package/package.json +12 -6
- package/packages/pm-beads/extensions/beads/index.js +2 -4
- package/packages/pm-beads/extensions/beads/index.ts +43 -33
- package/packages/pm-beads/extensions/beads/manifest.json +12 -1
- package/packages/pm-calendar/README.md +6 -0
- package/packages/pm-calendar/extensions/calendar/index.js +6 -1
- package/packages/pm-calendar/extensions/calendar/index.ts +6 -1
- package/packages/pm-calendar/extensions/calendar/manifest.json +6 -1
- package/packages/pm-governance-audit/extensions/governance-audit/manifest.json +6 -1
- package/packages/pm-guide-shell/README.md +4 -0
- package/packages/pm-guide-shell/extensions/guide-shell/index.js +22 -0
- package/packages/pm-guide-shell/extensions/guide-shell/index.ts +22 -0
- package/packages/pm-guide-shell/extensions/guide-shell/manifest.json +6 -1
- package/packages/pm-guide-shell/extensions/guide-shell/runtime.js +74 -3
- package/packages/pm-guide-shell/extensions/guide-shell/runtime.ts +84 -4
- package/packages/pm-lifecycle-hooks/README.md +29 -0
- package/packages/pm-lifecycle-hooks/extensions/lifecycle-hooks/index.js +18 -0
- package/packages/pm-lifecycle-hooks/extensions/lifecycle-hooks/index.ts +20 -0
- package/packages/pm-lifecycle-hooks/extensions/lifecycle-hooks/manifest.json +9 -0
- package/packages/pm-lifecycle-hooks/package.json +52 -0
- package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/manifest.json +13 -1
- package/packages/pm-search-advanced/extensions/search-advanced/index.js +69 -1
- package/packages/pm-search-advanced/extensions/search-advanced/index.ts +91 -2
- package/packages/pm-search-advanced/extensions/search-advanced/manifest.json +13 -1
- package/packages/pm-templates/extensions/templates/manifest.json +6 -1
- package/packages/pm-todos/extensions/todos/index.js +3 -7
- package/packages/pm-todos/extensions/todos/index.ts +55 -42
- package/packages/pm-todos/extensions/todos/manifest.json +13 -1
- package/scripts/bundle-cli.mjs +121 -17
- package/dist/cli-bundle/chunks/activity-OWYSUZOY.js +0 -17
- package/dist/cli-bundle/chunks/chunk-3M73P3G6.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-4AEZR5EJ.js +0 -189
- package/dist/cli-bundle/chunks/chunk-4AEZR5EJ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-5HSEP75M.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-6HT2F4TK.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-7Y53ZJIQ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-BUPWJ3IJ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-EGUGFSNX.js +0 -47
- package/dist/cli-bundle/chunks/chunk-EGUGFSNX.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-FM26RGSU.js +0 -56
- package/dist/cli-bundle/chunks/chunk-FM26RGSU.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-FQE6XZDB.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-GN7IJPCD.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-JTWRXG4B.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-JULRTHJQ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-LSXGH6NE.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-MD7K4JYF.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-OGZEG5TT.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-P53TN6IA.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-PXUAZUUY.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-U7FMKRXH.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-VGICHR7D.js +0 -141
- package/dist/cli-bundle/chunks/chunk-VGICHR7D.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-WDPXDQFG.js.map +0 -7
- package/dist/cli-bundle/chunks/close-XY4CSAYF.js +0 -14
- package/dist/cli-bundle/chunks/config-V3FZOKLI.js.map +0 -7
- package/dist/cli-bundle/chunks/contracts-YLMH33VU.js.map +0 -7
- package/dist/cli-bundle/chunks/create-PZVHRIZQ.js +0 -28
- package/dist/cli-bundle/chunks/get-LTK3HOCQ.js.map +0 -7
- package/dist/cli-bundle/chunks/health-TCWL55KM.js.map +0 -7
- package/dist/cli-bundle/chunks/history-A2JUDXUE.js +0 -21
- package/dist/cli-bundle/chunks/history-redact-ED6RFCPL.js +0 -20
- package/dist/cli-bundle/chunks/init-M2WUB4YH.js +0 -16
- package/dist/cli-bundle/chunks/list-OGWQPC26.js +0 -20
- package/dist/cli-bundle/chunks/register-list-query-UP3VRUFS.js.map +0 -7
- package/dist/cli-bundle/chunks/register-mutation-YWSBF545.js.map +0 -7
- package/dist/cli-bundle/chunks/register-operations-3BDTGSDH.js.map +0 -7
- package/dist/cli-bundle/chunks/restore-MB2ISME7.js +0 -18
- package/dist/cli-bundle/chunks/schema-Q622KC46.js +0 -119
- package/dist/cli-bundle/chunks/schema-Q622KC46.js.map +0 -7
- package/dist/cli-bundle/chunks/search-HENBL456.js.map +0 -7
- package/dist/cli-bundle/chunks/test-VNBDRJ4Z.js +0 -32
- package/dist/cli-bundle/chunks/update-H6SCWNMA.js +0 -22
- package/dist/cli-bundle/chunks/update-many-46HRSP2Q.js.map +0 -7
- package/dist/cli-bundle/chunks/validate-TMCVKIGZ.js.map +0 -7
- /package/dist/cli-bundle/chunks/{activity-OWYSUZOY.js.map → activity-P5BUMWP3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{aggregate-ADUOSFRO.js.map → aggregate-OOAGKWRG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-G57E5D7T.js.map → chunk-ATBVS6WW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-KBQY3YG5.js.map → chunk-BNL6S7QH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NGN7UV5K.js.map → chunk-CJDQB2ED.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-D7AOMPRH.js.map → chunk-D3WUNETC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-L2FXEKDB.js.map → chunk-JB4RGL4V.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-SEXQN4KL.js.map → chunk-K47WAYQV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-CEFIVZPG.js.map → chunk-KA24HME7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-A7E7PUVX.js.map → chunk-LDJK7SHN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-PVNQLCIS.js.map → chunk-RANZIID5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JFWUHHS2.js.map → chunk-S3CV7JGJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-LRBOHPUE.js.map → chunk-WIKR7KFL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-AKOOMO3T.js.map → chunk-XX5LRINW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-WJ2NAC37.js.map → chunk-Y2AKE2HS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-XY4CSAYF.js.map → close-RMHQ3KWH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-PZVHRIZQ.js.map → create-ATONSAZW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-B4WL7BQU.js.map → extension-G6UXSM5S.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{gc-JWNF66EC.js.map → gc-QNBRJG6H.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-A2JUDXUE.js.map → history-6FC4H6HI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-ED6RFCPL.js.map → history-redact-XKYEZDBL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-M2WUB4YH.js.map → init-KHX3FEEM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-OGWQPC26.js.map → list-53LZ2AEO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-MB2ISME7.js.map → restore-JL5QIH7H.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-VNBDRJ4Z.js.map → test-RJ4ZF35X.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-runs-GX5HTPSF.js.map → test-runs-L2M7WKH7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-H6SCWNMA.js.map → update-PYLVHMRD.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../cli/commands/validate.ts"],"sourcesContent":["import 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 { listAllFrontMatterWithBody } from \"../../core/store/item-store.js\";\nimport { getSettingsPath, resolvePmRoot } from \"../../core/store/paths.js\";\nimport { readSettings } from \"../../core/store/settings.js\";\nimport type { ValidateMetadataProfile, ValidateMetadataRequiredField } from \"../../types/index.js\";\nimport { extractReferencedPmItemIdsFromCommand } from \"./test.js\";\n\ntype ValidateCheckName = \"metadata\" | \"resolution\" | \"lifecycle\" | \"files\" | \"command_references\" | \"history_drift\";\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\";\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\nexport interface ValidateCommandOptions {\n checkMetadata?: boolean;\n checkResolution?: boolean;\n checkLifecycle?: boolean;\n checkStaleBlockers?: boolean;\n dependencyCycleSeverity?: string;\n checkFiles?: boolean;\n includePmInternals?: boolean;\n verboseFileLists?: boolean;\n verboseDiagnostics?: boolean;\n checkHistoryDrift?: boolean;\n checkCommandReferences?: boolean;\n scanMode?: string;\n metadataProfile?: string;\n fixHints?: boolean;\n}\n\nexport interface ValidateCheck {\n name: ValidateCheckName;\n status: ValidateStatus;\n details: Record<string, unknown>;\n}\n\nexport interface ValidateResult {\n ok: boolean;\n has_warnings: boolean;\n checks: ValidateCheck[];\n warnings: string[];\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\nfunction normalizeStatusForRegistry(status: string, statusRegistry: RuntimeStatusRegistry): string {\n return normalizeStatusInput(status, statusRegistry) ?? status;\n}\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\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\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 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\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\nfunction isMetadataFieldMissing(\n item: ItemWithBody,\n field: ValidateMetadataRequiredField,\n statusRegistry: RuntimeStatusRegistry,\n): boolean {\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\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\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\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\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 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 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 */\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\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 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 }\n return requested;\n}\n\nfunction buildMetadataCheck(\n items: ItemWithBody[],\n metadataPolicy: ValidateMetadataPolicy,\n statusRegistry: RuntimeStatusRegistry,\n verboseDiagnostics: boolean,\n): { check: ValidateCheck; warnings: string[] } {\n const missingByField = Object.fromEntries(\n SUPPORTED_METADATA_REQUIRED_FIELDS.map((field) => [field, [] as string[]]),\n ) as Record<ValidateMetadataRequiredField, string[]>;\n\n for (const item of items) {\n for (const field of SUPPORTED_METADATA_REQUIRED_FIELDS) {\n if (!isMetadataFieldMissing(item, field, statusRegistry)) {\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 // 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 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 };\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 return {\n check: {\n name: \"metadata\",\n status: warningTokens.length === 0 ? \"ok\" : \"warn\",\n details,\n },\n warnings: warningTokens,\n };\n}\n\nfunction buildResolutionCheck(\n items: ItemWithBody[],\n statusRegistry: RuntimeStatusRegistry,\n verboseDiagnostics: boolean,\n): { check: ValidateCheck; warnings: string[] } {\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\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 }\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 };\n}\n\nfunction buildLifecycleDependencyGraph(activeItems: ItemWithBody[]): 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 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 graph.set(item.id, [...edges].sort((left, right) => left.localeCompare(right)));\n }\n return graph;\n}\n\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\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\nfunction detectLifecycleDependencyCycles(activeItems: ItemWithBody[]): {\n cycle_count: number;\n cycle_item_ids: string[];\n cycle_sample_paths: string[];\n} {\n const graph = buildLifecycleDependencyGraph(activeItems);\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\nfunction buildLifecycleCheck(\n items: ItemWithBody[],\n includeStaleBlockers: boolean,\n dependencyCycleSeverity: ValidateDependencyCycleSeverity,\n statusRegistry: RuntimeStatusRegistry,\n lifecyclePatternPolicy: LifecyclePatternPolicy,\n verboseDiagnostics: boolean,\n): { check: ValidateCheck; warnings: string[] } {\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 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 }\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 staleBlockerRows.sort((left, right) => left.id.localeCompare(right.id));\n const dependencyCycleDiagnostics = detectLifecycleDependencyCycles(activeItems);\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\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\n return {\n check: {\n name: \"lifecycle\",\n status: dependencyCycleDiagnostics.cycle_count > 0 && dependencyCycleSeverity === \"error\"\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 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 };\n}\n\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[] }> {\n const linkedProjectPaths = new Set<string>();\n const missingLinkedPaths: string[] = [];\n\n for (const item of items) {\n const linkedArtifacts = [...(item.files ?? []), ...(item.docs ?? [])];\n for (const artifact of linkedArtifacts) {\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 try {\n const stats = await fs.stat(absolutePath);\n if (!stats.isFile()) {\n missingLinkedPaths.push(normalizedPath);\n }\n } catch {\n missingLinkedPaths.push(normalizedPath);\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 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\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 orphaned_paths_count: orphanedFiles.length,\n orphaned_paths_total: summarizedOrphaned.total,\n orphaned_paths: summarizedOrphaned.values,\n orphaned_paths_truncated: summarizedOrphaned.truncated,\n },\n },\n warnings,\n };\n}\n\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\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\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\nexport async function runValidate(options: ValidateCommandOptions, global: GlobalOptions): Promise<ValidateResult> {\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 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 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 if (requestedChecks.has(\"metadata\")) {\n record(buildMetadataCheck(items, metadataPolicy, statusRegistry, Boolean(options.verboseDiagnostics)));\n }\n if (requestedChecks.has(\"resolution\")) {\n record(buildResolutionCheck(items, statusRegistry, Boolean(options.verboseDiagnostics)));\n }\n if (requestedChecks.has(\"lifecycle\")) {\n record(\n buildLifecycleCheck(\n items,\n Boolean(options.checkStaleBlockers),\n dependencyCycleSeverity,\n statusRegistry,\n lifecyclePatternPolicy,\n Boolean(options.verboseDiagnostics),\n ),\n );\n }\n if (requestedChecks.has(\"files\")) {\n record(\n await buildFilesCheck(\n items,\n workspaceRoot,\n pmRoot,\n fileScanMode,\n Boolean(options.includePmInternals),\n Boolean(options.verboseFileLists),\n ),\n );\n }\n if (requestedChecks.has(\"command_references\")) {\n record(buildCommandReferencesCheck(items, settings.id_prefix, Boolean(options.verboseDiagnostics)));\n }\n if (requestedChecks.has(\"history_drift\")) {\n record(await buildHistoryDriftCheck(pmRoot, items, Boolean(options.verboseDiagnostics)));\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 generated_at: nowIso(),\n };\n}\n"],"names":["path"],"mappings":"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","debugId":"3791a091-6275-5b20-8c03-fdd6ad799a1f"}
|
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
import {
|
|
2
2
|
extractReferencedPmItemIdsFromCommand
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-B3N4TKNL.js";
|
|
4
4
|
import {
|
|
5
|
+
buildRemediationCommands,
|
|
5
6
|
scanHistoryDrift
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
12
|
-
import "./chunk-
|
|
7
|
+
} from "./chunk-TBQVUNVH.js";
|
|
8
|
+
import "./chunk-S3CV7JGJ.js";
|
|
9
|
+
import "./chunk-Y2AKE2HS.js";
|
|
10
|
+
import "./chunk-CJDQB2ED.js";
|
|
11
|
+
import "./chunk-3OH4DAEB.js";
|
|
12
|
+
import "./chunk-KK6YPGH3.js";
|
|
13
|
+
import "./chunk-OIQIXTNB.js";
|
|
13
14
|
import "./chunk-3HUE7XOF.js";
|
|
14
15
|
import {
|
|
15
16
|
listAllFrontMatterWithBody
|
|
16
|
-
} from "./chunk-
|
|
17
|
-
import "./chunk-
|
|
18
|
-
import "./chunk-CEFIVZPG.js";
|
|
17
|
+
} from "./chunk-XG7RJYHV.js";
|
|
18
|
+
import "./chunk-KA24HME7.js";
|
|
19
19
|
import {
|
|
20
20
|
normalizeStatusInput
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-HPH6X4ZZ.js";
|
|
22
22
|
import {
|
|
23
23
|
resolveItemTypeRegistry
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-4PJQSECJ.js";
|
|
25
25
|
import {
|
|
26
26
|
nowIso
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-RANZIID5.js";
|
|
28
28
|
import {
|
|
29
29
|
DEFAULT_VALIDATE_CLOSURE_LIKE_METADATA_FIELD_PATTERNS,
|
|
30
30
|
DEFAULT_VALIDATE_STALE_BLOCKER_REASON_PATTERNS,
|
|
@@ -38,7 +38,7 @@ import {
|
|
|
38
38
|
resolvePmRoot,
|
|
39
39
|
resolveRuntimeStatusRegistry,
|
|
40
40
|
toNonEmptyStringOrUndefined
|
|
41
|
-
} from "./chunk-
|
|
41
|
+
} from "./chunk-SRVKTWPR.js";
|
|
42
42
|
|
|
43
43
|
// dist/cli/commands/validate.js
|
|
44
44
|
import fs from "node:fs/promises";
|
|
@@ -49,7 +49,7 @@ import { promisify } from "node:util";
|
|
|
49
49
|
!(function() {
|
|
50
50
|
try {
|
|
51
51
|
var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
|
|
52
|
-
n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "
|
|
52
|
+
n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "776e2ca9-52d6-5274-9230-4d9b961456e5");
|
|
53
53
|
} catch (e2) {
|
|
54
54
|
}
|
|
55
55
|
})();
|
|
@@ -142,7 +142,7 @@ var METADATA_TRUNCATED_KEY_BY_FIELD = {
|
|
|
142
142
|
};
|
|
143
143
|
var GIT_LS_FILES_MAX_BUFFER = 32 * 1024 * 1024;
|
|
144
144
|
var FILE_LIST_SUMMARY_LIMIT = 40;
|
|
145
|
-
var DIAGNOSTIC_LIST_SUMMARY_LIMIT =
|
|
145
|
+
var DIAGNOSTIC_LIST_SUMMARY_LIMIT = 5;
|
|
146
146
|
var execFileAsync = promisify(execFile);
|
|
147
147
|
function normalizeRelativePath(value) {
|
|
148
148
|
return value.replaceAll("\\", "/").replace(/^\.\/+/, "").replace(/^\/+/, "");
|
|
@@ -489,6 +489,20 @@ function buildResolutionRemediationCommand(row) {
|
|
|
489
489
|
const fieldArguments = row.missing_fields.map((field) => `${RESOLUTION_REMEDIATION_FLAG_BY_FIELD[field]} "${RESOLUTION_REMEDIATION_PLACEHOLDER_BY_FIELD[field]}"`).join(" ");
|
|
490
490
|
return `pm update ${row.id} ${fieldArguments} --message "Backfill resolution metadata"`;
|
|
491
491
|
}
|
|
492
|
+
function attachValidateFixHints(check, checkWarnings) {
|
|
493
|
+
const existingResolutionHints = check.details?.missing_resolution_remediation_hints;
|
|
494
|
+
const aliasedResolution = Array.isArray(existingResolutionHints) && existingResolutionHints.length > 0;
|
|
495
|
+
const fixHints = aliasedResolution ? existingResolutionHints.filter((hint) => typeof hint === "string") : buildRemediationCommands(checkWarnings);
|
|
496
|
+
if (fixHints.length === 0) {
|
|
497
|
+
return;
|
|
498
|
+
}
|
|
499
|
+
const truncated = aliasedResolution && check.details?.missing_resolution_remediation_hints_truncated === true;
|
|
500
|
+
check.details = {
|
|
501
|
+
...check.details,
|
|
502
|
+
fix_hints: fixHints,
|
|
503
|
+
...truncated ? { fix_hints_truncated: true } : {}
|
|
504
|
+
};
|
|
505
|
+
}
|
|
492
506
|
function resolveRequestedChecks(options) {
|
|
493
507
|
const requested = /* @__PURE__ */ new Set();
|
|
494
508
|
if (options.checkMetadata) {
|
|
@@ -728,7 +742,7 @@ function detectLifecycleDependencyCycles(activeItems) {
|
|
|
728
742
|
cycle_sample_paths: cycleSamplePaths
|
|
729
743
|
};
|
|
730
744
|
}
|
|
731
|
-
function buildLifecycleCheck(items, includeStaleBlockers, dependencyCycleSeverity, statusRegistry, lifecyclePatternPolicy) {
|
|
745
|
+
function buildLifecycleCheck(items, includeStaleBlockers, dependencyCycleSeverity, statusRegistry, lifecyclePatternPolicy, verboseDiagnostics) {
|
|
732
746
|
const itemsById = new Map(items.map((item) => [item.id, item]));
|
|
733
747
|
const blockedStatuses = statusRegistry.blocked_statuses.size > 0 ? statusRegistry.blocked_statuses : /* @__PURE__ */ new Set(["blocked"]);
|
|
734
748
|
const activeItems = items.filter((item) => !isTerminalStatus(item.status, statusRegistry));
|
|
@@ -811,11 +825,12 @@ function buildLifecycleCheck(items, includeStaleBlockers, dependencyCycleSeverit
|
|
|
811
825
|
if (dependencyCycleDiagnostics.cycle_count > 0 && dependencyCycleSeverity !== "off") {
|
|
812
826
|
warnings.push(`${dependencyCycleSeverity === "error" ? "validate_lifecycle_dependency_cycles_error" : "validate_lifecycle_dependency_cycles"}:${dependencyCycleDiagnostics.cycle_count}`);
|
|
813
827
|
}
|
|
814
|
-
const
|
|
815
|
-
const
|
|
816
|
-
const
|
|
817
|
-
const
|
|
818
|
-
const
|
|
828
|
+
const diagnosticLimit = verboseDiagnostics ? Number.POSITIVE_INFINITY : DIAGNOSTIC_LIST_SUMMARY_LIMIT;
|
|
829
|
+
const summarizedClosureLikeRows = summarizeList(closureLikeRows.map((row) => `${row.id}:${row.fields.join(",")}`), diagnosticLimit);
|
|
830
|
+
const summarizedTerminalParentRows = summarizeList(terminalParentRows.map((row) => `${row.id}:${row.parent_id}:${row.parent_status}`), diagnosticLimit);
|
|
831
|
+
const summarizedStaleBlockerRows = summarizeList(staleBlockerRows.map((row) => `${row.id}:${row.status}:${row.reasons.join(",")}`), diagnosticLimit);
|
|
832
|
+
const summarizedDependencyCycleItemIds = summarizeList(dependencyCycleDiagnostics.cycle_item_ids, diagnosticLimit);
|
|
833
|
+
const summarizedDependencyCycleSamplePaths = summarizeList(dependencyCycleDiagnostics.cycle_sample_paths, diagnosticLimit);
|
|
819
834
|
return {
|
|
820
835
|
check: {
|
|
821
836
|
name: "lifecycle",
|
|
@@ -950,7 +965,7 @@ async function buildFilesCheck(items, workspaceRoot, pmRoot, fileScanMode, inclu
|
|
|
950
965
|
warnings
|
|
951
966
|
};
|
|
952
967
|
}
|
|
953
|
-
async function buildHistoryDriftCheck(pmRoot, items) {
|
|
968
|
+
async function buildHistoryDriftCheck(pmRoot, items, verboseDiagnostics) {
|
|
954
969
|
const { missingStreams, unreadableStreams, hashMismatches, chainMismatches, driftedItems } = await scanHistoryDrift(pmRoot, items);
|
|
955
970
|
const warnings = [];
|
|
956
971
|
if (missingStreams.length > 0) {
|
|
@@ -965,7 +980,8 @@ async function buildHistoryDriftCheck(pmRoot, items) {
|
|
|
965
980
|
if (chainMismatches.length > 0) {
|
|
966
981
|
warnings.push(`validate_history_drift_chain_mismatches:${chainMismatches.length}`);
|
|
967
982
|
}
|
|
968
|
-
const
|
|
983
|
+
const diagnosticLimit = verboseDiagnostics ? Number.POSITIVE_INFINITY : DIAGNOSTIC_LIST_SUMMARY_LIMIT;
|
|
984
|
+
const summarizedDrifted = summarizeList(driftedItems, diagnosticLimit);
|
|
969
985
|
return {
|
|
970
986
|
check: {
|
|
971
987
|
name: "history_drift",
|
|
@@ -991,7 +1007,7 @@ function summarizeCommandReferenceRow(ownerId, referencedId, command) {
|
|
|
991
1007
|
const commandPreview = normalizedCommand.length > 120 ? `${normalizedCommand.slice(0, 117)}...` : normalizedCommand;
|
|
992
1008
|
return `${ownerId}:${referencedId}:${commandPreview}`;
|
|
993
1009
|
}
|
|
994
|
-
function buildCommandReferencesCheck(items, idPrefix) {
|
|
1010
|
+
function buildCommandReferencesCheck(items, idPrefix, verboseDiagnostics) {
|
|
995
1011
|
const knownIds = new Set(items.map((item) => item.id.toLowerCase()));
|
|
996
1012
|
let linkedCommandsScanned = 0;
|
|
997
1013
|
let referencedPmIdCount = 0;
|
|
@@ -1019,9 +1035,10 @@ function buildCommandReferencesCheck(items, idPrefix) {
|
|
|
1019
1035
|
const uniqueStaleReferenceRows = [...new Set(staleReferenceRows)].sort((left, right) => left.localeCompare(right));
|
|
1020
1036
|
const stalePmIds = [...new Set(uniqueStaleReferenceRows.map((row) => row.split(":")[1] ?? ""))].filter((value) => value.length > 0).sort((left, right) => left.localeCompare(right));
|
|
1021
1037
|
const warnings = uniqueStaleReferenceRows.length > 0 ? [`validate_command_references_stale_pm_ids:${uniqueStaleReferenceRows.length}`] : [];
|
|
1022
|
-
const
|
|
1023
|
-
const
|
|
1024
|
-
const
|
|
1038
|
+
const diagnosticLimit = verboseDiagnostics ? Number.POSITIVE_INFINITY : DIAGNOSTIC_LIST_SUMMARY_LIMIT;
|
|
1039
|
+
const summarizedRows = summarizeList(uniqueStaleReferenceRows, diagnosticLimit);
|
|
1040
|
+
const summarizedStalePmIds = summarizeList(stalePmIds, diagnosticLimit);
|
|
1041
|
+
const summarizedReferencedPmIds = summarizeList([...referencedPmIds].sort((left, right) => left.localeCompare(right)), diagnosticLimit);
|
|
1025
1042
|
return {
|
|
1026
1043
|
check: {
|
|
1027
1044
|
name: "command_references",
|
|
@@ -1064,35 +1081,31 @@ async function runValidate(options, global2) {
|
|
|
1064
1081
|
const workspaceRoot = resolveWorkspaceRoot(pmRoot);
|
|
1065
1082
|
const checks = [];
|
|
1066
1083
|
const warnings = [...new Set(itemReadWarnings)];
|
|
1084
|
+
const fixHintsEnabled = options.fixHints === true;
|
|
1085
|
+
const record = (built) => {
|
|
1086
|
+
if (fixHintsEnabled) {
|
|
1087
|
+
attachValidateFixHints(built.check, built.warnings);
|
|
1088
|
+
}
|
|
1089
|
+
checks.push(built.check);
|
|
1090
|
+
warnings.push(...built.warnings);
|
|
1091
|
+
};
|
|
1067
1092
|
if (requestedChecks.has("metadata")) {
|
|
1068
|
-
|
|
1069
|
-
checks.push(metadataCheck.check);
|
|
1070
|
-
warnings.push(...metadataCheck.warnings);
|
|
1093
|
+
record(buildMetadataCheck(items, metadataPolicy, statusRegistry, Boolean(options.verboseDiagnostics)));
|
|
1071
1094
|
}
|
|
1072
1095
|
if (requestedChecks.has("resolution")) {
|
|
1073
|
-
|
|
1074
|
-
checks.push(resolutionCheck.check);
|
|
1075
|
-
warnings.push(...resolutionCheck.warnings);
|
|
1096
|
+
record(buildResolutionCheck(items, statusRegistry, Boolean(options.verboseDiagnostics)));
|
|
1076
1097
|
}
|
|
1077
1098
|
if (requestedChecks.has("lifecycle")) {
|
|
1078
|
-
|
|
1079
|
-
checks.push(lifecycleCheck.check);
|
|
1080
|
-
warnings.push(...lifecycleCheck.warnings);
|
|
1099
|
+
record(buildLifecycleCheck(items, Boolean(options.checkStaleBlockers), dependencyCycleSeverity, statusRegistry, lifecyclePatternPolicy, Boolean(options.verboseDiagnostics)));
|
|
1081
1100
|
}
|
|
1082
1101
|
if (requestedChecks.has("files")) {
|
|
1083
|
-
|
|
1084
|
-
checks.push(filesCheck.check);
|
|
1085
|
-
warnings.push(...filesCheck.warnings);
|
|
1102
|
+
record(await buildFilesCheck(items, workspaceRoot, pmRoot, fileScanMode, Boolean(options.includePmInternals), Boolean(options.verboseFileLists)));
|
|
1086
1103
|
}
|
|
1087
1104
|
if (requestedChecks.has("command_references")) {
|
|
1088
|
-
|
|
1089
|
-
checks.push(commandReferencesCheck.check);
|
|
1090
|
-
warnings.push(...commandReferencesCheck.warnings);
|
|
1105
|
+
record(buildCommandReferencesCheck(items, settings.id_prefix, Boolean(options.verboseDiagnostics)));
|
|
1091
1106
|
}
|
|
1092
1107
|
if (requestedChecks.has("history_drift")) {
|
|
1093
|
-
|
|
1094
|
-
checks.push(historyDriftCheck.check);
|
|
1095
|
-
warnings.push(...historyDriftCheck.warnings);
|
|
1108
|
+
record(await buildHistoryDriftCheck(pmRoot, items, Boolean(options.verboseDiagnostics)));
|
|
1096
1109
|
}
|
|
1097
1110
|
const normalizedWarnings = [...new Set(warnings)].sort((left, right) => left.localeCompare(right));
|
|
1098
1111
|
const hasErrors = checks.some((check) => check.status === "error");
|
|
@@ -1107,4 +1120,4 @@ async function runValidate(options, global2) {
|
|
|
1107
1120
|
export {
|
|
1108
1121
|
runValidate
|
|
1109
1122
|
};
|
|
1110
|
-
//# sourceMappingURL=validate-
|
|
1123
|
+
//# sourceMappingURL=validate-ZFVWPEEN.js.map
|