@unbrained/pm-cli 2026.6.8 → 2026.6.10
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 +74 -11
- package/dist/cli/bootstrap-args.js +4 -2
- package/dist/cli/bootstrap-args.js.map +1 -1
- package/dist/cli/commands/aggregate.d.ts +7 -0
- package/dist/cli/commands/aggregate.js +53 -12
- package/dist/cli/commands/aggregate.js.map +1 -1
- package/dist/cli/commands/close.d.ts +1 -0
- package/dist/cli/commands/close.js +106 -3
- package/dist/cli/commands/close.js.map +1 -1
- package/dist/cli/commands/completion.js +20 -7
- package/dist/cli/commands/completion.js.map +1 -1
- package/dist/cli/commands/context.d.ts +9 -0
- package/dist/cli/commands/context.js +149 -20
- package/dist/cli/commands/context.js.map +1 -1
- package/dist/cli/commands/create.d.ts +1 -0
- package/dist/cli/commands/create.js +5 -3
- package/dist/cli/commands/create.js.map +1 -1
- package/dist/cli/commands/extension.js +4 -2
- package/dist/cli/commands/extension.js.map +1 -1
- package/dist/cli/commands/health.js +44 -6
- package/dist/cli/commands/health.js.map +1 -1
- package/dist/cli/commands/history.js +6 -5
- package/dist/cli/commands/history.js.map +1 -1
- package/dist/cli/commands/linked-test-parsers.d.ts +1 -0
- package/dist/cli/commands/linked-test-parsers.js +289 -2
- package/dist/cli/commands/linked-test-parsers.js.map +1 -1
- package/dist/cli/commands/reindex.d.ts +1 -0
- package/dist/cli/commands/reindex.js +33 -4
- package/dist/cli/commands/reindex.js.map +1 -1
- package/dist/cli/commands/test.d.ts +6 -0
- package/dist/cli/commands/test.js +46 -5
- package/dist/cli/commands/test.js.map +1 -1
- package/dist/cli/extension-command-help.d.ts +1 -0
- package/dist/cli/extension-command-help.js +42 -2
- package/dist/cli/extension-command-help.js.map +1 -1
- package/dist/cli/extension-command-options.d.ts +2 -0
- package/dist/cli/extension-command-options.js +89 -17
- package/dist/cli/extension-command-options.js.map +1 -1
- package/dist/cli/main.js +26 -26
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/register-list-query.js +3 -2
- package/dist/cli/register-list-query.js.map +1 -1
- package/dist/cli/register-mutation.js +4 -2
- package/dist/cli/register-mutation.js.map +1 -1
- package/dist/cli/register-operations.js +15 -6
- package/dist/cli/register-operations.js.map +1 -1
- package/dist/cli/registration-helpers.js +9 -2
- package/dist/cli/registration-helpers.js.map +1 -1
- package/dist/cli-bundle/chunks/activity-5QLX6DHN.js +16 -0
- package/dist/cli-bundle/chunks/{activity-Q7XMIZIH.js → activity-W6TS5F2L.js} +11 -11
- package/dist/cli-bundle/chunks/{aggregate-GBSHSXOB.js → aggregate-NNJLKGEK.js} +64 -24
- package/dist/cli-bundle/chunks/aggregate-NNJLKGEK.js.map +7 -0
- package/dist/cli-bundle/chunks/{aggregate-HKQJZUBG.js → aggregate-UK2WJ4Z3.js} +65 -25
- package/dist/cli-bundle/chunks/aggregate-UK2WJ4Z3.js.map +1 -0
- package/dist/cli-bundle/chunks/{append-3RFOU7P5.js → append-7BS36Z2L.js} +8 -8
- package/dist/cli-bundle/chunks/{append-OM74OJVT.js → append-DHGTLUZW.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-SDLEYY6A.js → chunk-2MKBPWMK.js} +6 -8
- package/dist/cli-bundle/chunks/{chunk-SDLEYY6A.js.map → chunk-2MKBPWMK.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-Z2HXAFFH.js → chunk-344GDQTH.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-AEMKH5WQ.js → chunk-3VTWCBXL.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-XLSQ3QLT.js → chunk-4CYHWHZU.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-JS47EKLP.js → chunk-4H2NDEGJ.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-QF4OPBAG.js → chunk-5HH6QRH5.js} +9 -9
- package/dist/cli-bundle/chunks/{chunk-5NVJA7IW.js → chunk-5OMABP7I.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-YEFOCDIK.js → chunk-6ADVKPVV.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-SM3RMWGO.js → chunk-6KQS23TX.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-ETZZU5QF.js → chunk-6N46IM44.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-EPWT7BEA.js → chunk-6OSG3EMX.js} +157 -12
- package/dist/cli-bundle/chunks/chunk-6OSG3EMX.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-5WO2VKFA.js → chunk-73PSHEMT.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-J4DKAGTM.js → chunk-7DUVDW7C.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-2BYKYPWY.js → chunk-7GYMMDDW.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-QFVASU44.js → chunk-7TW64BS5.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-VXBUXLVD.js → chunk-A6XVYNQJ.js} +13 -6
- package/dist/cli-bundle/chunks/chunk-A6XVYNQJ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-KP4KIUQT.js → chunk-ANVZCNL5.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-HOA3GMB6.js → chunk-BE5G7HEL.js} +14 -8
- package/dist/cli-bundle/chunks/chunk-BE5G7HEL.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-QWNUDGFQ.js → chunk-CMEHZD6G.js} +163 -11
- package/dist/cli-bundle/chunks/chunk-CMEHZD6G.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-7NQIY7Z6.js → chunk-CTW7QAHM.js} +6 -5
- package/dist/cli-bundle/chunks/chunk-CTW7QAHM.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-UEXNNF3K.js → chunk-D6JZBUZ6.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-F33AQIB4.js → chunk-DEYNERFX.js} +19 -7
- package/dist/cli-bundle/chunks/chunk-DEYNERFX.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-R4XIE7NQ.js → chunk-DMDEC4QP.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-KN4WSESY.js → chunk-DTRIVUTN.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-KS2U7BZ3.js → chunk-EAQLLID6.js} +16 -6
- package/dist/cli-bundle/chunks/chunk-EAQLLID6.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-HP35AVFS.js → chunk-EIS32UA4.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-F2PVV7IX.js +528 -0
- package/dist/cli-bundle/chunks/chunk-F2PVV7IX.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-DV27WDA7.js → chunk-GF5XIBUH.js} +70 -9
- package/dist/cli-bundle/chunks/chunk-GF5XIBUH.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-BFJPMUF5.js → chunk-GP6SHEAI.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-URJEZOLB.js → chunk-GRHPU6EM.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-K62SNVVE.js → chunk-I2FM2SMO.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-F33VC5EX.js → chunk-IEQ3N7WP.js} +12 -5
- package/dist/cli-bundle/chunks/chunk-IEQ3N7WP.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-AXBUHLW7.js → chunk-K45NAJV2.js} +9 -9
- package/dist/cli-bundle/chunks/{chunk-NLVCMVC7.js → chunk-K7SXBA75.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-OVSSE2JP.js → chunk-KHBRV5JU.js} +14 -12
- package/dist/cli-bundle/chunks/chunk-KHBRV5JU.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-D7WK2PKB.js → chunk-KMMUDSSB.js} +112 -7
- package/dist/cli-bundle/chunks/chunk-KMMUDSSB.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-ALSRBNYB.js → chunk-KRZQGRVL.js} +14 -7
- package/dist/cli-bundle/chunks/chunk-KRZQGRVL.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-PQDH3S54.js → chunk-LUJQJR7G.js} +71 -69
- package/dist/cli-bundle/chunks/{chunk-PQDH3S54.js.map → chunk-LUJQJR7G.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-NDSMKB2I.js → chunk-LYL32FT6.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-ODN53S6H.js → chunk-MF6KSSMF.js} +11 -14
- package/dist/cli-bundle/chunks/chunk-MF6KSSMF.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-Z55JACL2.js → chunk-O64EYNHF.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-3TXWDGPU.js → chunk-OQGJSCZZ.js} +522 -37
- package/dist/cli-bundle/chunks/chunk-OQGJSCZZ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-FO2TYSQZ.js → chunk-OROMGSBP.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-3E3MDBTB.js → chunk-OSGWBWLK.js} +76 -74
- package/dist/cli-bundle/chunks/{chunk-3E3MDBTB.js.map → chunk-OSGWBWLK.js.map} +3 -3
- package/dist/cli-bundle/chunks/{chunk-7WXGR44E.js → chunk-OVNSQHDG.js} +19 -7
- package/dist/cli-bundle/chunks/chunk-OVNSQHDG.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-XZS4MV37.js → chunk-PYULT32I.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-M7UBTVFT.js → chunk-Q6PSD5DZ.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-QQPZYP73.js → chunk-QGIWURY3.js} +12 -12
- package/dist/cli-bundle/chunks/{chunk-KCGMABHM.js → chunk-QJ2OIEOC.js} +68 -7
- package/dist/cli-bundle/chunks/chunk-QJ2OIEOC.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-XEKZCBCS.js → chunk-SNASEDXB.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-4WYBLB6J.js → chunk-T6QLB34N.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-NGEEXR2R.js → chunk-TALBUVWF.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-FGRJZVXD.js → chunk-TV6FZGVK.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-MSH23UWO.js → chunk-TXWMLDMG.js} +13 -7
- package/dist/cli-bundle/chunks/chunk-TXWMLDMG.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-TXKENAQP.js → chunk-TZLGCTA5.js} +5 -4
- package/dist/cli-bundle/chunks/chunk-TZLGCTA5.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-4TI3532H.js → chunk-UDWUDUJI.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-N4SQZ7L3.js → chunk-UMWF6ZAS.js} +12 -5
- package/dist/cli-bundle/chunks/chunk-UMWF6ZAS.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-BKQMJXWY.js → chunk-UNH3KSHG.js} +4 -6
- package/dist/cli-bundle/chunks/{chunk-BKQMJXWY.js.map → chunk-UNH3KSHG.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-CBJXWXI5.js → chunk-UY26RIBR.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-TBLBEOEX.js → chunk-VSS3CSTF.js} +9 -9
- package/dist/cli-bundle/chunks/{chunk-2YPVCD7T.js → chunk-WBU257Z4.js} +13 -11
- package/dist/cli-bundle/chunks/chunk-WBU257Z4.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-YJAKN2N2.js → chunk-WNMRICXH.js} +489 -32
- package/dist/cli-bundle/chunks/chunk-WNMRICXH.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-WSWOQP3Z.js +518 -0
- package/dist/cli-bundle/chunks/chunk-WSWOQP3Z.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-OTY2YEH5.js → chunk-WWEFBBVF.js} +12 -12
- package/dist/cli-bundle/chunks/{chunk-UMMJAJB2.js → chunk-X3IPJU2O.js} +9 -9
- package/dist/cli-bundle/chunks/{chunk-KBKJVXUS.js → chunk-X5YC5DZM.js} +111 -6
- package/dist/cli-bundle/chunks/chunk-X5YC5DZM.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-KVXIQDJG.js → chunk-XH6RA5A5.js} +15 -15
- package/dist/cli-bundle/chunks/chunk-XH6RA5A5.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-2HMD3JM2.js → chunk-XRE4CTNP.js} +11 -14
- package/dist/cli-bundle/chunks/chunk-XRE4CTNP.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-RISLL7XH.js → chunk-XSCGU4WT.js} +15 -5
- package/dist/cli-bundle/chunks/{chunk-RISLL7XH.js.map → chunk-XSCGU4WT.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-L3LYL3ID.js → chunk-ZH7C7ZVX.js} +14 -14
- package/dist/cli-bundle/chunks/chunk-ZH7C7ZVX.js.map +7 -0
- package/dist/cli-bundle/chunks/{claim-NHBIIBOW.js → claim-3TY5LE54.js} +10 -10
- package/dist/cli-bundle/chunks/{claim-RNEBQCOO.js → claim-LM4YY6QQ.js} +10 -10
- package/dist/cli-bundle/chunks/{close-ZMXL2WDS.js → close-CSD4LEMT.js} +8 -8
- package/dist/cli-bundle/chunks/close-SIQCDOBR.js +13 -0
- package/dist/cli-bundle/chunks/{close-many-CDPQGQUB.js → close-many-B5SHDX6W.js} +17 -18
- package/dist/cli-bundle/chunks/{close-many-CDPQGQUB.js.map → close-many-B5SHDX6W.js.map} +1 -1
- package/dist/cli-bundle/chunks/{close-many-IQV5C2SI.js → close-many-WRXB5KVY.js} +15 -16
- package/dist/cli-bundle/chunks/{close-many-IQV5C2SI.js.map → close-many-WRXB5KVY.js.map} +1 -1
- package/dist/cli-bundle/chunks/{comments-J5Q4IJPH.js → comments-A5ALOYTG.js} +10 -10
- package/dist/cli-bundle/chunks/{comments-EFVBHWPT.js → comments-BDDEK3VW.js} +10 -10
- package/dist/cli-bundle/chunks/{config-72253M2O.js → config-W2NHDNQT.js} +8 -8
- package/dist/cli-bundle/chunks/{config-VFYA6BMI.js → config-YUYBMJOW.js} +8 -8
- package/dist/cli-bundle/chunks/{context-AVLO4IFH.js → context-LRJ74NSU.js} +147 -36
- package/dist/cli-bundle/chunks/context-LRJ74NSU.js.map +7 -0
- package/dist/cli-bundle/chunks/{context-WMSI2D65.js → context-R2QLOJCK.js} +148 -37
- package/dist/cli-bundle/chunks/context-R2QLOJCK.js.map +1 -0
- package/dist/cli-bundle/chunks/{contracts-D4BN3VSQ.js → contracts-47X7RYUF.js} +4 -4
- package/dist/cli-bundle/chunks/{contracts-RGPOBLPL.js → contracts-HJHR4NCD.js} +4 -4
- package/dist/cli-bundle/chunks/{copy-H6TXHK7S.js → copy-B7HFOWFB.js} +7 -7
- package/dist/cli-bundle/chunks/{copy-WXE3OOLZ.js → copy-P4UVYZ7M.js} +7 -7
- package/dist/cli-bundle/chunks/{create-PUAIJEZ7.js → create-5ERJF64D.js} +13 -13
- package/dist/cli-bundle/chunks/create-TXNRPS4K.js +27 -0
- package/dist/cli-bundle/chunks/{delete-WBME6WG5.js → delete-LX3LGBCH.js} +7 -7
- package/dist/cli-bundle/chunks/{delete-PKR2JHLH.js → delete-S3WVK6LP.js} +7 -7
- package/dist/cli-bundle/chunks/{deps-4BQEDV4L.js → deps-GWSNH7OZ.js} +7 -7
- package/dist/cli-bundle/chunks/{deps-KWHQRO75.js → deps-YSM4LZQD.js} +7 -7
- package/dist/cli-bundle/chunks/{docs-SCNBUGSV.js → docs-7RYFBHQD.js} +9 -9
- package/dist/cli-bundle/chunks/{docs-364GT3ZR.js → docs-TG6JMVMY.js} +9 -9
- package/dist/cli-bundle/chunks/{extension-KK2UPXJD.js → extension-R3LUKMX7.js} +5 -5
- package/dist/cli-bundle/chunks/{extension-CRE7JM47.js → extension-VNMRKIHI.js} +5 -5
- package/dist/cli-bundle/chunks/{files-66EHM5ZR.js → files-KAKU57OT.js} +9 -9
- package/dist/cli-bundle/chunks/{files-3GESQAWL.js → files-QB3EYPMO.js} +9 -9
- package/dist/cli-bundle/chunks/{gc-MOQDND5J.js → gc-B747VM4M.js} +3 -3
- package/dist/cli-bundle/chunks/{gc-D5IWOKQH.js → gc-KNUPLPSW.js} +3 -3
- package/dist/cli-bundle/chunks/{get-7J2ZCBV5.js → get-GMGLIQ5I.js} +11 -11
- package/dist/cli-bundle/chunks/{get-WXSLXV3K.js → get-SBL6NHYQ.js} +11 -11
- package/dist/cli-bundle/chunks/{health-B6AEM7BV.js → health-IG43Z4KL.js} +47 -19
- package/dist/cli-bundle/chunks/health-IG43Z4KL.js.map +1 -0
- package/dist/cli-bundle/chunks/{health-YMZGOMVX.js → health-WWZJ5KJS.js} +46 -18
- package/dist/cli-bundle/chunks/health-WWZJ5KJS.js.map +7 -0
- package/dist/cli-bundle/chunks/history-6UKSZTRT.js +20 -0
- package/dist/cli-bundle/chunks/{history-TJTO5GCR.js → history-XCWRXBXC.js} +10 -10
- package/dist/cli-bundle/chunks/{history-compact-CKNN6UKW.js → history-compact-IDH7E7VN.js} +11 -11
- package/dist/cli-bundle/chunks/{history-compact-N2Q7IR3T.js → history-compact-KICKUCR7.js} +11 -11
- package/dist/cli-bundle/chunks/history-redact-HKYBTK6X.js +19 -0
- package/dist/cli-bundle/chunks/{history-redact-JUXUOH54.js → history-redact-JJWH3QWK.js} +11 -11
- package/dist/cli-bundle/chunks/{history-repair-TDBBSRVK.js → history-repair-7HWBZKXN.js} +11 -11
- package/dist/cli-bundle/chunks/{history-repair-CCCPBNTF.js → history-repair-N5HXKJOI.js} +11 -11
- package/dist/cli-bundle/chunks/init-27JLDUO2.js +17 -0
- package/dist/cli-bundle/chunks/{init-6ZPKD3YN.js → init-OQA3TWIS.js} +9 -9
- package/dist/cli-bundle/chunks/{learnings-WYNTYQ5T.js → learnings-L7VQUSVI.js} +10 -10
- package/dist/cli-bundle/chunks/{learnings-U7U2FNIO.js → learnings-Z4GAIZQ5.js} +10 -10
- package/dist/cli-bundle/chunks/list-6U3CJVXS.js +19 -0
- package/dist/cli-bundle/chunks/{list-JGP7ODML.js → list-W5ROBC5U.js} +10 -11
- package/dist/cli-bundle/chunks/{notes-P25YVTEG.js → notes-JJDOEDFK.js} +10 -10
- package/dist/cli-bundle/chunks/{notes-QIF6A7XS.js → notes-SDCK7BEN.js} +10 -10
- package/dist/cli-bundle/chunks/{plan-RACB5PI6.js → plan-H5HYHMBB.js} +13 -13
- package/dist/cli-bundle/chunks/{plan-SSBJFWXA.js → plan-W2B5RYR3.js} +13 -13
- package/dist/cli-bundle/chunks/{register-list-query-GQAEIG4K.js → register-list-query-QGRFMDWA.js} +20 -20
- package/dist/cli-bundle/chunks/register-list-query-QGRFMDWA.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-list-query-5IXDPUZ6.js → register-list-query-V4S23735.js} +21 -21
- package/dist/cli-bundle/chunks/register-list-query-V4S23735.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-mutation-FAS4YG63.js → register-mutation-I57PLUHA.js} +36 -35
- package/dist/cli-bundle/chunks/register-mutation-I57PLUHA.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-mutation-YZCUILGO.js → register-mutation-ZPZNJXSA.js} +35 -34
- package/dist/cli-bundle/chunks/register-mutation-ZPZNJXSA.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-operations-S2BOLUPF.js → register-operations-KAMLXAF5.js} +42 -37
- package/dist/cli-bundle/chunks/register-operations-KAMLXAF5.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-operations-IBYWNJN5.js → register-operations-YEN4YEZ2.js} +41 -36
- package/dist/cli-bundle/chunks/register-operations-YEN4YEZ2.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-setup-JRZ4UMWZ.js → register-setup-BZ3TNE3G.js} +15 -15
- package/dist/cli-bundle/chunks/{register-setup-ABA2JPWO.js → register-setup-WLFL3OUF.js} +15 -15
- package/dist/cli-bundle/chunks/restore-GNI2W5CN.js +17 -0
- package/dist/cli-bundle/chunks/{restore-K72ZNPEP.js → restore-RGFSPG4K.js} +11 -11
- package/dist/cli-bundle/chunks/{schema-UL4B2JX5.js → schema-CCDU3RLC.js} +8 -8
- package/dist/cli-bundle/chunks/{schema-3VKRDBLC.js → schema-KZASL323.js} +8 -8
- package/dist/cli-bundle/chunks/{search-632WJ7GO.js → search-7KSOLI2E.js} +10 -11
- package/dist/cli-bundle/chunks/{search-632WJ7GO.js.map → search-7KSOLI2E.js.map} +1 -1
- package/dist/cli-bundle/chunks/{search-EQDHSE4G.js → search-DTL7CO22.js} +12 -13
- package/dist/cli-bundle/chunks/{search-EQDHSE4G.js.map → search-DTL7CO22.js.map} +1 -1
- package/dist/cli-bundle/chunks/{stats-WLJ3XBF5.js → stats-IOXQMGI6.js} +7 -7
- package/dist/cli-bundle/chunks/{stats-O4UTMJMC.js → stats-QNV7B2CE.js} +7 -7
- package/dist/cli-bundle/chunks/{telemetry-EUVHFSQU.js → telemetry-IV5C6JOM.js} +4 -4
- package/dist/cli-bundle/chunks/{telemetry-NRVWX25E.js → telemetry-NHR5RFXT.js} +4 -4
- package/dist/cli-bundle/chunks/test-4Z37CXW4.js +32 -0
- package/dist/cli-bundle/chunks/{test-GXUBQNUC.js → test-PIL2CEEB.js} +14 -14
- package/dist/cli-bundle/chunks/{test-all-UTFXC7S2.js → test-all-GRLYHBNP.js} +14 -14
- package/dist/cli-bundle/chunks/{test-all-XM6OKI3L.js → test-all-MFN4MYCV.js} +14 -14
- package/dist/cli-bundle/chunks/{test-runs-IK6E2HNX.js → test-runs-7LRFWWCA.js} +5 -5
- package/dist/cli-bundle/chunks/{test-runs-7FHCPEA3.js → test-runs-7WCSC3TY.js} +5 -5
- package/dist/cli-bundle/chunks/update-I4G34LKJ.js +21 -0
- package/dist/cli-bundle/chunks/{update-U4B4OMHZ.js → update-VI5DBZ3G.js} +15 -15
- package/dist/cli-bundle/chunks/{update-many-5KD33MKY.js → update-many-LOTAYUTN.js} +22 -23
- package/dist/cli-bundle/chunks/{update-many-5KD33MKY.js.map → update-many-LOTAYUTN.js.map} +1 -1
- package/dist/cli-bundle/chunks/{update-many-N3YTM7K4.js → update-many-UYMTVF42.js} +24 -25
- package/dist/cli-bundle/chunks/{update-many-N3YTM7K4.js.map → update-many-UYMTVF42.js.map} +1 -1
- package/dist/cli-bundle/chunks/{upgrade-FFXGO43H.js → upgrade-LT2MLLPS.js} +5 -5
- package/dist/cli-bundle/chunks/{upgrade-5SRFLUNW.js → upgrade-ZZSC7CLV.js} +5 -5
- package/dist/cli-bundle/chunks/{validate-T3LPWSZG.js → validate-3XRORNMP.js} +16 -16
- package/dist/cli-bundle/chunks/{validate-CRWXZILW.js → validate-IQIQSKUX.js} +16 -16
- package/dist/cli-bundle/main.js +157 -62
- package/dist/cli-bundle/main.js.map +2 -2
- package/dist/core/diagnostics/remediation.js +12 -2
- package/dist/core/diagnostics/remediation.js.map +1 -1
- package/dist/core/extensions/extension-policy.d.ts +14 -1
- package/dist/core/extensions/extension-policy.js +38 -3
- package/dist/core/extensions/extension-policy.js.map +1 -1
- package/dist/core/extensions/extension-types.d.ts +99 -2
- package/dist/core/extensions/extension-types.js +28 -2
- package/dist/core/extensions/extension-types.js.map +1 -1
- package/dist/core/extensions/flag-value-types.d.ts +29 -0
- package/dist/core/extensions/flag-value-types.js +78 -0
- package/dist/core/extensions/flag-value-types.js.map +1 -0
- package/dist/core/extensions/item-field-types.d.ts +22 -0
- package/dist/core/extensions/item-field-types.js +43 -0
- package/dist/core/extensions/item-field-types.js.map +1 -0
- package/dist/core/extensions/item-fields.js +4 -11
- package/dist/core/extensions/item-fields.js.map +1 -1
- package/dist/core/extensions/loader.d.ts +16 -1
- package/dist/core/extensions/loader.js +202 -18
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/history/replay.d.ts +1 -1
- package/dist/core/history/replay.js +13 -4
- package/dist/core/history/replay.js.map +1 -1
- package/dist/core/output/mutation-projection.d.ts +2 -0
- package/dist/core/output/mutation-projection.js +9 -2
- package/dist/core/output/mutation-projection.js.map +1 -1
- package/dist/core/output/output.d.ts +2 -0
- package/dist/core/output/output.js +7 -3
- package/dist/core/output/output.js.map +1 -1
- package/dist/core/packages/manifest.d.ts +1 -1
- package/dist/core/packages/manifest.js +12 -2
- package/dist/core/packages/manifest.js.map +1 -1
- package/dist/core/shared/command-types.d.ts +1 -0
- package/dist/core/shared/command-types.js +2 -2
- package/dist/core/shared/command-types.js.map +1 -1
- package/dist/core/shared/constants.js +7 -4
- package/dist/core/shared/constants.js.map +1 -1
- package/dist/core/store/item-store.d.ts +1 -1
- package/dist/core/store/item-store.js +3 -3
- package/dist/core/store/item-store.js.map +1 -1
- package/dist/core/store/settings-read-cache.d.ts +15 -0
- package/dist/core/store/settings-read-cache.js +72 -0
- package/dist/core/store/settings-read-cache.js.map +1 -0
- package/dist/core/store/settings-validator.d.ts +4 -1
- package/dist/core/store/settings-validator.js +14 -2
- package/dist/core/store/settings-validator.js.map +1 -1
- package/dist/core/store/settings.js +166 -16
- package/dist/core/store/settings.js.map +1 -1
- package/dist/core/telemetry/runtime.d.ts +1 -0
- package/dist/core/telemetry/runtime.js +3 -3
- package/dist/core/telemetry/runtime.js.map +1 -1
- package/dist/core/test/run-selectors.d.ts +27 -0
- package/dist/core/test/run-selectors.js +110 -0
- package/dist/core/test/run-selectors.js.map +1 -0
- package/dist/mcp/server.js +105 -40
- package/dist/mcp/server.js.map +1 -1
- package/dist/sdk/cli-contracts/commander-mutation-options.js +3 -2
- package/dist/sdk/cli-contracts/commander-mutation-options.js.map +1 -1
- package/dist/sdk/cli-contracts/tool-option-contracts.js +3 -2
- package/dist/sdk/cli-contracts/tool-option-contracts.js.map +1 -1
- package/dist/sdk/cli-contracts/tool-parameter-tables.js +29 -2
- package/dist/sdk/cli-contracts/tool-parameter-tables.js.map +1 -1
- package/dist/sdk/cli-contracts.js +37 -5
- package/dist/sdk/cli-contracts.js.map +1 -1
- package/dist/sdk/index.d.ts +7 -2
- package/dist/sdk/index.js +3 -3
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/runtime.d.ts +6 -0
- package/dist/sdk/runtime.js +51 -3
- package/dist/sdk/runtime.js.map +1 -1
- package/dist/sdk/testing.d.ts +55 -1
- package/dist/sdk/testing.js +92 -2
- package/dist/sdk/testing.js.map +1 -1
- package/dist/types.d.ts +4 -1
- package/dist/types.js +4 -2
- package/dist/types.js.map +1 -1
- package/docs/AGENT_GUIDE.md +7 -1
- package/docs/ARCHITECTURE.md +7 -0
- package/docs/COMMANDS.md +37 -3
- package/docs/CONFIGURATION.md +1 -1
- package/docs/EXTENSIONS.md +59 -53
- package/docs/SDK.md +104 -0
- package/docs/TESTING.md +60 -0
- package/docs/schemas/extension-manifest.schema.json +120 -0
- package/package.json +2 -2
- package/packages/pm-beads/extensions/beads/manifest.json +10 -0
- package/packages/pm-calendar/extensions/calendar/manifest.json +10 -0
- package/packages/pm-command-kit/README.md +72 -0
- package/packages/pm-command-kit/extensions/command-kit/index.js +181 -0
- package/packages/pm-command-kit/extensions/command-kit/index.ts +176 -0
- package/packages/pm-command-kit/extensions/command-kit/manifest.json +22 -0
- package/packages/pm-command-kit/package.json +53 -0
- package/packages/pm-governance-audit/extensions/governance-audit/manifest.json +10 -0
- package/packages/pm-guide-shell/extensions/guide-shell/manifest.json +10 -0
- package/packages/pm-lifecycle-hooks/extensions/lifecycle-hooks/manifest.json +10 -0
- package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/manifest.json +10 -0
- package/packages/pm-search-advanced/extensions/search-advanced/index.js +6 -0
- package/packages/pm-search-advanced/extensions/search-advanced/index.ts +6 -0
- package/packages/pm-search-advanced/extensions/search-advanced/manifest.json +10 -0
- package/packages/pm-search-advanced/extensions/search-advanced/runtime.js +1 -0
- package/packages/pm-search-advanced/extensions/search-advanced/runtime.ts +1 -0
- package/packages/pm-templates/extensions/templates/manifest.json +10 -0
- package/packages/pm-todos/extensions/todos/manifest.json +10 -0
- package/dist/cli-bundle/chunks/activity-A3QKFSSF.js +0 -16
- package/dist/cli-bundle/chunks/aggregate-GBSHSXOB.js.map +0 -7
- package/dist/cli-bundle/chunks/aggregate-HKQJZUBG.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-2HMD3JM2.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-2YPVCD7T.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-3TXWDGPU.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-7NQIY7Z6.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-7WXGR44E.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-ALSRBNYB.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-D7WK2PKB.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-DV27WDA7.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-EAOG77HM.js +0 -56
- package/dist/cli-bundle/chunks/chunk-EAOG77HM.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-EPWT7BEA.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-F33AQIB4.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-F33VC5EX.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-HOA3GMB6.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-KBKJVXUS.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-KCGMABHM.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-KS2U7BZ3.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-KVXIQDJG.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-L3LYL3ID.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-MSH23UWO.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-N4SQZ7L3.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-NUKHZZNM.js +0 -252
- package/dist/cli-bundle/chunks/chunk-NUKHZZNM.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-ODN53S6H.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-OVSSE2JP.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-QWNUDGFQ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-TXKENAQP.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-VXBUXLVD.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-XNGMIVQY.js +0 -242
- package/dist/cli-bundle/chunks/chunk-XNGMIVQY.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-XSLQSXAH.js +0 -53
- package/dist/cli-bundle/chunks/chunk-XSLQSXAH.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-YJAKN2N2.js.map +0 -1
- package/dist/cli-bundle/chunks/close-UNTFXVM3.js +0 -13
- package/dist/cli-bundle/chunks/context-AVLO4IFH.js.map +0 -7
- package/dist/cli-bundle/chunks/context-WMSI2D65.js.map +0 -1
- package/dist/cli-bundle/chunks/create-EZWAMUKR.js +0 -27
- package/dist/cli-bundle/chunks/health-B6AEM7BV.js.map +0 -1
- package/dist/cli-bundle/chunks/health-YMZGOMVX.js.map +0 -7
- package/dist/cli-bundle/chunks/history-ZERISU2L.js +0 -20
- package/dist/cli-bundle/chunks/history-redact-GODBYT5A.js +0 -19
- package/dist/cli-bundle/chunks/init-CBZHXBR3.js +0 -17
- package/dist/cli-bundle/chunks/list-7MTPPZHC.js +0 -20
- package/dist/cli-bundle/chunks/register-list-query-5IXDPUZ6.js.map +0 -1
- package/dist/cli-bundle/chunks/register-list-query-GQAEIG4K.js.map +0 -7
- package/dist/cli-bundle/chunks/register-mutation-FAS4YG63.js.map +0 -1
- package/dist/cli-bundle/chunks/register-mutation-YZCUILGO.js.map +0 -7
- package/dist/cli-bundle/chunks/register-operations-IBYWNJN5.js.map +0 -7
- package/dist/cli-bundle/chunks/register-operations-S2BOLUPF.js.map +0 -1
- package/dist/cli-bundle/chunks/restore-3JRX27QW.js +0 -17
- package/dist/cli-bundle/chunks/test-XN7RJL5Z.js +0 -32
- package/dist/cli-bundle/chunks/update-LFBSEW3N.js +0 -21
- /package/dist/cli-bundle/chunks/{activity-A3QKFSSF.js.map → activity-5QLX6DHN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{activity-Q7XMIZIH.js.map → activity-W6TS5F2L.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-3RFOU7P5.js.map → append-7BS36Z2L.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-OM74OJVT.js.map → append-DHGTLUZW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-Z2HXAFFH.js.map → chunk-344GDQTH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-AEMKH5WQ.js.map → chunk-3VTWCBXL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-XLSQ3QLT.js.map → chunk-4CYHWHZU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JS47EKLP.js.map → chunk-4H2NDEGJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-QF4OPBAG.js.map → chunk-5HH6QRH5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-5NVJA7IW.js.map → chunk-5OMABP7I.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-YEFOCDIK.js.map → chunk-6ADVKPVV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-SM3RMWGO.js.map → chunk-6KQS23TX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-ETZZU5QF.js.map → chunk-6N46IM44.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-5WO2VKFA.js.map → chunk-73PSHEMT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-J4DKAGTM.js.map → chunk-7DUVDW7C.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-2BYKYPWY.js.map → chunk-7GYMMDDW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-QFVASU44.js.map → chunk-7TW64BS5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-KP4KIUQT.js.map → chunk-ANVZCNL5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-UEXNNF3K.js.map → chunk-D6JZBUZ6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-R4XIE7NQ.js.map → chunk-DMDEC4QP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-KN4WSESY.js.map → chunk-DTRIVUTN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-HP35AVFS.js.map → chunk-EIS32UA4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-BFJPMUF5.js.map → chunk-GP6SHEAI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-URJEZOLB.js.map → chunk-GRHPU6EM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-K62SNVVE.js.map → chunk-I2FM2SMO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-AXBUHLW7.js.map → chunk-K45NAJV2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NLVCMVC7.js.map → chunk-K7SXBA75.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NDSMKB2I.js.map → chunk-LYL32FT6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-Z55JACL2.js.map → chunk-O64EYNHF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-FO2TYSQZ.js.map → chunk-OROMGSBP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-XZS4MV37.js.map → chunk-PYULT32I.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-M7UBTVFT.js.map → chunk-Q6PSD5DZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-QQPZYP73.js.map → chunk-QGIWURY3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-XEKZCBCS.js.map → chunk-SNASEDXB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4WYBLB6J.js.map → chunk-T6QLB34N.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NGEEXR2R.js.map → chunk-TALBUVWF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-FGRJZVXD.js.map → chunk-TV6FZGVK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4TI3532H.js.map → chunk-UDWUDUJI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-CBJXWXI5.js.map → chunk-UY26RIBR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-TBLBEOEX.js.map → chunk-VSS3CSTF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-OTY2YEH5.js.map → chunk-WWEFBBVF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-UMMJAJB2.js.map → chunk-X3IPJU2O.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-NHBIIBOW.js.map → claim-3TY5LE54.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-RNEBQCOO.js.map → claim-LM4YY6QQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-ZMXL2WDS.js.map → close-CSD4LEMT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-UNTFXVM3.js.map → close-SIQCDOBR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-J5Q4IJPH.js.map → comments-A5ALOYTG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-EFVBHWPT.js.map → comments-BDDEK3VW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{config-72253M2O.js.map → config-W2NHDNQT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{config-VFYA6BMI.js.map → config-YUYBMJOW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{contracts-D4BN3VSQ.js.map → contracts-47X7RYUF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{contracts-RGPOBLPL.js.map → contracts-HJHR4NCD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-H6TXHK7S.js.map → copy-B7HFOWFB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-WXE3OOLZ.js.map → copy-P4UVYZ7M.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-PUAIJEZ7.js.map → create-5ERJF64D.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-EZWAMUKR.js.map → create-TXNRPS4K.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-WBME6WG5.js.map → delete-LX3LGBCH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-PKR2JHLH.js.map → delete-S3WVK6LP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-4BQEDV4L.js.map → deps-GWSNH7OZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-KWHQRO75.js.map → deps-YSM4LZQD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-SCNBUGSV.js.map → docs-7RYFBHQD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-364GT3ZR.js.map → docs-TG6JMVMY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-KK2UPXJD.js.map → extension-R3LUKMX7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-CRE7JM47.js.map → extension-VNMRKIHI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{files-66EHM5ZR.js.map → files-KAKU57OT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{files-3GESQAWL.js.map → files-QB3EYPMO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{gc-MOQDND5J.js.map → gc-B747VM4M.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{gc-D5IWOKQH.js.map → gc-KNUPLPSW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{get-7J2ZCBV5.js.map → get-GMGLIQ5I.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{get-WXSLXV3K.js.map → get-SBL6NHYQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-ZERISU2L.js.map → history-6UKSZTRT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-TJTO5GCR.js.map → history-XCWRXBXC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-compact-CKNN6UKW.js.map → history-compact-IDH7E7VN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-compact-N2Q7IR3T.js.map → history-compact-KICKUCR7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-GODBYT5A.js.map → history-redact-HKYBTK6X.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-JUXUOH54.js.map → history-redact-JJWH3QWK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-repair-TDBBSRVK.js.map → history-repair-7HWBZKXN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-repair-CCCPBNTF.js.map → history-repair-N5HXKJOI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-CBZHXBR3.js.map → init-27JLDUO2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-6ZPKD3YN.js.map → init-OQA3TWIS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-WYNTYQ5T.js.map → learnings-L7VQUSVI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-U7U2FNIO.js.map → learnings-Z4GAIZQ5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-7MTPPZHC.js.map → list-6U3CJVXS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-JGP7ODML.js.map → list-W5ROBC5U.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-P25YVTEG.js.map → notes-JJDOEDFK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-QIF6A7XS.js.map → notes-SDCK7BEN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{plan-RACB5PI6.js.map → plan-H5HYHMBB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{plan-SSBJFWXA.js.map → plan-W2B5RYR3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-setup-JRZ4UMWZ.js.map → register-setup-BZ3TNE3G.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-setup-ABA2JPWO.js.map → register-setup-WLFL3OUF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-3JRX27QW.js.map → restore-GNI2W5CN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-K72ZNPEP.js.map → restore-RGFSPG4K.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-UL4B2JX5.js.map → schema-CCDU3RLC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-3VKRDBLC.js.map → schema-KZASL323.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{stats-WLJ3XBF5.js.map → stats-IOXQMGI6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{stats-O4UTMJMC.js.map → stats-QNV7B2CE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{telemetry-EUVHFSQU.js.map → telemetry-IV5C6JOM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{telemetry-NRVWX25E.js.map → telemetry-NHR5RFXT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-XN7RJL5Z.js.map → test-4Z37CXW4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-GXUBQNUC.js.map → test-PIL2CEEB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-all-UTFXC7S2.js.map → test-all-GRLYHBNP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-all-XM6OKI3L.js.map → test-all-MFN4MYCV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-runs-IK6E2HNX.js.map → test-runs-7LRFWWCA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-runs-7FHCPEA3.js.map → test-runs-7WCSC3TY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-LFBSEW3N.js.map → update-I4G34LKJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-U4B4OMHZ.js.map → update-VI5DBZ3G.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{upgrade-FFXGO43H.js.map → upgrade-LT2MLLPS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{upgrade-5SRFLUNW.js.map → upgrade-ZZSC7CLV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{validate-T3LPWSZG.js.map → validate-3XRORNMP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{validate-CRWXZILW.js.map → validate-IQIQSKUX.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../../core/history/drift-scan.ts","../../../../../../../../core/diagnostics/remediation.ts"],"sourcesContent":["import fs from \"fs/promises\";\nimport { createHash } from \"node:crypto\";\nimport path from \"node:path\";\nimport { getHistoryPath } from \"../store/paths.js\";\nimport { writeFileAtomic } from \"../fs/fs-utils.js\";\nimport { hashDocument } from \"./history.js\";\nimport { verifyHistoryChain } from \"./replay.js\";\nimport type { HistoryEntry, ItemMetadata } from \"../../types/index.js\";\n\nexport interface DriftScanResult {\n missingStreams: string[];\n unreadableStreams: string[];\n hashMismatches: string[];\n chainMismatches: string[];\n driftedItems: string[];\n}\n\nconst DRIFT_CACHE_VERSION = 2;\nconst DRIFT_CACHE_FILENAME = \"history-drift-cache.json\";\n\ninterface DriftCacheEntry {\n mtime_ms: number;\n ctime_ms: number;\n size: number;\n content_hash: string;\n latest_after_hash: string;\n chain_ok: boolean;\n}\n\ninterface DriftCacheEnvelope {\n version: number;\n entries: Record<string, DriftCacheEntry>;\n}\n\nfunction getDriftCachePath(pmRoot: string): string {\n return path.join(pmRoot, \"runtime\", DRIFT_CACHE_FILENAME);\n}\n\nasync function loadDriftCache(pmRoot: string): Promise<DriftCacheEnvelope | null> {\n try {\n const raw = await fs.readFile(getDriftCachePath(pmRoot), \"utf8\");\n const parsed = JSON.parse(raw) as DriftCacheEnvelope;\n if (parsed.version !== DRIFT_CACHE_VERSION || typeof parsed.entries !== \"object\" || parsed.entries === null) {\n return null;\n }\n return parsed;\n } catch {\n return null;\n }\n}\n\nfunction isErrno(error: unknown, code: string): boolean {\n return typeof error === \"object\" && error !== null && \"code\" in error && (error as { code?: string }).code === code;\n}\n\ninterface StreamVerification {\n latestAfterHash: string;\n chainOk: boolean;\n contentHash: string;\n}\n\nfunction hashContent(raw: string): string {\n return createHash(\"sha256\").update(raw).digest(\"hex\");\n}\n\nasync function readHistoryContentHash(historyPath: string): Promise<string> {\n const raw = await fs.readFile(historyPath, \"utf8\");\n return hashContent(raw);\n}\n\n/**\n * Read and fully verify one history stream's hash chain. Returns null for an\n * empty/missing stream (caller records it as a missing stream).\n */\nasync function verifyHistoryStream(historyPath: string): Promise<StreamVerification | null> {\n const raw = await fs.readFile(historyPath, \"utf8\");\n const contentHash = hashContent(raw);\n if (raw.trim().length === 0) {\n return null;\n }\n const entries: HistoryEntry[] = [];\n let latestAfterHash: string | null = null;\n for (const line of raw.split(/\\r?\\n/)) {\n const trimmed = line.trim();\n if (trimmed.length === 0) {\n continue;\n }\n const parsed = JSON.parse(trimmed) as HistoryEntry;\n if (typeof parsed.after_hash !== \"string\" || parsed.after_hash.trim().length === 0) {\n throw new Error(\"missing after_hash\");\n }\n entries.push(parsed);\n latestAfterHash = parsed.after_hash;\n }\n /* c8 ignore start -- defensive guard for future history schema changes. */\n if (!latestAfterHash) {\n return null;\n }\n /* c8 ignore stop */\n return {\n latestAfterHash,\n chainOk: verifyHistoryChain(entries).ok,\n contentHash,\n };\n}\n\n/**\n * Scan every item's history stream for drift (missing/unreadable streams, broken\n * hash chains, and item/history hash mismatches).\n *\n * Full chain re-verification of a 17MB+ history tree is the dominant cost of\n * `pm health`. We cache the per-stream verification keyed by the history file's\n * mtime/ctime/size + content hash: metadata-stable replacements (same stat tuple)\n * can still happen, so each metadata hit recomputes a content hash guard before\n * trusting the cached chain/hash verification.\n */\nexport async function scanHistoryDrift(\n pmRoot: string,\n items: Array<ItemMetadata & { body: string }>,\n): Promise<DriftScanResult> {\n const missingStreams: string[] = [];\n const unreadableStreams: string[] = [];\n const hashMismatches: string[] = [];\n const chainMismatches: string[] = [];\n\n const cache = await loadDriftCache(pmRoot);\n const previousEntries: Record<string, DriftCacheEntry> = cache?.entries ?? {};\n const nextEntries: Record<string, DriftCacheEntry> = {};\n let cacheDirty = false;\n\n for (const item of items) {\n const historyPath = getHistoryPath(pmRoot, item.id);\n\n let stat: Awaited<ReturnType<typeof fs.stat>>;\n try {\n stat = await fs.stat(historyPath);\n } catch (error: unknown) {\n if (isErrno(error, \"ENOENT\")) {\n missingStreams.push(item.id);\n } else {\n unreadableStreams.push(item.id);\n }\n continue;\n }\n\n const loadStreamVerification = async (): Promise<StreamVerification | null | \"unreadable\"> => {\n try {\n return await verifyHistoryStream(historyPath);\n } catch {\n return \"unreadable\";\n }\n };\n\n const loadFreshVerification = async (): Promise<StreamVerification | null> => {\n const loaded = await loadStreamVerification();\n if (loaded === \"unreadable\") {\n unreadableStreams.push(item.id);\n return null;\n }\n if (!loaded) {\n missingStreams.push(item.id);\n return null;\n }\n return loaded;\n };\n\n const cached = previousEntries[item.id];\n let verification: StreamVerification;\n const metadataMatchesCache =\n cached !== undefined &&\n cached.mtime_ms === stat.mtimeMs &&\n cached.ctime_ms === stat.ctimeMs &&\n cached.size === stat.size;\n const cachedContentHash =\n typeof cached?.content_hash === \"string\" && cached.content_hash.length > 0 ? cached.content_hash : undefined;\n const canUseCache = metadataMatchesCache && cachedContentHash !== undefined;\n if (canUseCache && cached) {\n let currentContentHash: string;\n try {\n currentContentHash = await readHistoryContentHash(historyPath);\n } catch {\n unreadableStreams.push(item.id);\n continue;\n }\n if (currentContentHash === cachedContentHash) {\n verification = {\n latestAfterHash: cached.latest_after_hash,\n chainOk: cached.chain_ok,\n contentHash: currentContentHash,\n };\n } else {\n cacheDirty = true;\n const refreshed = await loadFreshVerification();\n if (!refreshed) {\n continue;\n }\n verification = refreshed;\n }\n } else {\n cacheDirty = true;\n const refreshed = await loadFreshVerification();\n if (!refreshed) {\n continue;\n }\n verification = refreshed;\n }\n\n if (!verification.chainOk) {\n chainMismatches.push(item.id);\n }\n nextEntries[item.id] = {\n mtime_ms: stat.mtimeMs,\n ctime_ms: stat.ctimeMs,\n size: stat.size,\n content_hash: verification.contentHash,\n latest_after_hash: verification.latestAfterHash,\n chain_ok: verification.chainOk,\n };\n\n const { body, ...frontMatter } = item;\n const currentHash = hashDocument({\n metadata: frontMatter as ItemMetadata,\n body,\n });\n if (currentHash !== verification.latestAfterHash) {\n hashMismatches.push(item.id);\n }\n }\n\n if (cacheDirty || Object.keys(previousEntries).length !== Object.keys(nextEntries).length) {\n const cachePath = getDriftCachePath(pmRoot);\n try {\n await fs.mkdir(path.dirname(cachePath), { recursive: true });\n await writeFileAtomic(cachePath, JSON.stringify({ version: DRIFT_CACHE_VERSION, entries: nextEntries }));\n } catch {\n // Best-effort cache write: a failed persist must never fail a health scan.\n }\n }\n\n const driftedItems = [...new Set([...missingStreams, ...unreadableStreams, ...hashMismatches, ...chainMismatches])].sort((a, b) =>\n a.localeCompare(b),\n );\n return { missingStreams, unreadableStreams, hashMismatches, chainMismatches, driftedItems };\n}\n","/**\n * Shared machine-executable remediation registry.\n *\n * `pm health` and `pm validate` both emit stable, colon-delimited warning tokens\n * (for example `history_drift_missing_stream:pm-abcd` or\n * `validate_resolution_missing_fields:3`). Agents that gate on these commands\n * previously had to hardcode the mapping from a warning code to the `pm` command\n * that fixes it. This module is the single source of truth for that mapping so\n * `pm health --json` (per-check `remediation_map`) and `pm validate --fix-hints`\n * (per-check `fix_hints`) can both surface executable remediation without any\n * duplicated, drift-prone lookup tables.\n *\n * Semantics of {@link RemediationEntry.command}: the suggested next `pm` command\n * an operator/agent should run to resolve findings with that code. Per-item\n * findings use an `<id>` placeholder (callers that have the concrete id may\n * substitute it); findings whose only fix is a manual file edit point at the\n * most useful diagnostic/repair command and describe the manual step in\n * {@link RemediationEntry.summary}.\n */\n\nexport interface RemediationEntry {\n /**\n * Stable warning-code prefix this entry resolves. A warning matches when it\n * equals this code or begins with `<code>:`. Registry codes are mutually\n * exclusive under that colon-boundary rule (no code is a `:`-delimited prefix\n * of another — e.g. `settings:id_prefix_empty` is distinct from a bare\n * `settings`, which is intentionally not registered), so `resolveRemediation`\n * uses first-match with no ordering dependency.\n */\n readonly code: string;\n /** Executable `pm` command (or imperative) that resolves the finding. May contain an `<id>` placeholder. */\n readonly command: string;\n /** One-line description of what the command does / which manual step it covers. */\n readonly summary: string;\n}\n\n/**\n * Registry of every non-extension `pm health` / `pm validate` warning code and\n * its remediation. Extension findings keep their richer, contextual\n * `details.triage.remediation` produced by the extension health triage and are\n * intentionally excluded here (see pm-0hnu: \"all non-extension checks\").\n */\nexport const REMEDIATION_REGISTRY: readonly RemediationEntry[] = Object.freeze([\n // --- pm health: directories ---\n {\n code: \"missing_directory\",\n command: \"pm init\",\n summary: \"Recreate missing tracker directories (pm init is idempotent and restores the scaffold).\",\n },\n // --- pm health: settings (read/parse) ---\n {\n code: \"settings_read_invalid_json\",\n command: \"pm config list --json\",\n summary:\n \"settings.json is not valid JSON and pm fell back to defaults; fix the syntax error in the reported path, then re-run.\",\n },\n {\n code: \"settings_read_invalid_schema\",\n command: \"pm config list --json\",\n summary:\n \"settings.json failed schema validation and pm fell back to defaults; correct the reported key in the file, then re-run.\",\n },\n {\n code: \"settings_read_merge_failed\",\n command: \"pm config list --json\",\n summary: \"Global/project settings could not be merged; reconcile the conflicting keys in the reported settings files.\",\n },\n // --- pm health: settings_values ---\n {\n code: \"settings:id_prefix_empty\",\n command: \"pm config list --json\",\n summary: 'id_prefix is empty; set a non-empty \"id_prefix\" in settings.json so generated item ids are well-formed.',\n },\n {\n code: \"settings:locks_ttl_non_positive\",\n command: \"pm config list --json\",\n summary: 'locks.ttl_seconds must be positive; set a positive \"locks.ttl_seconds\" in settings.json.',\n },\n // --- pm health: telemetry (advisory) ---\n {\n code: \"telemetry_state_invalid_json\",\n command: \"pm health --check-telemetry\",\n summary: \"Local telemetry state file is corrupt; pm recreates it on the next flush. Advisory only.\",\n },\n {\n code: \"telemetry_queue_invalid_rows\",\n command: \"pm health --check-telemetry\",\n summary: \"The telemetry queue has unparseable rows; they are skipped on the next flush. Advisory only.\",\n },\n {\n code: \"telemetry_queue_pending\",\n command: \"pm health --check-telemetry\",\n summary: \"Telemetry events are queued; they flush automatically on the next reachable command. Advisory only.\",\n },\n {\n code: \"telemetry_endpoint_probe_failed\",\n command: \"pm health --check-telemetry\",\n summary: \"The telemetry endpoint is unreachable; events stay queued until it recovers. Advisory only.\",\n },\n {\n code: \"telemetry_endpoint_probe_http_status\",\n command: \"pm health --check-telemetry\",\n summary: \"The telemetry endpoint returned a non-success status; events stay queued until it recovers. Advisory only.\",\n },\n {\n code: \"telemetry_schema_version_behind\",\n command: \"pm health --check-telemetry\",\n summary: \"Client schema is behind server; upgrade pm-cli to emit the latest event shape.\",\n },\n // --- pm health: integrity ---\n {\n code: \"integrity_item_unreadable\",\n command: \"pm validate --check-files --verbose-diagnostics\",\n summary: \"An item file could not be read; restore or repair the file at the reported path.\",\n },\n {\n code: \"integrity_item_parse_failed\",\n command: \"pm validate --check-files --verbose-diagnostics\",\n summary: \"An item file failed to parse; fix the malformed front matter at the reported path.\",\n },\n {\n code: \"integrity_item_conflict_marker\",\n command: \"pm validate --check-files --verbose-diagnostics\",\n summary: \"An item file contains Git conflict markers; resolve the <<<<<<< / >>>>>>> markers at the reported line.\",\n },\n {\n code: \"integrity_history_unreadable\",\n command: \"pm history-repair <id>\",\n summary: \"A history stream could not be read; re-anchor the affected item's history chain.\",\n },\n {\n code: \"integrity_history_invalid_json\",\n command: \"pm history-repair <id>\",\n summary: \"A history stream contains invalid JSON; re-anchor the affected item's history chain.\",\n },\n {\n code: \"integrity_history_conflict_marker\",\n command: \"pm history-repair <id>\",\n summary: \"A history stream contains Git conflict markers; resolve the markers, then re-anchor the chain.\",\n },\n // --- pm health: history_drift ---\n {\n code: \"history_drift_missing_stream\",\n command: \"pm history-repair <id>\",\n summary: \"The item has no history stream; re-anchor the chain to rebuild it.\",\n },\n {\n code: \"history_drift_unreadable_stream\",\n command: \"pm history-repair <id>\",\n summary: \"The item's history stream is unreadable; re-anchor the chain.\",\n },\n {\n code: \"history_drift_hash_mismatch\",\n command: \"pm history-repair <id>\",\n summary: \"The item's content hash no longer matches its history; re-anchor the chain.\",\n },\n {\n code: \"history_drift_chain_mismatch\",\n command: \"pm history-repair <id>\",\n summary: \"The item's history chain is broken; re-anchor the chain.\",\n },\n // --- pm health: vectorization ---\n {\n code: \"vectorization_stale_items_remaining\",\n command: \"pm health --refresh-vectors\",\n summary: \"Some items have stale embeddings; refresh vectors so semantic search results stay current.\",\n },\n // --- pm validate: metadata ---\n // Note: validate_metadata_missing_author has no entry on purpose. `pm update\n // --author` sets the mutation/audit author (history), not the item's\n // `metadata.author` front-matter field, and there is no CLI flag that writes\n // that field — so emitting a command here would record an audit entry without\n // clearing the finding. A missing item author must be restored at the source.\n {\n code: \"validate_metadata_missing_acceptance_criteria\",\n command: 'pm update <id> --acceptance-criteria \"<criteria>\"',\n summary: \"Backfill the missing acceptance criteria on the reported item(s).\",\n },\n {\n code: \"validate_metadata_missing_estimate\",\n command: 'pm update <id> --estimate \"<estimate>\"',\n summary: \"Backfill the missing estimate on the reported item(s).\",\n },\n {\n code: \"validate_metadata_missing_close_reason\",\n command: 'pm update <id> --close-reason \"<reason>\"',\n summary: \"Backfill the missing close reason on the reported closed item(s).\",\n },\n {\n code: \"validate_metadata_missing_reviewer\",\n command: 'pm update <id> --reviewer \"<name>\"',\n summary: \"Backfill the missing reviewer on the reported item(s).\",\n },\n {\n code: \"validate_metadata_missing_risk\",\n command: 'pm update <id> --risk \"<level>\"',\n summary: \"Backfill the missing risk on the reported item(s).\",\n },\n {\n code: \"validate_metadata_missing_confidence\",\n command: 'pm update <id> --confidence \"<level>\"',\n summary: \"Backfill the missing confidence on the reported item(s).\",\n },\n {\n code: \"validate_metadata_missing_sprint\",\n command: 'pm update <id> --sprint \"<sprint>\"',\n summary: \"Backfill the missing sprint on the reported item(s).\",\n },\n {\n code: \"validate_metadata_missing_release\",\n command: 'pm update <id> --release \"<release>\"',\n summary: \"Backfill the missing release on the reported item(s).\",\n },\n {\n code: \"validate_metadata_custom_profile_missing_required_fields\",\n command: 'pm config set metadata-required-fields --criterion \"<field>\"',\n summary:\n \"Config-driven finding: the custom metadata profile has no required fields configured and falls back to core, so configure the fields rather than mutating items.\",\n },\n // --- pm validate: resolution ---\n {\n code: \"validate_resolution_missing_fields\",\n command: 'pm update <id> --resolution \"<how resolved>\"',\n summary: \"Backfill resolution / expected_result / actual_result on the reported closed item(s).\",\n },\n // --- pm validate: lifecycle ---\n {\n code: \"validate_lifecycle_active_closure_like_metadata\",\n command: \"pm update <id> --unset <closure-like-field>\",\n summary:\n \"Clear the closure-like field the validator flags on this active item — the detail row names it (resolution / actual-result / blocked-reason) — or close the item if it is actually done.\",\n },\n {\n code: \"validate_lifecycle_active_terminal_parent\",\n command: \"pm update <id> --parent <active-parent-id>\",\n summary: \"Reopen the terminal parent or move the active child under a non-terminal parent.\",\n },\n {\n code: \"validate_lifecycle_stale_blockers\",\n command: \"pm update <id> --unset blocked-by --unset blocked-reason\",\n summary:\n \"Resolve the stale blocker the validator flags: clear blocked-by/blocked-reason when they linger on a non-blocked item or report a resolved blocker; if instead a blocked item is missing blocker context, add the context or move it out of a blocked status.\",\n },\n {\n code: \"validate_lifecycle_dependency_cycles_error\",\n command: \"pm update <id> --dep-remove <dep-id>\",\n summary: \"Break the dependency cycle by removing one edge from the reported cycle.\",\n },\n {\n code: \"validate_lifecycle_dependency_cycles\",\n command: \"pm update <id> --dep-remove <dep-id>\",\n summary: \"Break the dependency cycle by removing one edge from the reported cycle.\",\n },\n // --- pm validate: files ---\n {\n code: \"validate_files_missing_linked_paths\",\n command: \"pm <files|docs> <id> --remove <path>\",\n summary:\n \"The check spans both item.files and item.docs under one code: restore the missing linked artifact, or unlink it with pm files (linked file) or pm docs (linked doc).\",\n },\n {\n code: \"validate_files_orphaned_paths\",\n command: \"pm <files|docs> <id> --add <path>\",\n summary:\n \"Link the orphaned artifact with pm files (file) or pm docs (doc), or remove it from the workspace.\",\n },\n {\n code: \"validate_files_tracked_all_strict_forces_pm_internals\",\n command: \"pm validate --check-files --include-pm-internals\",\n summary: \"tracked-all-strict scan flagged pm internals; re-run with --include-pm-internals or a softer --scan-mode.\",\n },\n // --- pm validate: history_drift ---\n {\n code: \"validate_history_drift_missing_streams\",\n command: \"pm history-repair <id>\",\n summary: \"Re-anchor the history chains of the items missing a history stream.\",\n },\n {\n code: \"validate_history_drift_unreadable_streams\",\n command: \"pm history-repair <id>\",\n summary: \"Re-anchor the history chains of the items with an unreadable history stream.\",\n },\n {\n code: \"validate_history_drift_hash_mismatches\",\n command: \"pm history-repair <id>\",\n summary: \"Re-anchor the history chains of the items whose content hash drifted.\",\n },\n {\n code: \"validate_history_drift_chain_mismatches\",\n command: \"pm history-repair <id>\",\n summary: \"Re-anchor the history chains of the items with a broken history chain.\",\n },\n // --- pm validate: command_references ---\n {\n code: \"validate_command_references_stale_pm_ids\",\n command: 'pm update <id> --replace-tests --test \"command=<corrected-command>\" [--test ...]',\n summary:\n \"Correct the stale pm-ID inside the item's linked test command (the check scans tests[].command, not the body). --replace-tests overwrites the entire tests list, so re-include the item's other linked tests in the same call.\",\n },\n]);\n\n/**\n * Resolve the remediation entry for a warning token, or `undefined` when no\n * entry is registered. A warning matches an entry when it equals the entry code\n * or begins with `<code>:` (the colon boundary keeps sibling codes such as\n * `validate_lifecycle_dependency_cycles` and\n * `validate_lifecycle_dependency_cycles_error` disjoint).\n *\n * First match is intentional and correct: registry codes are mutually exclusive\n * under the colon-boundary rule, so at most one entry can ever match a warning\n * and order is irrelevant. That invariant is enforced by a test (see\n * remediation-registry.spec.ts \"keeps every registry code mutually exclusive\"),\n * which is why this stays a simple linear scan rather than a longest-prefix\n * search — a longest-prefix tie-break is unreachable with disjoint codes.\n *\n * Accepts unknown input defensively (this is an exported helper SDK consumers\n * may call from untyped JS): a non-string `warning` resolves to `undefined`.\n */\nexport function resolveRemediation(warning: string): RemediationEntry | undefined {\n if (typeof warning !== \"string\") {\n return undefined;\n }\n const normalized = warning.trim();\n for (const entry of REMEDIATION_REGISTRY) {\n if (normalized === entry.code || normalized.startsWith(`${entry.code}:`)) {\n return entry;\n }\n }\n return undefined;\n}\n\n/**\n * Build a compact `remediation_map` (code -> command) for a set of warning\n * tokens. First match wins per code; unknown codes are skipped. Used by\n * `pm health --json` per-check details and as the source of deduped executable\n * commands for `pm validate --fix-hints`.\n */\nexport function buildRemediationMap(warnings: Iterable<string>): Record<string, string> {\n const map: Record<string, string> = {};\n for (const warning of warnings) {\n const entry = resolveRemediation(warning);\n if (entry !== undefined && !Object.prototype.hasOwnProperty.call(map, entry.code)) {\n map[entry.code] = entry.command;\n }\n }\n return map;\n}\n\n/**\n * Build a deduped, ordered list of executable remediation commands for a set of\n * warning tokens (one command per distinct matched code). Used by\n * `pm validate --fix-hints` for checks that do not already emit per-row\n * remediation commands.\n */\nexport function buildRemediationCommands(warnings: Iterable<string>): string[] {\n return Object.values(buildRemediationMap(warnings));\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,OAAO,QAAQ;AACf,SAAS,kBAAkB;AAC3B,OAAO,UAAU;AAejB,IAAM,sBAAsB;AAC5B,IAAM,uBAAuB;AAgB7B,SAAS,kBAAkB,QAAc;AACvC,SAAO,KAAK,KAAK,QAAQ,WAAW,oBAAoB;AAC1D;AAEA,eAAe,eAAe,QAAc;AAC1C,MAAI;AACF,UAAM,MAAM,MAAM,GAAG,SAAS,kBAAkB,MAAM,GAAG,MAAM;AAC/D,UAAM,SAAS,KAAK,MAAM,GAAG;AAC7B,QAAI,OAAO,YAAY,uBAAuB,OAAO,OAAO,YAAY,YAAY,OAAO,YAAY,MAAM;AAC3G,aAAO;IACT;AACA,WAAO;EACT,QAAQ;AACN,WAAO;EACT;AACF;AAEA,SAAS,QAAQ,OAAgB,MAAY;AAC3C,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,UAAU,SAAU,MAA4B,SAAS;AACjH;AAQA,SAAS,YAAY,KAAW;AAC9B,SAAO,WAAW,QAAQ,EAAE,OAAO,GAAG,EAAE,OAAO,KAAK;AACtD;AAEA,eAAe,uBAAuB,aAAmB;AACvD,QAAM,MAAM,MAAM,GAAG,SAAS,aAAa,MAAM;AACjD,SAAO,YAAY,GAAG;AACxB;AAMA,eAAe,oBAAoB,aAAmB;AACpD,QAAM,MAAM,MAAM,GAAG,SAAS,aAAa,MAAM;AACjD,QAAM,cAAc,YAAY,GAAG;AACnC,MAAI,IAAI,KAAI,EAAG,WAAW,GAAG;AAC3B,WAAO;EACT;AACA,QAAM,UAA0B,CAAA;AAChC,MAAI,kBAAiC;AACrC,aAAW,QAAQ,IAAI,MAAM,OAAO,GAAG;AACrC,UAAM,UAAU,KAAK,KAAI;AACzB,QAAI,QAAQ,WAAW,GAAG;AACxB;IACF;AACA,UAAM,SAAS,KAAK,MAAM,OAAO;AACjC,QAAI,OAAO,OAAO,eAAe,YAAY,OAAO,WAAW,KAAI,EAAG,WAAW,GAAG;AAClF,YAAM,IAAI,MAAM,oBAAoB;IACtC;AACA,YAAQ,KAAK,MAAM;AACnB,sBAAkB,OAAO;EAC3B;AAEA,MAAI,CAAC,iBAAiB;AACpB,WAAO;EACT;AAEA,SAAO;IACL;IACA,SAAS,mBAAmB,OAAO,EAAE;IACrC;;AAEJ;AAYA,eAAsB,iBACpB,QACA,OAA6C;AAE7C,QAAM,iBAA2B,CAAA;AACjC,QAAM,oBAA8B,CAAA;AACpC,QAAM,iBAA2B,CAAA;AACjC,QAAM,kBAA4B,CAAA;AAElC,QAAM,QAAQ,MAAM,eAAe,MAAM;AACzC,QAAM,kBAAmD,OAAO,WAAW,CAAA;AAC3E,QAAM,cAA+C,CAAA;AACrD,MAAI,aAAa;AAEjB,aAAW,QAAQ,OAAO;AACxB,UAAM,cAAc,eAAe,QAAQ,KAAK,EAAE;AAElD,QAAI;AACJ,QAAI;AACF,aAAO,MAAM,GAAG,KAAK,WAAW;IAClC,SAAS,OAAgB;AACvB,UAAI,QAAQ,OAAO,QAAQ,GAAG;AAC5B,uBAAe,KAAK,KAAK,EAAE;MAC7B,OAAO;AACL,0BAAkB,KAAK,KAAK,EAAE;MAChC;AACA;IACF;AAEA,UAAM,yBAAyB,YAA8D;AAC3F,UAAI;AACF,eAAO,MAAM,oBAAoB,WAAW;MAC9C,QAAQ;AACN,eAAO;MACT;IACF;AAEA,UAAM,wBAAwB,YAA+C;AAC3E,YAAM,SAAS,MAAM,uBAAsB;AAC3C,UAAI,WAAW,cAAc;AAC3B,0BAAkB,KAAK,KAAK,EAAE;AAC9B,eAAO;MACT;AACA,UAAI,CAAC,QAAQ;AACX,uBAAe,KAAK,KAAK,EAAE;AAC3B,eAAO;MACT;AACA,aAAO;IACT;AAEA,UAAM,SAAS,gBAAgB,KAAK,EAAE;AACtC,QAAI;AACJ,UAAM,uBACJ,WAAW,UACX,OAAO,aAAa,KAAK,WACzB,OAAO,aAAa,KAAK,WACzB,OAAO,SAAS,KAAK;AACvB,UAAM,oBACJ,OAAO,QAAQ,iBAAiB,YAAY,OAAO,aAAa,SAAS,IAAI,OAAO,eAAe;AACrG,UAAM,cAAc,wBAAwB,sBAAsB;AAClE,QAAI,eAAe,QAAQ;AACzB,UAAI;AACJ,UAAI;AACF,6BAAqB,MAAM,uBAAuB,WAAW;MAC/D,QAAQ;AACN,0BAAkB,KAAK,KAAK,EAAE;AAC9B;MACF;AACA,UAAI,uBAAuB,mBAAmB;AAC5C,uBAAe;UACb,iBAAiB,OAAO;UACxB,SAAS,OAAO;UAChB,aAAa;;MAEjB,OAAO;AACL,qBAAa;AACb,cAAM,YAAY,MAAM,sBAAqB;AAC7C,YAAI,CAAC,WAAW;AACd;QACF;AACA,uBAAe;MACjB;IACF,OAAO;AACL,mBAAa;AACb,YAAM,YAAY,MAAM,sBAAqB;AAC7C,UAAI,CAAC,WAAW;AACd;MACF;AACA,qBAAe;IACjB;AAEA,QAAI,CAAC,aAAa,SAAS;AACzB,sBAAgB,KAAK,KAAK,EAAE;IAC9B;AACA,gBAAY,KAAK,EAAE,IAAI;MACrB,UAAU,KAAK;MACf,UAAU,KAAK;MACf,MAAM,KAAK;MACX,cAAc,aAAa;MAC3B,mBAAmB,aAAa;MAChC,UAAU,aAAa;;AAGzB,UAAM,EAAE,MAAM,GAAG,YAAW,IAAK;AACjC,UAAM,cAAc,aAAa;MAC/B,UAAU;MACV;KACD;AACD,QAAI,gBAAgB,aAAa,iBAAiB;AAChD,qBAAe,KAAK,KAAK,EAAE;IAC7B;EACF;AAEA,MAAI,cAAc,OAAO,KAAK,eAAe,EAAE,WAAW,OAAO,KAAK,WAAW,EAAE,QAAQ;AACzF,UAAM,YAAY,kBAAkB,MAAM;AAC1C,QAAI;AACF,YAAM,GAAG,MAAM,KAAK,QAAQ,SAAS,GAAG,EAAE,WAAW,KAAI,CAAE;AAC3D,YAAM,gBAAgB,WAAW,KAAK,UAAU,EAAE,SAAS,qBAAqB,SAAS,YAAW,CAAE,CAAC;IACzG,QAAQ;IAER;EACF;AAEA,QAAM,eAAe,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAG,gBAAgB,GAAG,mBAAmB,GAAG,gBAAgB,GAAG,eAAe,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,MAC3H,EAAE,cAAc,CAAC,CAAC;AAEpB,SAAO,EAAE,gBAAgB,mBAAmB,gBAAgB,iBAAiB,aAAY;AAC3F;;;ACzMO,IAAM,uBAAoD,OAAO,OAAO;;EAE7E;IACE,MAAM;IACN,SAAS;IACT,SAAS;;;EAGX;IACE,MAAM;IACN,SAAS;IACT,SACE;;EAEJ;IACE,MAAM;IACN,SAAS;IACT,SACE;;EAEJ;IACE,MAAM;IACN,SAAS;IACT,SAAS;;;EAGX;IACE,MAAM;IACN,SAAS;IACT,SAAS;;EAEX;IACE,MAAM;IACN,SAAS;IACT,SAAS;;;EAGX;IACE,MAAM;IACN,SAAS;IACT,SAAS;;EAEX;IACE,MAAM;IACN,SAAS;IACT,SAAS;;EAEX;IACE,MAAM;IACN,SAAS;IACT,SAAS;;EAEX;IACE,MAAM;IACN,SAAS;IACT,SAAS;;EAEX;IACE,MAAM;IACN,SAAS;IACT,SAAS;;EAEX;IACE,MAAM;IACN,SAAS;IACT,SAAS;;;EAGX;IACE,MAAM;IACN,SAAS;IACT,SAAS;;EAEX;IACE,MAAM;IACN,SAAS;IACT,SAAS;;EAEX;IACE,MAAM;IACN,SAAS;IACT,SAAS;;EAEX;IACE,MAAM;IACN,SAAS;IACT,SAAS;;EAEX;IACE,MAAM;IACN,SAAS;IACT,SAAS;;EAEX;IACE,MAAM;IACN,SAAS;IACT,SAAS;;;EAGX;IACE,MAAM;IACN,SAAS;IACT,SAAS;;EAEX;IACE,MAAM;IACN,SAAS;IACT,SAAS;;EAEX;IACE,MAAM;IACN,SAAS;IACT,SAAS;;EAEX;IACE,MAAM;IACN,SAAS;IACT,SAAS;;;EAGX;IACE,MAAM;IACN,SAAS;IACT,SAAS;;;;;;;;EAQX;IACE,MAAM;IACN,SAAS;IACT,SAAS;;EAEX;IACE,MAAM;IACN,SAAS;IACT,SAAS;;EAEX;IACE,MAAM;IACN,SAAS;IACT,SAAS;;EAEX;IACE,MAAM;IACN,SAAS;IACT,SAAS;;EAEX;IACE,MAAM;IACN,SAAS;IACT,SAAS;;EAEX;IACE,MAAM;IACN,SAAS;IACT,SAAS;;EAEX;IACE,MAAM;IACN,SAAS;IACT,SAAS;;EAEX;IACE,MAAM;IACN,SAAS;IACT,SAAS;;EAEX;IACE,MAAM;IACN,SAAS;IACT,SACE;;;EAGJ;IACE,MAAM;IACN,SAAS;IACT,SAAS;;;EAGX;IACE,MAAM;IACN,SAAS;IACT,SACE;;EAEJ;IACE,MAAM;IACN,SAAS;IACT,SAAS;;EAEX;IACE,MAAM;IACN,SAAS;IACT,SACE;;EAEJ;IACE,MAAM;IACN,SAAS;IACT,SAAS;;EAEX;IACE,MAAM;IACN,SAAS;IACT,SAAS;;;EAGX;IACE,MAAM;IACN,SAAS;IACT,SACE;;EAEJ;IACE,MAAM;IACN,SAAS;IACT,SACE;;EAEJ;IACE,MAAM;IACN,SAAS;IACT,SAAS;;;EAGX;IACE,MAAM;IACN,SAAS;IACT,SAAS;;EAEX;IACE,MAAM;IACN,SAAS;IACT,SAAS;;EAEX;IACE,MAAM;IACN,SAAS;IACT,SAAS;;EAEX;IACE,MAAM;IACN,SAAS;IACT,SAAS;;;EAGX;IACE,MAAM;IACN,SAAS;IACT,SACE;;CAEL;AAmBK,SAAU,mBAAmB,SAAe;AAChD,MAAI,OAAO,YAAY,UAAU;AAC/B,WAAO;EACT;AACA,QAAM,aAAa,QAAQ,KAAI;AAC/B,aAAW,SAAS,sBAAsB;AACxC,QAAI,eAAe,MAAM,QAAQ,WAAW,WAAW,GAAG,MAAM,IAAI,GAAG,GAAG;AACxE,aAAO;IACT;EACF;AACA,SAAO;AACT;AAQM,SAAU,oBAAoB,UAA0B;AAC5D,QAAM,MAA8B,CAAA;AACpC,aAAW,WAAW,UAAU;AAC9B,UAAM,QAAQ,mBAAmB,OAAO;AACxC,QAAI,UAAU,UAAa,CAAC,OAAO,UAAU,eAAe,KAAK,KAAK,MAAM,IAAI,GAAG;AACjF,UAAI,MAAM,IAAI,IAAI,MAAM;IAC1B;EACF;AACA,SAAO;AACT;AAQM,SAAU,yBAAyB,UAA0B;AACjE,SAAO,OAAO,OAAO,oBAAoB,QAAQ,CAAC;AACpD","debugId":"a07f6898-1c0c-5eb9-98f9-4f8aef2001f5"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../../core/item/priority.ts","../../../../../../../../core/item/type-synonyms.ts","../../../../../../../../cli/commands/metadata-normalizers.ts","../../../../../../../../cli/commands/legacy-none-tokens.ts","../../../../../../../../cli/commands/recurrence-parsers.ts","../../../../../../../../cli/commands/event-validation-messages.ts","../../../../../../../../cli/commands/repeatable-metadata-parsers.ts","../../../../../../../../cli/commands/create.ts"],"sourcesContent":["import { PmCliError } from \"../shared/errors.js\";\nimport { EXIT_CODE } from \"../shared/constants.js\";\n\nexport type Priority = 0 | 1 | 2 | 3 | 4;\n\n/**\n * Canonical mapping from named priority levels to numeric values. Agents and\n * humans frequently write words (\"high\") instead of numbers, so both create and\n * update accept either form. This single map is the source of truth so the two\n * commands cannot drift apart.\n */\nexport const PRIORITY_NAME_TO_VALUE: Readonly<Record<string, Priority>> = {\n critical: 0,\n high: 1,\n medium: 2,\n low: 3,\n minimal: 4,\n};\n\nconst PRIORITY_NAME_LIST = Object.keys(PRIORITY_NAME_TO_VALUE);\n\n/**\n * Human-readable description of every accepted priority form. Reused in error\n * messages so the wording stays consistent across commands.\n */\nexport const PRIORITY_ACCEPTED_FORMS_HINT =\n \"numbers 0..4 (0=critical, 1=high, 2=medium, 3=low, 4=minimal) or names \" +\n `(${PRIORITY_NAME_LIST.join(\", \")}), case-insensitive`;\n\nfunction priorityUsageError(raw: string): PmCliError {\n return new PmCliError(\n `Invalid priority \"${raw}\". Accepted values: ${PRIORITY_ACCEPTED_FORMS_HINT}.`,\n EXIT_CODE.USAGE,\n );\n}\n\n/**\n * Resolve a raw `--priority` option value to a numeric 0..4 priority.\n *\n * Accepts:\n * - numeric strings 0,1,2,3,4 (unchanged from prior behavior)\n * - named levels (critical/high/medium/low/minimal), case-insensitive\n * - native numbers 0..4 (arrives via MCP tool calls that JSON-encode priority as a number)\n *\n * Throws a USAGE error listing BOTH accepted forms for anything else.\n */\nexport function resolvePriority(raw: string | number): Priority {\n if (typeof raw === \"number\") {\n if (Number.isInteger(raw) && raw >= 0 && raw <= 4) {\n return raw as Priority;\n }\n throw priorityUsageError(String(raw));\n }\n if (typeof raw !== \"string\") {\n throw priorityUsageError(String(raw));\n }\n const trimmed = raw.trim();\n if (trimmed.length === 0) {\n throw priorityUsageError(raw);\n }\n\n const normalizedName = trimmed.toLowerCase();\n if (Object.prototype.hasOwnProperty.call(PRIORITY_NAME_TO_VALUE, normalizedName)) {\n return PRIORITY_NAME_TO_VALUE[normalizedName as keyof typeof PRIORITY_NAME_TO_VALUE];\n }\n\n // Numeric form: only exact integers 0..4 are valid. Number() would accept\n // forms like \"1.0\" or \" 2 \", but we already trimmed and require an integer\n // match so the contract stays tight.\n if (/^[0-4]$/.test(trimmed)) {\n return Number(trimmed) as Priority;\n }\n\n throw priorityUsageError(raw);\n}\n","/**\n * Common type synonyms agents type that are not item types themselves. Telemetry\n * shows real users repeatedly run e.g. `pm create Bug \"...\"` and `pm create Change\n * \"...\"` and hit a hard \"invalid type\" error. Rather than block, `create` maps an\n * unregistered type through this table to its closest canonical built-in type (and\n * prints a note). The mapping is only a FALLBACK: it applies after the real type\n * registry fails to resolve the name, and the canonical target is itself resolved\n * through the live registry — so a project that defines its own `Bug` type keeps it,\n * and a project that has removed `Issue` will simply fall through to the normal error.\n *\n * Keys are compared case-insensitively after trimming. Values are canonical built-in\n * type names (resolved through the registry, never written verbatim).\n */\nexport const TYPE_SYNONYMS: Readonly<Record<string, string>> = {\n bug: \"Issue\",\n bugfix: \"Issue\",\n defect: \"Issue\",\n incident: \"Issue\",\n enhancement: \"Feature\",\n story: \"Feature\",\n userstory: \"Feature\",\n \"user-story\": \"Feature\",\n \"user story\": \"Feature\",\n change: \"Chore\",\n ticket: \"Task\",\n todo: \"Task\",\n};\n\n/**\n * Map a free-form type token to its canonical built-in type synonym, or `undefined`\n * when there is no synonym. The caller must still confirm the canonical target exists\n * in the active type registry before using it.\n */\nexport function resolveTypeSynonym(rawType: string | undefined): string | undefined {\n if (rawType === undefined) {\n return undefined;\n }\n return TYPE_SYNONYMS[rawType.trim().toLowerCase()];\n}\n","import { EXIT_CODE } from \"../../core/shared/constants.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { parseOptionalNumber } from \"../../core/item/parse.js\";\nimport { CONFIDENCE_TEXT_VALUES } from \"../../types/index.js\";\n\nexport function normalizeRiskInput(value: string): string {\n const trimmed = value.trim();\n return trimmed.toLowerCase() === \"med\" ? \"medium\" : trimmed;\n}\n\nexport function normalizeSeverityInput(value: string): string {\n const trimmed = value.trim();\n return trimmed.toLowerCase() === \"med\" ? \"medium\" : trimmed;\n}\n\nexport function parseConfidenceInput(value: string): number | \"low\" | \"medium\" | \"high\" {\n const trimmed = value.trim().toLowerCase();\n if (trimmed === \"med\") {\n return \"medium\";\n }\n if (CONFIDENCE_TEXT_VALUES.includes(trimmed as (typeof CONFIDENCE_TEXT_VALUES)[number])) {\n return trimmed as (typeof CONFIDENCE_TEXT_VALUES)[number];\n }\n const parsed = parseOptionalNumber(value, \"confidence\");\n if (!Number.isInteger(parsed) || parsed < 0 || parsed > 100) {\n throw new PmCliError(\"Confidence must be an integer 0..100 or one of low|med|medium|high\", EXIT_CODE.USAGE);\n }\n return parsed;\n}\n\nexport function parseRegressionInput(value: string): boolean {\n const normalized = value.trim().toLowerCase();\n if (normalized === \"true\" || normalized === \"1\") {\n return true;\n }\n if (normalized === \"false\" || normalized === \"0\") {\n return false;\n }\n throw new PmCliError(\"Regression must be one of true|false|1|0\", EXIT_CODE.USAGE);\n}\n","import { EXIT_CODE } from \"../../core/shared/constants.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\n\n/**\n * Shared legacy \"none\"/\"null\" sentinel handling for the create and update\n * commands. These tokens used to mean \"clear this field\"; they are now\n * rejected in favour of explicit --unset / --clear-* flags.\n *\n * Extracted verbatim from create.ts and update.ts (pm-why9) — behaviour and\n * error strings are identical to the previous per-command copies.\n */\nconst LEGACY_NONE_TOKENS = new Set([\"none\", \"null\"]);\n\nexport function isLegacyNoneToken(value: string | undefined): boolean {\n if (value === undefined) {\n return false;\n }\n return LEGACY_NONE_TOKENS.has(value.trim().toLowerCase());\n}\n\nexport function assertNoLegacyNoneToken(value: string | undefined, flag: string, replacementHint?: string): void {\n if (!isLegacyNoneToken(value)) {\n return;\n }\n const suffix = replacementHint ? ` ${replacementHint}` : \"\";\n throw new PmCliError(`${flag} no longer accepts \"none\" or \"null\".${suffix}`.trim(), EXIT_CODE.USAGE);\n}\n\nexport function assertNoLegacyNoneTokens(values: string[] | undefined, flag: string, replacementHint?: string): void {\n if (!values || values.length === 0) {\n return;\n }\n const hasLegacyToken = values.some((value) => isLegacyNoneToken(value));\n if (!hasLegacyToken) {\n return;\n }\n const suffix = replacementHint ? ` ${replacementHint}` : \"\";\n throw new PmCliError(`${flag} no longer accepts \"none\" or \"null\".${suffix}`.trim(), EXIT_CODE.USAGE);\n}\n","import { parseOptionalNumber } from \"../../core/item/parse.js\";\nimport { EXIT_CODE } from \"../../core/shared/constants.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { resolveIsoOrRelative } from \"../../core/shared/time.js\";\nimport {\n RECURRENCE_FREQUENCY_VALUES,\n RECURRENCE_WEEKDAY_VALUES,\n weekdayOrderIndex,\n} from \"../../types/index.js\";\nimport type { RecurrenceRule } from \"../../types/index.js\";\n\n/**\n * Shared calendar recurrence/event parsing helpers used by the `create` and\n * `update` commands. Extracted verbatim from create.ts and update.ts (pm-why9).\n *\n * `parseEventBoolean`, `parseDelimitedList`, and `ensureEnumValue` were\n * byte-identical between the two commands (update spelled `ensureEnumValue` as\n * `ensureEnum`).\n *\n * `parseRecurrenceRule` was identical apart from the recur_interval/recur_count\n * \"provided\" guard: create used `intervalRaw !== undefined` (an empty\n * `recur_interval=` is parsed and rejected), while update used the truthy\n * `intervalRaw ?` (an empty value is skipped). That distinction is preserved\n * via the `emptyNumericGuard` option so both call sites keep their exact\n * behaviour, including error strings.\n */\n\nexport function parseEventBoolean(value: string, flag: string): boolean {\n const normalized = value.trim().toLowerCase();\n if (normalized === \"true\" || normalized === \"1\" || normalized === \"yes\") {\n return true;\n }\n if (normalized === \"false\" || normalized === \"0\" || normalized === \"no\") {\n return false;\n }\n throw new PmCliError(`${flag} must be one of true|false|1|0|yes|no`, EXIT_CODE.USAGE);\n}\n\nexport function parseDelimitedList(raw: string | undefined): string[] {\n if (!raw) {\n return [];\n }\n return raw\n .split(\"|\")\n .map((value) => value.trim())\n .filter((value) => value.length > 0);\n}\n\nexport function ensureEnumValue<T extends string>(value: string, allowed: readonly T[], label: string): T {\n if (!allowed.includes(value as T)) {\n throw new PmCliError(`Invalid ${label} value \"${value}\". Allowed: ${allowed.join(\", \")}`, EXIT_CODE.USAGE);\n }\n return value as T;\n}\n\n/**\n * `\"defined\"` parses `recur_interval=`/`recur_count=` (empty values), matching\n * the historical `create` behaviour. `\"truthy\"` skips empty values, matching\n * the historical `update` behaviour.\n */\nexport type RecurrenceEmptyNumericGuard = \"defined\" | \"truthy\";\n\nexport function parseRecurrenceRule(\n kv: Record<string, string>,\n startAt: string,\n nowValue: Date,\n emptyNumericGuard: RecurrenceEmptyNumericGuard,\n): RecurrenceRule | undefined {\n const freqRaw = kv.recur_freq?.trim();\n const intervalRaw = kv.recur_interval?.trim();\n const countRaw = kv.recur_count?.trim();\n const untilRaw = kv.recur_until?.trim();\n const byWeekdayRaw = kv.recur_by_weekday?.trim();\n const byMonthDayRaw = kv.recur_by_month_day?.trim();\n const exdatesRaw = kv.recur_exdates?.trim();\n\n const recurrenceInputsProvided = [freqRaw, intervalRaw, countRaw, untilRaw, byWeekdayRaw, byMonthDayRaw, exdatesRaw].some(\n (value) => value !== undefined,\n );\n if (!recurrenceInputsProvided) {\n return undefined;\n }\n if (!freqRaw) {\n throw new PmCliError(\"--event recurrence fields require recur_freq=<daily|weekly|monthly|yearly>\", EXIT_CODE.USAGE);\n }\n\n const numericProvided = (raw: string | undefined): boolean =>\n emptyNumericGuard === \"defined\" ? raw !== undefined : Boolean(raw);\n\n const freq = ensureEnumValue(freqRaw.toLowerCase(), RECURRENCE_FREQUENCY_VALUES, \"event recurrence frequency\");\n const interval = numericProvided(intervalRaw) ? parseOptionalNumber(intervalRaw as string, \"event recur_interval\") : undefined;\n if (interval !== undefined && (!Number.isInteger(interval) || interval < 1)) {\n throw new PmCliError(\"--event recur_interval must be an integer >= 1\", EXIT_CODE.USAGE);\n }\n const count = numericProvided(countRaw) ? parseOptionalNumber(countRaw as string, \"event recur_count\") : undefined;\n if (count !== undefined && (!Number.isInteger(count) || count < 1)) {\n throw new PmCliError(\"--event recur_count must be an integer >= 1\", EXIT_CODE.USAGE);\n }\n const until = untilRaw ? resolveIsoOrRelative(untilRaw, nowValue, \"event.recur_until\") : undefined;\n if (until && until < startAt) {\n throw new PmCliError(\"--event recur_until must be at or after start\", EXIT_CODE.USAGE);\n }\n\n const byWeekday = Array.from(\n new Set(\n parseDelimitedList(byWeekdayRaw).map((value) => ensureEnumValue(value.toLowerCase(), RECURRENCE_WEEKDAY_VALUES, \"event weekday\")),\n ),\n ).sort(\n (left, right) =>\n weekdayOrderIndex(left as (typeof RECURRENCE_WEEKDAY_VALUES)[number]) -\n weekdayOrderIndex(right as (typeof RECURRENCE_WEEKDAY_VALUES)[number]),\n );\n\n const byMonthDay = Array.from(\n new Set(\n parseDelimitedList(byMonthDayRaw).map((value) => {\n const day = parseOptionalNumber(value, \"event recur_by_month_day\");\n if (!Number.isInteger(day) || day < 1 || day > 31) {\n throw new PmCliError(\"--event recur_by_month_day values must be integers 1..31\", EXIT_CODE.USAGE);\n }\n return day;\n }),\n ),\n ).sort((left, right) => left - right);\n\n const exdates = Array.from(\n new Set(parseDelimitedList(exdatesRaw).map((value) => resolveIsoOrRelative(value, nowValue, \"event.recur_exdates\"))),\n ).sort((left, right) => left.localeCompare(right));\n\n return {\n freq,\n interval,\n count,\n until,\n by_weekday: byWeekday.length > 0 ? byWeekday : undefined,\n by_month_day: byMonthDay.length > 0 ? byMonthDay : undefined,\n exdates: exdates.length > 0 ? exdates : undefined,\n };\n}\n","import { EXIT_CODE } from \"../../core/shared/constants.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { resolveIsoOrRelative } from \"../../core/shared/time.js\";\n\nexport const EVENT_END_AFTER_START_MESSAGE =\n \"--event end must be strictly after start. Equal start/end timestamps are treated as an instant event (end is dropped); an end earlier than start is rejected. Omit end for an instant event or set end later than start.\";\n\nexport const EVENT_END_DURATION_MUTUALLY_EXCLUSIVE_MESSAGE =\n \"--event end and duration are mutually exclusive; provide only one (use duration=<relative> like duration=2h, or set an explicit end).\";\n\n// Shared by `pm create` (parseEvents) and `pm update` (parseEventEntries) so the\n// two parallel parse sites cannot drift. Resolves the event end timestamp from\n// either an explicit `end` or a relative `duration` (mutually exclusive).\n// Equal start/end (including a zero-length duration) collapses to an instant\n// event (end dropped); an end earlier than start is rejected.\nexport function resolveEventEndAt(\n startAt: string,\n endRaw: string | undefined,\n durationRaw: string | undefined,\n referenceDate: Date,\n): string | undefined {\n if (endRaw && durationRaw) {\n throw new PmCliError(EVENT_END_DURATION_MUTUALLY_EXCLUSIVE_MESSAGE, EXIT_CODE.USAGE);\n }\n if (durationRaw) {\n // Reuse the relative-offset parser with startAt as the reference so duration=2h means startAt + 2h.\n const normalizedDuration = durationRaw.startsWith(\"+\") ? durationRaw : `+${durationRaw}`;\n const endAt = resolveIsoOrRelative(normalizedDuration, new Date(startAt), \"event.duration\");\n if (endAt < startAt) {\n throw new PmCliError(EVENT_END_AFTER_START_MESSAGE, EXIT_CODE.USAGE);\n }\n // A zero-length duration is an instant event, mirroring explicit equal start/end.\n if (endAt === startAt) {\n return undefined;\n }\n return endAt;\n }\n if (!endRaw) {\n return undefined;\n }\n const endAt = resolveIsoOrRelative(endRaw, referenceDate, \"event.end\");\n if (endAt < startAt) {\n throw new PmCliError(EVENT_END_AFTER_START_MESSAGE, EXIT_CODE.USAGE);\n }\n // Equal start/end collapses to an instant event (drop end) instead of being rejected.\n if (endAt === startAt) {\n return undefined;\n }\n return endAt;\n}\n","import { parseCsvKv } from \"../../core/item/parse.js\";\nimport { EXIT_CODE } from \"../../core/shared/constants.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { resolveIsoOrRelative } from \"../../core/shared/time.js\";\nimport type { CalendarEvent, Reminder } from \"../../types/index.js\";\nimport { resolveEventEndAt } from \"./event-validation-messages.js\";\nimport {\n parseEventBoolean,\n parseRecurrenceRule,\n type RecurrenceEmptyNumericGuard,\n} from \"./recurrence-parsers.js\";\n\ntype EmptyValueGuard = \"defined\" | \"truthy\";\ntype ReminderValueMode = \"raw\" | \"trimmed\";\n\ninterface ParseReminderEntriesOptions {\n valueMode: ReminderValueMode;\n}\n\ninterface ParseEventEntriesOptions {\n allDayEmptyGuard: EmptyValueGuard;\n recurrenceEmptyNumericGuard: RecurrenceEmptyNumericGuard;\n}\n\nfunction optionalString(value: string | undefined, mode: ReminderValueMode): string | undefined {\n return mode === \"trimmed\" ? value?.trim() : value;\n}\n\nfunction isProvided(value: string | undefined, guard: EmptyValueGuard): boolean {\n return guard === \"defined\" ? value !== undefined : Boolean(value);\n}\n\nexport function parseReminderEntries(raw: string[], nowValue: Date, options: ParseReminderEntriesOptions): Reminder[] {\n return raw.map((entry) => {\n const kv = parseCsvKv(entry, \"--reminder\");\n const atRaw = optionalString(kv.at ?? kv.date, options.valueMode);\n const textRaw = optionalString(kv.text ?? kv.title, options.valueMode);\n if (!atRaw || !textRaw) {\n throw new PmCliError(\"--reminder requires at=<iso|relative> or date=<iso|relative>, plus text=<value> or title=<value>\", EXIT_CODE.USAGE);\n }\n const text = textRaw.trim();\n if (!text) {\n throw new PmCliError(\"--reminder text must not be empty\", EXIT_CODE.USAGE);\n }\n return {\n at: resolveIsoOrRelative(atRaw, nowValue, \"reminder.at\"),\n text,\n };\n });\n}\n\nexport function parseEventEntries(raw: string[], nowValue: Date, options: ParseEventEntriesOptions): CalendarEvent[] {\n return raw.map((entry) => {\n const kv = parseCsvKv(entry, \"--event\");\n const startRaw = (kv.start ?? kv.date)?.trim();\n if (!startRaw) {\n throw new PmCliError(\"--event requires start=<iso|relative> or date=<iso|relative>\", EXIT_CODE.USAGE);\n }\n const startAt = resolveIsoOrRelative(startRaw, nowValue, \"event.start\");\n const endRaw = kv.end?.trim();\n const durationRaw = kv.duration?.trim();\n const endAt = resolveEventEndAt(startAt, endRaw, durationRaw, nowValue);\n\n const titleRaw = kv.title;\n const descriptionRaw = kv.description;\n const locationRaw = kv.location;\n const timezoneRaw = kv.timezone;\n\n const title = titleRaw?.trim();\n const description = descriptionRaw?.trim();\n const location = locationRaw?.trim();\n const timezone = timezoneRaw?.trim();\n if (titleRaw !== undefined && !title) {\n throw new PmCliError(\"--event title must not be empty\", EXIT_CODE.USAGE);\n }\n if (descriptionRaw !== undefined && !description) {\n throw new PmCliError(\"--event description must not be empty\", EXIT_CODE.USAGE);\n }\n if (locationRaw !== undefined && !location) {\n throw new PmCliError(\"--event location must not be empty\", EXIT_CODE.USAGE);\n }\n if (timezoneRaw !== undefined && !timezone) {\n throw new PmCliError(\"--event timezone must not be empty\", EXIT_CODE.USAGE);\n }\n\n const allDayRaw = kv.all_day?.trim();\n const recurrence = parseRecurrenceRule(kv, startAt, nowValue, options.recurrenceEmptyNumericGuard);\n const allDay = isProvided(allDayRaw, options.allDayEmptyGuard)\n ? parseEventBoolean(allDayRaw as string, \"--event all_day\")\n : undefined;\n\n return {\n start_at: startAt,\n end_at: endAt,\n title,\n description,\n location,\n all_day: allDay,\n timezone,\n recurrence,\n };\n });\n}\n\nexport function parseTypeOptionEntries(raw: string[]): Record<string, string> {\n const values: Record<string, string> = {};\n for (const entry of raw) {\n const trimmedEntry = entry.trim();\n if (trimmedEntry.length === 0) {\n throw new PmCliError(\"--type-option values must not be empty\", EXIT_CODE.USAGE);\n }\n let key: string | undefined;\n let value: string | undefined;\n const prefersStructuredKv =\n trimmedEntry.includes(\",\") ||\n trimmedEntry.includes(\"\\n\") ||\n trimmedEntry.startsWith(\"```\") ||\n /^(?:[-*+]\\s+)?(?:key|value)\\s*[:=]/i.test(trimmedEntry);\n if (prefersStructuredKv) {\n const kv = parseCsvKv(trimmedEntry, \"--type-option\");\n key = kv.key?.trim();\n value = kv.value?.trim();\n } else {\n const equalsIndex = trimmedEntry.indexOf(\"=\");\n const colonIndex = trimmedEntry.indexOf(\":\");\n let separatorIndex = equalsIndex;\n if (equalsIndex <= 0 && colonIndex > 0) {\n separatorIndex = colonIndex;\n }\n if (separatorIndex <= 0 || separatorIndex === trimmedEntry.length - 1) {\n throw new PmCliError(\n \"--type-option requires key=value or key=<name>,value=<value> entries\",\n EXIT_CODE.USAGE,\n );\n }\n key = trimmedEntry.slice(0, separatorIndex).trim();\n value = trimmedEntry.slice(separatorIndex + 1).trim();\n }\n if (!key || !value) {\n throw new PmCliError(\"--type-option requires key and value\", EXIT_CODE.USAGE);\n }\n values[key] = value;\n }\n return Object.fromEntries(Object.entries(values).sort((left, right) => left[0].localeCompare(right[0])));\n}\n","import { pathExists, removeFileIfExists, writeFileAtomic } from \"../../core/fs/fs-utils.js\";\nimport { appendHistoryEntry, createHistoryEntry } from \"../../core/history/history.js\";\nimport { generateItemId, normalizeItemId } from \"../../core/item/id.js\";\nimport { canonicalDocument, normalizeFrontMatter, serializeItemDocument } from \"../../core/item/item-format.js\";\nimport {\n normalizeParentReferenceValue,\n validateMissingParentReference,\n} from \"../../core/item/parent-reference-policy.js\";\nimport { validateSprintOrReleaseValue } from \"../../core/item/sprint-release-format.js\";\nimport { createStdinTokenResolver, mergeAdditiveTags, parseCsvKv, parseOptionalNumber, parseTags } from \"../../core/item/parse.js\";\nimport { resolvePriority } from \"../../core/item/priority.js\";\nimport { normalizeStatusInput } from \"../../core/item/status.js\";\nimport {\n canonicalizeCommandOptionKey,\n commandOptionFlagLabel,\n resolveItemTypeRegistry,\n resolveCommandOptionPolicyState,\n type ResolvedItemTypeDefinition,\n resolveTypeDefinition,\n resolveTypeName,\n validateTypeOptions,\n} from \"../../core/item/type-registry.js\";\nimport { acquireLock } from \"../../core/lock/lock.js\";\nimport { printError } from \"../../core/output/output.js\";\nimport { buildInvalidTypeError } from \"../../core/schema/item-types-file.js\";\nimport { resolveTypeSynonym } from \"../../core/item/type-synonyms.js\";\nimport { collectRuntimeCreateFieldValues } from \"../../core/schema/runtime-field-values.js\";\nimport {\n type RuntimeFieldRegistry,\n resolveRuntimeFieldRegistry,\n resolveRuntimeStatusRegistry,\n type RuntimeStatusRegistry,\n} from \"../../core/schema/runtime-schema.js\";\nimport { EXIT_CODE, FRONT_MATTER_KEY_ORDER } from \"../../core/shared/constants.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { nowIso, resolveIsoOrRelative } from \"../../core/shared/time.js\";\nimport {\n getActiveExtensionRegistrations,\n projectAfterCommandItemSnapshot,\n recordAfterCommandAffectedItem,\n runActiveCommandHandler,\n runActiveOnWriteHooks,\n} from \"../../core/extensions/index.js\";\nimport {\n collectRegisteredItemFieldNames,\n applyRegisteredItemFieldDefaultsAndValidation,\n parseRegisteredItemFieldAssignments,\n} from \"../../core/extensions/item-fields.js\";\nimport { locateItem } from \"../../core/store/item-store.js\";\nimport { getHistoryPath, getItemPath, getSettingsPath, resolvePmRoot } from \"../../core/store/paths.js\";\nimport { readSettings } from \"../../core/store/settings.js\";\nimport {\n normalizeRiskInput,\n normalizeSeverityInput,\n parseConfidenceInput,\n parseRegressionInput,\n} from \"./metadata-normalizers.js\";\nimport { assertNoLegacyNoneToken, assertNoLegacyNoneTokens, isLegacyNoneToken } from \"./legacy-none-tokens.js\";\nimport {\n parseLinkedTestAssertionEqualsMap,\n parseLinkedTestAssertionGteMap,\n parseLinkedTestBoolean,\n parseLinkedTestContextMode,\n parseLinkedTestEnvClear,\n parseLinkedTestEnvSet,\n parseLinkedTestMinLines,\n parseLinkedTestRegexList,\n parseLinkedTestStringList,\n} from \"./linked-test-parsers.js\";\nimport { looksLikeStructuredLinkedTestEntry, normalizeStructuredLinkedTestEntry } from \"./linked-test-entry.js\";\nimport { ensureEnumValue } from \"./recurrence-parsers.js\";\nimport {\n parseEventEntries,\n parseReminderEntries,\n parseTypeOptionEntries,\n} from \"./repeatable-metadata-parsers.js\";\nimport type {\n CalendarEvent,\n Comment,\n Dependency,\n ItemDocument,\n ItemMetadata,\n ItemStatus,\n LinkedDoc,\n LinkedFile,\n LinkedTest,\n LogNote,\n Reminder,\n} from \"../../types/index.js\";\nimport {\n DEPENDENCY_KIND_VALUES,\n ISSUE_SEVERITY_VALUES,\n RISK_VALUES,\n SCOPE_VALUES,\n} from \"../../types/index.js\";\n\nexport interface CreateCommandOptions {\n title?: string;\n description?: string;\n type?: string;\n status?: string;\n priority?: string;\n tags?: string;\n addTags?: string[];\n body?: string;\n deadline?: string;\n estimatedMinutes?: string;\n acceptanceCriteria?: string;\n definitionOfReady?: string;\n order?: string;\n rank?: string;\n goal?: string;\n objective?: string;\n value?: string;\n impact?: string;\n outcome?: string;\n whyNow?: string;\n author?: string;\n message?: string;\n assignee?: string;\n parent?: string;\n reviewer?: string;\n risk?: string;\n confidence?: string;\n sprint?: string;\n release?: string;\n blockedBy?: string;\n blockedReason?: string;\n unblockNote?: string;\n reporter?: string;\n severity?: string;\n environment?: string;\n reproSteps?: string;\n resolution?: string;\n expectedResult?: string;\n actualResult?: string;\n affectedVersion?: string;\n fixedVersion?: string;\n component?: string;\n regression?: string;\n customerImpact?: string;\n dep?: string[];\n comment?: string[];\n note?: string[];\n learning?: string[];\n file?: string[];\n test?: string[];\n doc?: string[];\n reminder?: string[];\n event?: string[];\n typeOption?: string[];\n field?: string[];\n template?: string;\n createMode?: string;\n schedulePreset?: string;\n unset?: string[];\n clearDeps?: boolean;\n clearComments?: boolean;\n clearNotes?: boolean;\n clearLearnings?: boolean;\n clearFiles?: boolean;\n clearTests?: boolean;\n clearDocs?: boolean;\n clearReminders?: boolean;\n clearEvents?: boolean;\n clearTypeOptions?: boolean;\n [key: string]: unknown;\n}\n\nexport interface CreateResult {\n item: ItemMetadata;\n changed_fields: string[];\n warnings: string[];\n}\n\ntype CreateMode = \"strict\" | \"progressive\";\nconst CREATE_MODE_VALUES = [\"strict\", \"progressive\"] as const;\ntype ScheduleCreatePreset = \"lightweight\";\nconst SCHEDULE_CREATE_PRESET_VALUES = [\"lightweight\"] as const;\nconst SCHEDULE_CREATE_PRESET_TYPES = new Set([\"Reminder\", \"Meeting\", \"Event\"]);\nconst LOG_SEED_ALLOWED_KEYS = new Set([\"author\", \"created_at\", \"text\"]);\n\ninterface CreateUnsetFieldDefinition {\n optionKey: string;\n frontMatterKey: string;\n}\n\nconst CREATE_UNSET_FIELD_DEFINITIONS: ReadonlyArray<{\n canonical: string;\n aliases: readonly string[];\n optionKey: string;\n frontMatterKey: string;\n}> = [\n { canonical: \"tags\", aliases: [\"tags\"], optionKey: \"tags\", frontMatterKey: \"tags\" },\n { canonical: \"deadline\", aliases: [\"deadline\"], optionKey: \"deadline\", frontMatterKey: \"deadline\" },\n {\n canonical: \"estimate\",\n aliases: [\"estimate\", \"estimated_minutes\", \"estimated-minutes\"],\n optionKey: \"estimatedMinutes\",\n frontMatterKey: \"estimated_minutes\",\n },\n {\n canonical: \"acceptance-criteria\",\n aliases: [\"acceptance_criteria\", \"acceptance-criteria\", \"ac\"],\n optionKey: \"acceptanceCriteria\",\n frontMatterKey: \"acceptance_criteria\",\n },\n {\n canonical: \"definition-of-ready\",\n aliases: [\"definition_of_ready\", \"definition-of-ready\"],\n optionKey: \"definitionOfReady\",\n frontMatterKey: \"definition_of_ready\",\n },\n { canonical: \"order\", aliases: [\"order\", \"rank\"], optionKey: \"order\", frontMatterKey: \"order\" },\n { canonical: \"goal\", aliases: [\"goal\"], optionKey: \"goal\", frontMatterKey: \"goal\" },\n { canonical: \"objective\", aliases: [\"objective\"], optionKey: \"objective\", frontMatterKey: \"objective\" },\n { canonical: \"value\", aliases: [\"value\"], optionKey: \"value\", frontMatterKey: \"value\" },\n { canonical: \"impact\", aliases: [\"impact\"], optionKey: \"impact\", frontMatterKey: \"impact\" },\n { canonical: \"outcome\", aliases: [\"outcome\"], optionKey: \"outcome\", frontMatterKey: \"outcome\" },\n { canonical: \"why-now\", aliases: [\"why_now\", \"why-now\"], optionKey: \"whyNow\", frontMatterKey: \"why_now\" },\n { canonical: \"author\", aliases: [\"author\"], optionKey: \"author\", frontMatterKey: \"author\" },\n { canonical: \"assignee\", aliases: [\"assignee\"], optionKey: \"assignee\", frontMatterKey: \"assignee\" },\n { canonical: \"parent\", aliases: [\"parent\"], optionKey: \"parent\", frontMatterKey: \"parent\" },\n { canonical: \"reviewer\", aliases: [\"reviewer\"], optionKey: \"reviewer\", frontMatterKey: \"reviewer\" },\n { canonical: \"risk\", aliases: [\"risk\"], optionKey: \"risk\", frontMatterKey: \"risk\" },\n { canonical: \"confidence\", aliases: [\"confidence\"], optionKey: \"confidence\", frontMatterKey: \"confidence\" },\n { canonical: \"sprint\", aliases: [\"sprint\"], optionKey: \"sprint\", frontMatterKey: \"sprint\" },\n { canonical: \"release\", aliases: [\"release\"], optionKey: \"release\", frontMatterKey: \"release\" },\n {\n canonical: \"blocked-by\",\n aliases: [\"blocked_by\", \"blocked-by\"],\n optionKey: \"blockedBy\",\n frontMatterKey: \"blocked_by\",\n },\n {\n canonical: \"blocked-reason\",\n aliases: [\"blocked_reason\", \"blocked-reason\"],\n optionKey: \"blockedReason\",\n frontMatterKey: \"blocked_reason\",\n },\n {\n canonical: \"unblock-note\",\n aliases: [\"unblock_note\", \"unblock-note\"],\n optionKey: \"unblockNote\",\n frontMatterKey: \"unblock_note\",\n },\n { canonical: \"reporter\", aliases: [\"reporter\"], optionKey: \"reporter\", frontMatterKey: \"reporter\" },\n { canonical: \"severity\", aliases: [\"severity\"], optionKey: \"severity\", frontMatterKey: \"severity\" },\n {\n canonical: \"environment\",\n aliases: [\"environment\"],\n optionKey: \"environment\",\n frontMatterKey: \"environment\",\n },\n {\n canonical: \"repro-steps\",\n aliases: [\"repro_steps\", \"repro-steps\"],\n optionKey: \"reproSteps\",\n frontMatterKey: \"repro_steps\",\n },\n {\n canonical: \"resolution\",\n aliases: [\"resolution\"],\n optionKey: \"resolution\",\n frontMatterKey: \"resolution\",\n },\n {\n canonical: \"expected-result\",\n aliases: [\"expected_result\", \"expected-result\"],\n optionKey: \"expectedResult\",\n frontMatterKey: \"expected_result\",\n },\n {\n canonical: \"actual-result\",\n aliases: [\"actual_result\", \"actual-result\"],\n optionKey: \"actualResult\",\n frontMatterKey: \"actual_result\",\n },\n {\n canonical: \"affected-version\",\n aliases: [\"affected_version\", \"affected-version\"],\n optionKey: \"affectedVersion\",\n frontMatterKey: \"affected_version\",\n },\n {\n canonical: \"fixed-version\",\n aliases: [\"fixed_version\", \"fixed-version\"],\n optionKey: \"fixedVersion\",\n frontMatterKey: \"fixed_version\",\n },\n { canonical: \"component\", aliases: [\"component\"], optionKey: \"component\", frontMatterKey: \"component\" },\n { canonical: \"regression\", aliases: [\"regression\"], optionKey: \"regression\", frontMatterKey: \"regression\" },\n {\n canonical: \"customer-impact\",\n aliases: [\"customer_impact\", \"customer-impact\"],\n optionKey: \"customerImpact\",\n frontMatterKey: \"customer_impact\",\n },\n];\n\nconst CREATE_UNSET_ALIAS_MAP: Map<string, CreateUnsetFieldDefinition> = (() => {\n const map = new Map<string, CreateUnsetFieldDefinition>();\n for (const definition of CREATE_UNSET_FIELD_DEFINITIONS) {\n for (const alias of definition.aliases) {\n map.set(alias, {\n optionKey: definition.optionKey,\n frontMatterKey: definition.frontMatterKey,\n });\n }\n }\n return map;\n})();\n\nconst CREATE_OPTION_KEY_TO_UNSET_CANONICAL = new Map<string, string>(\n CREATE_UNSET_FIELD_DEFINITIONS.map((definition) => [definition.optionKey, definition.canonical]),\n);\n\nconst CREATE_UNSET_SUPPORTED_CANONICAL_FIELDS = CREATE_UNSET_FIELD_DEFINITIONS.map((definition) => definition.canonical)\n .sort((left, right) => left.localeCompare(right))\n .join(\", \");\n\nfunction buildInvalidLogSeedKeysMessage(\n optionName: \"--comment\" | \"--note\" | \"--learning\",\n unsupportedKeys: string[],\n): string {\n const sortedUnsupported = [...unsupportedKeys].sort((left, right) => left.localeCompare(right));\n const keyLabel = sortedUnsupported.length === 1 ? \"key\" : \"keys\";\n return (\n `${optionName} supports only author, created_at, and text seed fields. ` +\n `Found unsupported ${keyLabel}: ${sortedUnsupported.join(\", \")}. ` +\n `If text contains comma-separated key:value-like fragments, wrap text in quotes ` +\n '(for example text=\"first,scope:project\"), use markdown-style key/value input, ' +\n `or pass ${optionName} - with piped stdin.`\n );\n}\n\nfunction parseStatusValue(value: string, statusRegistry: RuntimeStatusRegistry): ItemStatus {\n const normalized = normalizeStatusInput(value, statusRegistry);\n if (!normalized) {\n const allowedStatuses = statusRegistry.definitions.map((definition) => definition.id);\n throw new PmCliError(`Invalid status value \"${value}\". Allowed: ${allowedStatuses.join(\", \")}`, EXIT_CODE.USAGE);\n }\n return normalized;\n}\n\n/**\n * Resolve the create-time status when `--status` is omitted: a config-driven\n * per-type `default_status` (from `pm schema add-type --default-status`) wins,\n * then the workflow open status. An unknown configured value degrades to the\n * open status rather than blocking the create (never-block-the-agent).\n */\nfunction resolveCreateDefaultStatus(\n typeDefinition: ResolvedItemTypeDefinition,\n statusRegistry: RuntimeStatusRegistry,\n): ItemStatus {\n const configured = typeDefinition.default_status;\n if (configured !== undefined) {\n const normalized = normalizeStatusInput(configured, statusRegistry);\n if (normalized) {\n return normalized;\n }\n }\n return statusRegistry.open_status;\n}\n\nfunction parseCreatedAt(value: string | undefined, currentIso: string): string {\n if (!value || value.trim() === \"\" || value.trim().toLowerCase() === \"now\") {\n return currentIso;\n }\n const parsed = Date.parse(value);\n if (!Number.isFinite(parsed)) {\n throw new PmCliError(`Invalid created_at timestamp \"${value}\"`, EXIT_CODE.USAGE);\n }\n return new Date(parsed).toISOString();\n}\n\ninterface LegacyNoneCollectionNormalizationDefinition {\n optionKey: keyof CreateCommandOptions;\n clearFlagKey: keyof CreateCommandOptions;\n valueFlag: string;\n clearFlag: string;\n}\n\nconst CREATE_LEGACY_NONE_COLLECTION_NORMALIZERS: ReadonlyArray<LegacyNoneCollectionNormalizationDefinition> = [\n { optionKey: \"dep\", clearFlagKey: \"clearDeps\", valueFlag: \"--dep\", clearFlag: \"--clear-deps\" },\n { optionKey: \"comment\", clearFlagKey: \"clearComments\", valueFlag: \"--comment\", clearFlag: \"--clear-comments\" },\n { optionKey: \"note\", clearFlagKey: \"clearNotes\", valueFlag: \"--note\", clearFlag: \"--clear-notes\" },\n { optionKey: \"learning\", clearFlagKey: \"clearLearnings\", valueFlag: \"--learning\", clearFlag: \"--clear-learnings\" },\n { optionKey: \"file\", clearFlagKey: \"clearFiles\", valueFlag: \"--file\", clearFlag: \"--clear-files\" },\n { optionKey: \"test\", clearFlagKey: \"clearTests\", valueFlag: \"--test\", clearFlag: \"--clear-tests\" },\n { optionKey: \"doc\", clearFlagKey: \"clearDocs\", valueFlag: \"--doc\", clearFlag: \"--clear-docs\" },\n { optionKey: \"reminder\", clearFlagKey: \"clearReminders\", valueFlag: \"--reminder\", clearFlag: \"--clear-reminders\" },\n { optionKey: \"event\", clearFlagKey: \"clearEvents\", valueFlag: \"--event\", clearFlag: \"--clear-events\" },\n { optionKey: \"typeOption\", clearFlagKey: \"clearTypeOptions\", valueFlag: \"--type-option\", clearFlag: \"--clear-type-options\" },\n];\n\nfunction normalizeLegacyNoneCreateOptions(options: CreateCommandOptions): CreateCommandOptions {\n const normalized: CreateCommandOptions = {\n ...options,\n unset: options.unset ? [...options.unset] : undefined,\n };\n const appendUnsetTarget = (value: string): void => {\n const current = normalized.unset ? [...normalized.unset] : [];\n if (!current.includes(value)) {\n current.push(value);\n }\n normalized.unset = current;\n };\n\n if (isLegacyNoneToken(normalized.template)) {\n normalized.template = undefined;\n }\n\n const scalarOptionKeys = new Set<string>([...CREATE_OPTION_KEY_TO_UNSET_CANONICAL.keys(), \"rank\"]);\n for (const optionKey of scalarOptionKeys) {\n const candidate = normalized[optionKey];\n if (typeof candidate !== \"string\" || !isLegacyNoneToken(candidate)) {\n continue;\n }\n const canonicalUnset = optionKey === \"rank\" ? \"order\" : (CREATE_OPTION_KEY_TO_UNSET_CANONICAL.get(optionKey) ?? optionKey);\n appendUnsetTarget(canonicalUnset);\n normalized[optionKey] = undefined;\n }\n\n for (const definition of CREATE_LEGACY_NONE_COLLECTION_NORMALIZERS) {\n const entries = normalized[definition.optionKey];\n if (!Array.isArray(entries) || entries.length === 0) {\n continue;\n }\n const hasLegacy = entries.some((entry) => isLegacyNoneToken(entry));\n if (!hasLegacy) {\n continue;\n }\n const concreteEntries = entries.filter((entry) => !isLegacyNoneToken(entry));\n if (concreteEntries.length > 0) {\n throw new PmCliError(\n `Cannot mix legacy clear token \"none\"/\"null\" with concrete ${definition.valueFlag} entries. Use ${definition.clearFlag} to clear or provide explicit entries.`,\n EXIT_CODE.USAGE,\n );\n }\n normalized[definition.optionKey] = undefined;\n normalized[definition.clearFlagKey] = true;\n }\n\n return normalized;\n}\n\nfunction parseOptionalString(value: string | undefined): string | undefined {\n if (value === undefined) return undefined;\n return value;\n}\n\nfunction resolveRuntimeCreateUnsetDefinition(\n token: string,\n runtimeFieldRegistry: RuntimeFieldRegistry | undefined,\n): CreateUnsetFieldDefinition | undefined {\n if (!runtimeFieldRegistry) {\n return undefined;\n }\n for (const definition of runtimeFieldRegistry.definitions) {\n if (definition.allow_unset === false) {\n continue;\n }\n const candidates = new Set<string>([\n definition.key,\n definition.metadata_key,\n definition.cli_flag.replaceAll(\"-\", \"_\"),\n definition.cli_flag,\n ...definition.cli_aliases.map((alias) => alias.replaceAll(\"-\", \"_\")),\n ...definition.cli_aliases,\n ]);\n if (!candidates.has(token)) {\n continue;\n }\n return {\n optionKey: definition.key,\n frontMatterKey: definition.metadata_key,\n };\n }\n return undefined;\n}\n\nfunction parseCreateUnsetTargets(\n raw: string[] | undefined,\n runtimeFieldRegistry?: RuntimeFieldRegistry,\n): { frontMatterKeys: Set<string>; optionKeys: Set<string> } {\n const frontMatterKeys = new Set<string>();\n const optionKeys = new Set<string>();\n if (!raw || raw.length === 0) {\n return { frontMatterKeys, optionKeys };\n }\n\n for (const entry of raw) {\n const trimmed = entry.trim().toLowerCase();\n if (!trimmed) {\n throw new PmCliError(\"--unset values must not be empty\", EXIT_CODE.USAGE);\n }\n if (isLegacyNoneToken(trimmed)) {\n throw new PmCliError(\n '--unset no longer accepts \"none\" or \"null\". Specify concrete field names such as --unset deadline',\n EXIT_CODE.USAGE,\n );\n }\n const definition = CREATE_UNSET_ALIAS_MAP.get(trimmed) ?? resolveRuntimeCreateUnsetDefinition(trimmed, runtimeFieldRegistry);\n if (!definition) {\n throw new PmCliError(\n `Unsupported --unset field \"${entry}\". Supported fields: ${CREATE_UNSET_SUPPORTED_CANONICAL_FIELDS}`,\n EXIT_CODE.USAGE,\n );\n }\n frontMatterKeys.add(definition.frontMatterKey);\n optionKeys.add(definition.optionKey);\n }\n\n return { frontMatterKeys, optionKeys };\n}\n\nfunction parseDependencies(\n raw: string[] | undefined,\n nowValue: string,\n prefix: string,\n): { values: Dependency[] | undefined; explicitEmpty: boolean } {\n if (!raw || raw.length === 0) return { values: undefined, explicitEmpty: false };\n assertNoLegacyNoneTokens(raw, \"--dep\", \"Use --clear-deps to clear dependencies.\");\n const values: Dependency[] = raw.map((entry) => {\n const trimmedEntry = entry.trim();\n const kv = looksLikeStructuredEntry(trimmedEntry, [\"id\", \"kind\", \"type\", \"author\", \"created_at\"])\n ? parseCsvKv(entry, \"--dep\")\n : { id: trimmedEntry, kind: \"related\" };\n const id = parseOptionalString(kv.id);\n const kind = normalizeDependencyKindInput(parseOptionalString(kv.kind ?? kv.type));\n if (!id || !kind) {\n throw new PmCliError(\"--dep requires id and kind, or a bare item id to create a related dependency\", EXIT_CODE.USAGE);\n }\n if (id.trim().toLowerCase() === \"undefined\") {\n throw new PmCliError(\n `--dep id must not use placeholder token \"${id}\". Use --clear-deps to clear dependencies.`,\n EXIT_CODE.USAGE,\n );\n }\n return {\n id: normalizeItemId(id, prefix),\n kind: ensureEnumValue(kind, DEPENDENCY_KIND_VALUES, \"dependency kind\"),\n created_at: parseCreatedAt(kv.created_at, nowValue),\n author: parseOptionalString(kv.author),\n };\n });\n return { values, explicitEmpty: false };\n}\n\nconst DEPENDENCY_KIND_INPUT_ALIASES: Readonly<Record<string, string>> = {\n \"blocked-by\": \"blocked_by\",\n depends_on: \"blocked_by\",\n \"depends-on\": \"blocked_by\",\n};\n\nfunction normalizeDependencyKindInput(raw: string | undefined): string | undefined {\n if (typeof raw !== \"string\") {\n return raw;\n }\n const alias = DEPENDENCY_KIND_INPUT_ALIASES[raw.toLowerCase()];\n return alias ?? raw;\n}\n\nfunction looksLikeStructuredEntry(raw: string, keys: readonly string[]): boolean {\n if (raw.startsWith(\"```\") || raw.includes(\"\\n\")) {\n return true;\n }\n const keyPattern = keys.map((key) => key.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")).join(\"|\");\n return new RegExp(`^(?:[-*+]\\\\s+)?(?:${keyPattern})\\\\s*[:=]`, \"i\").test(raw);\n}\n\nexport function parseLogSeed(\n optionName: \"--comment\" | \"--note\" | \"--learning\",\n raw: string[] | undefined,\n nowValue: string,\n fallbackAuthor: string,\n): { values: LogNote[] | Comment[] | undefined; explicitEmpty: boolean } {\n if (!raw || raw.length === 0) return { values: undefined, explicitEmpty: false };\n const clearHint =\n optionName === \"--comment\"\n ? \"Use --clear-comments to clear comments.\"\n : optionName === \"--note\"\n ? \"Use --clear-notes to clear notes.\"\n : \"Use --clear-learnings to clear learnings.\";\n assertNoLegacyNoneTokens(raw, optionName, clearHint);\n const values = raw.map((entry) => {\n const trimmedEntry = entry.trim();\n const buildPlainTextCommentSeed = (): Comment => {\n if (trimmedEntry.length === 0) {\n throw new PmCliError(`${optionName} requires text=<value>`, EXIT_CODE.USAGE);\n }\n return {\n created_at: nowValue,\n author: fallbackAuthor,\n text: trimmedEntry,\n };\n };\n let kv: Record<string, string>;\n try {\n kv = parseCsvKv(entry, optionName);\n } catch (error: unknown) {\n if (optionName === \"--comment\" || optionName === \"--note\" || optionName === \"--learning\") {\n return buildPlainTextCommentSeed();\n }\n throw error;\n }\n const unsupportedKeys = Object.keys(kv).filter((key) => !LOG_SEED_ALLOWED_KEYS.has(key));\n if (unsupportedKeys.length > 0) {\n return {\n created_at: parseCreatedAt(kv.created_at, nowValue),\n author: parseOptionalString(kv.author) ?? fallbackAuthor,\n text: trimmedEntry,\n };\n }\n const text = kv.text ?? \"\";\n if (text === \"\") {\n throw new PmCliError(`${optionName} requires text=<value>`, EXIT_CODE.USAGE);\n }\n return {\n created_at: parseCreatedAt(kv.created_at, nowValue),\n author: parseOptionalString(kv.author) ?? fallbackAuthor,\n text,\n };\n });\n return { values, explicitEmpty: false };\n}\n\nexport function parseFiles(raw: string[] | undefined): { values: LinkedFile[] | undefined; explicitEmpty: boolean } {\n if (!raw || raw.length === 0) return { values: undefined, explicitEmpty: false };\n assertNoLegacyNoneTokens(raw, \"--file\", \"Use --clear-files to clear linked files.\");\n const values = raw.map((entry) => {\n const trimmedEntry = entry.trim();\n const kv = looksLikeStructuredEntry(trimmedEntry, [\"path\", \"scope\", \"note\"])\n ? parseCsvKv(entry, \"--file\")\n : { path: trimmedEntry };\n if (!kv.path) {\n throw new PmCliError(\"--file requires path=<value> or a bare file path\", EXIT_CODE.USAGE);\n }\n return {\n path: kv.path,\n scope: ensureEnumValue(kv.scope ?? \"project\", SCOPE_VALUES, \"file scope\"),\n note: parseOptionalString(kv.note),\n };\n });\n return { values, explicitEmpty: false };\n}\n\nexport function parseTests(raw: string[] | undefined): { values: LinkedTest[] | undefined; explicitEmpty: boolean } {\n if (!raw || raw.length === 0) return { values: undefined, explicitEmpty: false };\n assertNoLegacyNoneTokens(raw, \"--test\", \"Use --clear-tests to clear linked tests.\");\n const values = raw.map((entry) => {\n const trimmedEntry = entry.trim();\n const kv = looksLikeStructuredLinkedTestEntry(trimmedEntry)\n ? normalizeStructuredLinkedTestEntry(parseCsvKv(entry, \"--test\"), \"--test\")\n : { command: trimmedEntry };\n const command = parseOptionalString(kv.command);\n const filePath = parseOptionalString(kv.path);\n if (!command) {\n throw new PmCliError(\"--test requires command=<value> or a bare command (path=<value> is optional metadata)\", EXIT_CODE.USAGE);\n }\n const timeoutSecondsRaw = parseOptionalString(kv.timeout_seconds);\n const timeoutAliasRaw = parseOptionalString(kv.timeout);\n if (timeoutSecondsRaw && timeoutAliasRaw && timeoutSecondsRaw !== timeoutAliasRaw) {\n throw new PmCliError(\"--test timeout and timeout_seconds must match when both are provided\", EXIT_CODE.USAGE);\n }\n const timeoutRaw = timeoutSecondsRaw ?? timeoutAliasRaw;\n return {\n command,\n path: filePath,\n scope: ensureEnumValue(kv.scope ?? \"project\", SCOPE_VALUES, \"test scope\"),\n timeout_seconds: timeoutRaw ? parseOptionalNumber(timeoutRaw, \"timeout_seconds\") : undefined,\n pm_context_mode: parseLinkedTestContextMode(kv.pm_context_mode, \"--test\"),\n env_set: parseLinkedTestEnvSet(kv.env_set, \"--test\"),\n env_clear: parseLinkedTestEnvClear(kv.env_clear, \"--test\"),\n shared_host_safe: parseLinkedTestBoolean(kv.shared_host_safe, \"--test\", \"shared_host_safe\"),\n assert_stdout_contains: parseLinkedTestStringList(kv.assert_stdout_contains),\n assert_stdout_regex: parseLinkedTestRegexList(kv.assert_stdout_regex, \"--test\", \"assert_stdout_regex\"),\n assert_stderr_contains: parseLinkedTestStringList(kv.assert_stderr_contains),\n assert_stderr_regex: parseLinkedTestRegexList(kv.assert_stderr_regex, \"--test\", \"assert_stderr_regex\"),\n assert_stdout_min_lines: parseLinkedTestMinLines(kv.assert_stdout_min_lines, \"--test\"),\n assert_json_field_equals: parseLinkedTestAssertionEqualsMap(kv.assert_json_field_equals, \"--test\"),\n assert_json_field_gte: parseLinkedTestAssertionGteMap(kv.assert_json_field_gte, \"--test\"),\n note: parseOptionalString(kv.note),\n };\n });\n return { values, explicitEmpty: false };\n}\n\nexport function parseDocs(raw: string[] | undefined): { values: LinkedDoc[] | undefined; explicitEmpty: boolean } {\n if (!raw || raw.length === 0) return { values: undefined, explicitEmpty: false };\n assertNoLegacyNoneTokens(raw, \"--doc\", \"Use --clear-docs to clear linked docs.\");\n const values = raw.map((entry) => {\n const trimmedEntry = entry.trim();\n const kv = looksLikeStructuredEntry(trimmedEntry, [\"path\", \"scope\", \"note\"])\n ? parseCsvKv(entry, \"--doc\")\n : { path: trimmedEntry };\n if (!kv.path) {\n throw new PmCliError(\"--doc requires path=<value> or a bare doc path\", EXIT_CODE.USAGE);\n }\n return {\n path: kv.path,\n scope: ensureEnumValue(kv.scope ?? \"project\", SCOPE_VALUES, \"doc scope\"),\n note: parseOptionalString(kv.note),\n };\n });\n return { values, explicitEmpty: false };\n}\n\nfunction parseReminders(raw: string[] | undefined, nowValue: string): { values: Reminder[] | undefined; explicitEmpty: boolean } {\n if (!raw || raw.length === 0) return { values: undefined, explicitEmpty: false };\n assertNoLegacyNoneTokens(raw, \"--reminder\", \"Use --clear-reminders to clear reminders.\");\n return {\n values: parseReminderEntries(raw, new Date(nowValue), { valueMode: \"raw\" }),\n explicitEmpty: false,\n };\n}\n\nfunction parseEvents(raw: string[] | undefined, nowValue: string): { values: CalendarEvent[] | undefined; explicitEmpty: boolean } {\n if (!raw || raw.length === 0) return { values: undefined, explicitEmpty: false };\n assertNoLegacyNoneTokens(raw, \"--event\", \"Use --clear-events to clear linked events.\");\n return {\n values: parseEventEntries(raw, new Date(nowValue), {\n allDayEmptyGuard: \"defined\",\n recurrenceEmptyNumericGuard: \"defined\",\n }),\n explicitEmpty: false,\n };\n}\n\nfunction buildChangedFields(\n frontMatter: ItemMetadata,\n body: string,\n explicitUnsets: string[],\n additionalFrontMatterKeys: readonly string[] = [],\n): string[] {\n const changed = [\n ...FRONT_MATTER_KEY_ORDER.filter((key) => frontMatter[key] !== undefined),\n ...additionalFrontMatterKeys.filter((key) => (frontMatter as unknown as Record<string, unknown>)[key] !== undefined),\n ...(body.length > 0 ? [\"body\"] : []),\n ...explicitUnsets.map((key) => `unset:${key}`),\n ];\n return Array.from(new Set(changed));\n}\n\nfunction buildHistoryMessage(baseMessage: string | undefined, explicitUnsets: string[]): string | undefined {\n const trimmed = baseMessage ?? \"\";\n if (explicitUnsets.length === 0) {\n return trimmed;\n }\n const suffix = `explicit_unset=${explicitUnsets.join(\",\")}`;\n return trimmed ? `${trimmed} | ${suffix}` : suffix;\n}\n\nfunction normalizeCreatePolicyOptionKey(raw: string, typeName: string, sourceLabel: string): string {\n const canonical = canonicalizeCommandOptionKey(\"create\", raw);\n if (!canonical) {\n throw new PmCliError(\n `Unsupported ${sourceLabel} entry \"${raw}\" for type \"${typeName}\"`,\n EXIT_CODE.CONFLICT,\n );\n }\n return canonical;\n}\n\nfunction parseTypeOptions(raw: string[] | undefined): { values: Record<string, string> | undefined; explicitEmpty: boolean } {\n if (!raw || raw.length === 0) {\n return { values: undefined, explicitEmpty: false };\n }\n assertNoLegacyNoneTokens(raw, \"--type-option\", \"Use --clear-type-options to clear existing type options.\");\n return {\n values: parseTypeOptionEntries(raw),\n explicitEmpty: false,\n };\n}\n\nasync function resolveCreateStdinInputs(options: CreateCommandOptions): Promise<CreateCommandOptions> {\n const stdinResolver = createStdinTokenResolver();\n return {\n ...options,\n body: await stdinResolver.resolveValue(options.body, \"--body\"),\n dep: await stdinResolver.resolveList(options.dep, \"--dep\"),\n comment: await stdinResolver.resolveList(options.comment, \"--comment\"),\n note: await stdinResolver.resolveList(options.note, \"--note\"),\n learning: await stdinResolver.resolveList(options.learning, \"--learning\"),\n file: await stdinResolver.resolveList(options.file, \"--file\"),\n test: await stdinResolver.resolveList(options.test, \"--test\"),\n doc: await stdinResolver.resolveList(options.doc, \"--doc\"),\n reminder: await stdinResolver.resolveList(options.reminder, \"--reminder\"),\n event: await stdinResolver.resolveList(options.event, \"--event\"),\n typeOption: await stdinResolver.resolveList(options.typeOption, \"--type-option\"),\n field: await stdinResolver.resolveList(options.field, \"--field\"),\n };\n}\n\nfunction resolveCreateMode(createMode: string | undefined, defaultMode: CreateMode): CreateMode {\n if (createMode === undefined) {\n return defaultMode;\n }\n const normalized = createMode.trim().toLowerCase();\n if (normalized.length === 0) {\n return defaultMode;\n }\n if (normalized === \"strict\" || normalized === \"progressive\") {\n return normalized;\n }\n throw new PmCliError(\n `Invalid --create-mode value \"${createMode}\". Allowed: ${CREATE_MODE_VALUES.join(\", \")}`,\n EXIT_CODE.USAGE,\n );\n}\n\nfunction resolveScheduleCreatePreset(raw: string | undefined): ScheduleCreatePreset | undefined {\n if (raw === undefined) {\n return undefined;\n }\n const normalized = raw.trim().toLowerCase();\n if (normalized.length === 0) {\n throw new PmCliError(\"--schedule-preset must not be empty\", EXIT_CODE.USAGE);\n }\n if (normalized === \"lightweight\" || normalized === \"lite\" || normalized === \"schedule-lite\") {\n return \"lightweight\";\n }\n throw new PmCliError(\n `Invalid --schedule-preset value \"${raw}\". Allowed: ${SCHEDULE_CREATE_PRESET_VALUES.join(\", \")}`,\n EXIT_CODE.USAGE,\n );\n}\n\nfunction resolveEffectiveCreateMode(\n createMode: string | undefined,\n schedulePreset: ScheduleCreatePreset | undefined,\n defaultMode: CreateMode,\n): CreateMode {\n const resolvedMode = resolveCreateMode(createMode, defaultMode);\n if (schedulePreset === undefined) {\n return resolvedMode;\n }\n const createModeWasExplicit = typeof createMode === \"string\" && createMode.trim().length > 0;\n if (createModeWasExplicit && resolvedMode === \"strict\") {\n throw new PmCliError(\n \"--schedule-preset lightweight cannot be combined with --create-mode strict. Use --create-mode progressive or omit --create-mode.\",\n EXIT_CODE.USAGE,\n );\n }\n return \"progressive\";\n}\n\nfunction requireCreateOptionByType(\n typeDefinition: ResolvedItemTypeDefinition,\n options: CreateCommandOptions,\n createMode: CreateMode,\n clearOptionKeys: Set<string>,\n): string[] {\n const typeName = typeDefinition.name;\n const scalarValues: Record<string, unknown> = {\n title: options.title,\n description: options.description,\n type: options.type,\n status: options.status,\n priority: options.priority,\n tags: options.tags,\n body: options.body,\n deadline: options.deadline,\n estimatedMinutes: options.estimatedMinutes,\n acceptanceCriteria: options.acceptanceCriteria,\n definitionOfReady: options.definitionOfReady,\n order: options.order ?? options.rank,\n goal: options.goal,\n objective: options.objective,\n value: options.value,\n impact: options.impact,\n outcome: options.outcome,\n whyNow: options.whyNow,\n author: options.author,\n message: options.message,\n assignee: options.assignee,\n parent: options.parent,\n reviewer: options.reviewer,\n risk: options.risk,\n confidence: options.confidence,\n sprint: options.sprint,\n release: options.release,\n blockedBy: options.blockedBy,\n blockedReason: options.blockedReason,\n unblockNote: options.unblockNote,\n reporter: options.reporter,\n severity: options.severity,\n environment: options.environment,\n reproSteps: options.reproSteps,\n resolution: options.resolution,\n expectedResult: options.expectedResult,\n actualResult: options.actualResult,\n affectedVersion: options.affectedVersion,\n fixedVersion: options.fixedVersion,\n component: options.component,\n regression: options.regression,\n customerImpact: options.customerImpact,\n };\n const repeatableValues: Record<string, unknown> = {\n dep: options.dep,\n comment: options.comment,\n note: options.note,\n learning: options.learning,\n file: options.file,\n test: options.test,\n doc: options.doc,\n reminder: options.reminder,\n event: options.event,\n typeOption: options.typeOption,\n field: options.field,\n };\n\n const hasOptionValue = (optionKey: string): boolean => {\n // `--add-tags` mutates the same `tags` field as `--tags`, so it must count\n // toward the `tags` command_option_policy (both the disabled guard and the\n // required check) — otherwise `--add-tags` would bypass a rule disabling\n // tags, or fail to satisfy a rule requiring them even though the created\n // item ends up tagged.\n if (optionKey === \"tags\") {\n return scalarValues.tags !== undefined || (Array.isArray(options.addTags) && options.addTags.length > 0);\n }\n if (optionKey in scalarValues) {\n return scalarValues[optionKey] !== undefined;\n }\n if (optionKey in repeatableValues) {\n const value = repeatableValues[optionKey];\n return Array.isArray(value) && value.length > 0;\n }\n return false;\n };\n const hasOptionMutation = (optionKey: string): boolean => hasOptionValue(optionKey) || clearOptionKeys.has(optionKey);\n\n const baseRequiredOptions = new Set<string>([\"title\", \"type\"]);\n if (createMode === \"strict\") {\n for (const field of typeDefinition.required_create_fields) {\n baseRequiredOptions.add(normalizeCreatePolicyOptionKey(field, typeName, \"required_create_fields\"));\n }\n for (const field of typeDefinition.required_create_repeatables) {\n baseRequiredOptions.add(normalizeCreatePolicyOptionKey(field, typeName, \"required_create_repeatables\"));\n }\n }\n\n const policyState = resolveCommandOptionPolicyState(typeDefinition, \"create\", baseRequiredOptions);\n if (policyState.errors.length > 0) {\n throw new PmCliError(policyState.errors.join(\"; \"), EXIT_CODE.CONFLICT);\n }\n\n for (const option of policyState.disabled) {\n if (hasOptionMutation(option)) {\n throw new PmCliError(\n `Option ${commandOptionFlagLabel(\"create\", option)} is disabled for type \"${typeName}\" by command_option_policies`,\n EXIT_CODE.USAGE,\n );\n }\n }\n\n if (createMode === \"strict\") {\n const strictRequiredClears = policyState.required.filter((required) => clearOptionKeys.has(required));\n if (strictRequiredClears.length > 0) {\n const requiredFlags = [...new Set(strictRequiredClears.map((required) => commandOptionFlagLabel(\"create\", required)))].sort(\n (left, right) => left.localeCompare(right),\n );\n throw new PmCliError(\n `Strict create mode requires concrete values for ${requiredFlags.join(\", \")}; --unset/--clear-* directives cannot satisfy required options`,\n EXIT_CODE.USAGE,\n );\n }\n }\n\n // A configured per-type default_status satisfies a required `status` policy:\n // when --status is omitted, runCreate resolves to that default (or degrades to\n // the workflow open status), so blocking the agent for a \"missing --status\"\n // would contradict the config-driven default. Scoped to status so an explicit\n // status-required policy on a type WITHOUT a default still holds. Only the\n // required check is relaxed; the disabled check above keeps using hasOptionValue.\n const satisfiesRequiredOption = (optionKey: string): boolean => {\n if (optionKey === \"status\" && typeDefinition.default_status !== undefined) {\n return true;\n }\n return hasOptionValue(optionKey);\n };\n const missingRequiredOptions = policyState.required.filter((required) => !satisfiesRequiredOption(required));\n return [...new Set(missingRequiredOptions.map((required) => commandOptionFlagLabel(\"create\", required)))].sort((left, right) =>\n left.localeCompare(right),\n );\n}\n\nconst MISSING_REQUIRED_TYPE_OPTION_PATTERN = /^Missing required type option \"([^\"]+)\" for type \"([^\"]+)\"$/;\n\nfunction collectMissingRequiredTypeOptionKeys(errors: string[], typeName: string): string[] {\n const missingKeys: string[] = [];\n for (const error of errors) {\n const match = error.match(MISSING_REQUIRED_TYPE_OPTION_PATTERN);\n if (!match) {\n continue;\n }\n if (match[2] !== typeName) {\n continue;\n }\n missingKeys.push(match[1]);\n }\n return [...new Set(missingKeys)].sort((left, right) => left.localeCompare(right));\n}\n\nfunction filterNonMissingTypeOptionErrors(errors: string[], typeName: string): string[] {\n return errors.filter((error) => {\n const match = error.match(MISSING_REQUIRED_TYPE_OPTION_PATTERN);\n return !match || match[2] !== typeName;\n });\n}\n\nfunction typeOptionExampleValue(typeDefinition: ResolvedItemTypeDefinition, key: string): string {\n const optionDefinition = typeDefinition.options.find((option) => option.key === key);\n const firstAllowed = optionDefinition?.values[0];\n if (typeof firstAllowed === \"string\" && firstAllowed.trim().length > 0) {\n return firstAllowed;\n }\n return \"<value>\";\n}\n\nfunction createExampleTokensForFlag(flag: string, typeName: string, openStatus: string): string[] {\n switch (flag) {\n case \"--title\":\n return [\"--title\", `\"${typeName} example title\"`];\n case \"--description\":\n return [\"--description\", `\"${typeName} example description\"`];\n case \"--type\":\n return [\"--type\", typeName];\n case \"--status\":\n return [\"--status\", openStatus];\n case \"--priority\":\n return [\"--priority\", \"1\"];\n case \"--message\":\n return [\"--message\", `\"Create ${typeName} item\"`];\n case \"--dep\":\n return [\"--dep\", \"\\\"id=pm-xxxx,kind=related,author=maintainer,created_at=now\\\"\"];\n case \"--comment\":\n return [\"--comment\", \"\\\"author=maintainer,created_at=now,text=Implementation context\\\"\"];\n case \"--note\":\n return [\"--note\", \"\\\"author=maintainer,created_at=now,text=Design note\\\"\"];\n case \"--learning\":\n return [\"--learning\", \"\\\"author=maintainer,created_at=now,text=Durable lesson\\\"\"];\n case \"--file\":\n return [\"--file\", \"\\\"path=src/example.ts,note=implementation file\\\"\"];\n case \"--test\":\n return [\"--test\", \"\\\"command=node scripts/run-tests.mjs test,timeout_seconds=240\\\"\"];\n case \"--doc\":\n return [\"--doc\", \"\\\"path=README.md,note=reference doc\\\"\"];\n default:\n return [flag, \"\\\"<value>\\\"\"];\n }\n}\n\nfunction buildTypeSpecificCreateExample(\n typeDefinition: ResolvedItemTypeDefinition,\n missingCreateFlags: string[],\n missingTypeOptionKeys: string[],\n openStatus: string,\n): string {\n const tokens = [\"pm\", \"create\", \"--title\", `\"${typeDefinition.name} example title\"`, \"--description\", `\"${typeDefinition.name} example description\"`, \"--type\", typeDefinition.name];\n const optionalRecommendationFlags = [\"--status\", \"--priority\", \"--message\"];\n const orderedFlags = [...new Set([...optionalRecommendationFlags, ...missingCreateFlags])];\n const includedFlags = new Set<string>([\"--title\", \"--description\", \"--type\"]);\n for (const flag of orderedFlags) {\n if (includedFlags.has(flag)) {\n continue;\n }\n tokens.push(...createExampleTokensForFlag(flag, typeDefinition.name, openStatus));\n includedFlags.add(flag);\n }\n for (const key of missingTypeOptionKeys) {\n const value = typeOptionExampleValue(typeDefinition, key);\n tokens.push(\"--type-option\", `${key}=${value}`);\n }\n return tokens.join(\" \");\n}\n\nfunction requireStringOption(value: string | undefined, flag: string): string {\n if (value === undefined) {\n if (flag === \"--title\") {\n throw new PmCliError(\n 'Missing required option --title. Why required: every item needs a human-readable title for lookup, search, and reporting. Retry: pass the title as the first positional argument (example: pm create \"Fix login bug\" --type Issue) or with --title.',\n EXIT_CODE.USAGE,\n );\n }\n throw new PmCliError(`Missing required option ${flag}`, EXIT_CODE.USAGE);\n }\n return value;\n}\n\nfunction selectAuthor(explicitAuthor: string | undefined, settingsAuthor: string): string {\n const candidate = parseOptionalString(explicitAuthor) ?? process.env.PM_AUTHOR ?? settingsAuthor;\n const trimmed = candidate.trim();\n return trimmed || \"unknown\";\n}\n\nfunction ensurePriority(rawPriority: string | number): 0 | 1 | 2 | 3 | 4 {\n return resolvePriority(rawPriority);\n}\n\nfunction mergeCreateOptionsWithTemplate(\n templateOptions: Record<string, string | string[]>,\n explicitOptions: CreateCommandOptions,\n): CreateCommandOptions {\n const merged: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(templateOptions)) {\n merged[key] = Array.isArray(value) ? [...value] : value;\n }\n for (const [key, value] of Object.entries(explicitOptions)) {\n if (value !== undefined) {\n merged[key] = Array.isArray(value) ? [...value] : value;\n }\n }\n return merged as CreateCommandOptions;\n}\n\nfunction normalizeExtensionCommandPath(command: string): string {\n return command\n .trim()\n .toLowerCase()\n .split(/\\s+/)\n .filter((part) => part.length > 0)\n .join(\" \");\n}\n\nfunction hasTemplatesShowHandler(): boolean {\n const registrations = getActiveExtensionRegistrations();\n if (!registrations) {\n return false;\n }\n return registrations.commands.some((entry) => {\n return entry.action === \"templates-show\" || normalizeExtensionCommandPath(entry.command) === \"templates show\";\n });\n}\n\nfunction readTemplateOptionsFromRuntimeResult(result: unknown, templateName: string): Record<string, string | string[]> {\n if (typeof result !== \"object\" || result === null || !(\"options\" in result)) {\n throw new PmCliError(\n `Templates package returned invalid payload for template \"${templateName}\". Expected an options object.`,\n EXIT_CODE.GENERIC_FAILURE,\n );\n }\n const options = (result as { options?: unknown }).options;\n if (typeof options !== \"object\" || options === null || Array.isArray(options)) {\n throw new PmCliError(\n `Templates package returned invalid options for template \"${templateName}\".`,\n EXIT_CODE.GENERIC_FAILURE,\n );\n }\n const normalized: Record<string, string | string[]> = {};\n for (const [key, value] of Object.entries(options as Record<string, unknown>)) {\n if (typeof value === \"string\") {\n normalized[key] = value;\n continue;\n }\n if (Array.isArray(value) && value.every((entry) => typeof entry === \"string\")) {\n normalized[key] = [...value];\n continue;\n }\n throw new PmCliError(\n `Templates package returned unsupported option value for \"${key}\" in template \"${templateName}\".`,\n EXIT_CODE.GENERIC_FAILURE,\n );\n }\n return normalized;\n}\n\nasync function loadCreateTemplateOptionsFromRuntime(\n templateName: string,\n global: GlobalOptions,\n pmRoot: string,\n): Promise<Record<string, string | string[]>> {\n if (!hasTemplatesShowHandler()) {\n throw new PmCliError(\n `--template requires the templates package. Install it first (for example: pm install templates --project).`,\n EXIT_CODE.USAGE,\n );\n }\n const handlerResult = await runActiveCommandHandler({\n command: \"templates show\",\n args: [templateName],\n options: {},\n global,\n pm_root: pmRoot,\n });\n if (!handlerResult.handled) {\n const warningSuffix = handlerResult.warnings.length > 0 ? ` (${handlerResult.warnings.join(\", \")})` : \"\";\n throw new PmCliError(\n `Unable to resolve template \"${templateName}\" via templates package. Run \"pm templates show ${templateName}\" for details.${warningSuffix}`,\n EXIT_CODE.USAGE,\n );\n }\n return readTemplateOptionsFromRuntimeResult(handlerResult.result, templateName);\n}\n\nfunction ensureInitHasRun(pmRoot: string): Promise<void> {\n return pathExists(getSettingsPath(pmRoot)).then((exists) => {\n if (!exists) {\n throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);\n }\n });\n}\n\nexport async function runCreate(options: CreateCommandOptions, global: GlobalOptions): Promise<CreateResult> {\n let resolvedOptions = normalizeLegacyNoneCreateOptions(await resolveCreateStdinInputs(options));\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n await ensureInitHasRun(pmRoot);\n\n const settings = await readSettings(pmRoot);\n const statusRegistry = resolveRuntimeStatusRegistry(settings.schema);\n const runtimeFieldRegistry = resolveRuntimeFieldRegistry(settings.schema);\n const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());\n if (resolvedOptions.template !== undefined) {\n const templateName = resolvedOptions.template.trim();\n if (templateName.length === 0) {\n throw new PmCliError(\"--template must not be empty. Omit --template to disable template usage.\", EXIT_CODE.USAGE);\n }\n const templateOptions = await loadCreateTemplateOptionsFromRuntime(templateName, global, pmRoot);\n resolvedOptions = normalizeLegacyNoneCreateOptions(mergeCreateOptionsWithTemplate(templateOptions, resolvedOptions));\n }\n if (resolvedOptions.type === undefined) {\n // Default-type fallback is suppressed under explicit --create-mode strict, where the strict\n // required-option contract takes precedence and surfaces the missing_required_option envelope.\n const explicitStrictMode = typeof resolvedOptions.createMode === \"string\"\n && resolvedOptions.createMode.trim().toLowerCase() === \"strict\";\n if (!explicitStrictMode) {\n const defaultType = settings.governance.create_default_type?.trim();\n if (defaultType && defaultType.length > 0 && resolveTypeName(defaultType, typeRegistry)) {\n resolvedOptions.type = defaultType;\n } else if (resolveTypeName(\"Task\", typeRegistry)) {\n resolvedOptions.type = \"Task\";\n }\n }\n }\n if (resolvedOptions.type === undefined) {\n throw new PmCliError(\"Missing required option --type <value>\", EXIT_CODE.USAGE);\n }\n let resolvedTypeName = resolveTypeName(resolvedOptions.type, typeRegistry);\n if (!resolvedTypeName) {\n // Never block on a near-miss type: map a known synonym (e.g. Bug -> Issue,\n // Change -> Chore) to its canonical built-in type when that type exists in the\n // active registry, and tell the agent how to make it a distinct custom type.\n const synonymCanonical = resolveTypeSynonym(resolvedOptions.type);\n const synonymResolved = synonymCanonical ? resolveTypeName(synonymCanonical, typeRegistry) : undefined;\n if (synonymResolved) {\n printError(\n `[pm] note: type '${resolvedOptions.type.trim()}' is not defined; using closest match '${synonymResolved}'. Run 'pm schema add-type \"${resolvedOptions.type.trim()}\"' to track it as a distinct type.`,\n );\n resolvedOptions.type = synonymResolved;\n resolvedTypeName = synonymResolved;\n } else {\n throw new PmCliError(\n buildInvalidTypeError(resolvedOptions.type, typeRegistry.types),\n EXIT_CODE.USAGE,\n );\n }\n }\n const typeDefinition = resolveTypeDefinition(resolvedTypeName, typeRegistry);\n if (!typeDefinition) {\n throw new PmCliError(`Invalid type value \"${resolvedOptions.type}\"`, EXIT_CODE.USAGE);\n }\n const type = typeDefinition.name;\n const schedulePreset = resolveScheduleCreatePreset(resolvedOptions.schedulePreset);\n if (schedulePreset !== undefined && !SCHEDULE_CREATE_PRESET_TYPES.has(type)) {\n throw new PmCliError(\n `--schedule-preset ${schedulePreset} is only supported for Reminder, Meeting, or Event types`,\n EXIT_CODE.USAGE,\n );\n }\n const createMode = resolveEffectiveCreateMode(\n resolvedOptions.createMode,\n schedulePreset,\n settings.governance.create_mode_default,\n );\n const unsetTargets = parseCreateUnsetTargets(resolvedOptions.unset, runtimeFieldRegistry);\n const explicitUnsets = new Set<string>(unsetTargets.frontMatterKeys);\n const clearOptionKeys = new Set<string>(unsetTargets.optionKeys);\n\n const clearCollectionDefinitions: ReadonlyArray<{\n enabled: boolean | undefined;\n optionKey: string;\n clearFlag: string;\n valueFlag: string;\n values: string[] | undefined;\n frontMatterKey: string;\n }> = [\n {\n enabled: resolvedOptions.clearDeps,\n optionKey: \"dep\",\n clearFlag: \"--clear-deps\",\n valueFlag: \"--dep\",\n values: resolvedOptions.dep,\n frontMatterKey: \"dependencies\",\n },\n {\n enabled: resolvedOptions.clearComments,\n optionKey: \"comment\",\n clearFlag: \"--clear-comments\",\n valueFlag: \"--comment\",\n values: resolvedOptions.comment,\n frontMatterKey: \"comments\",\n },\n {\n enabled: resolvedOptions.clearNotes,\n optionKey: \"note\",\n clearFlag: \"--clear-notes\",\n valueFlag: \"--note\",\n values: resolvedOptions.note,\n frontMatterKey: \"notes\",\n },\n {\n enabled: resolvedOptions.clearLearnings,\n optionKey: \"learning\",\n clearFlag: \"--clear-learnings\",\n valueFlag: \"--learning\",\n values: resolvedOptions.learning,\n frontMatterKey: \"learnings\",\n },\n {\n enabled: resolvedOptions.clearFiles,\n optionKey: \"file\",\n clearFlag: \"--clear-files\",\n valueFlag: \"--file\",\n values: resolvedOptions.file,\n frontMatterKey: \"files\",\n },\n {\n enabled: resolvedOptions.clearTests,\n optionKey: \"test\",\n clearFlag: \"--clear-tests\",\n valueFlag: \"--test\",\n values: resolvedOptions.test,\n frontMatterKey: \"tests\",\n },\n {\n enabled: resolvedOptions.clearDocs,\n optionKey: \"doc\",\n clearFlag: \"--clear-docs\",\n valueFlag: \"--doc\",\n values: resolvedOptions.doc,\n frontMatterKey: \"docs\",\n },\n {\n enabled: resolvedOptions.clearReminders,\n optionKey: \"reminder\",\n clearFlag: \"--clear-reminders\",\n valueFlag: \"--reminder\",\n values: resolvedOptions.reminder,\n frontMatterKey: \"reminders\",\n },\n {\n enabled: resolvedOptions.clearEvents,\n optionKey: \"event\",\n clearFlag: \"--clear-events\",\n valueFlag: \"--event\",\n values: resolvedOptions.event,\n frontMatterKey: \"events\",\n },\n {\n enabled: resolvedOptions.clearTypeOptions,\n optionKey: \"typeOption\",\n clearFlag: \"--clear-type-options\",\n valueFlag: \"--type-option\",\n values: resolvedOptions.typeOption,\n frontMatterKey: \"type_options\",\n },\n ];\n for (const definition of clearCollectionDefinitions) {\n if (!definition.enabled) {\n continue;\n }\n if (definition.values && definition.values.length > 0) {\n throw new PmCliError(`Cannot combine ${definition.clearFlag} with ${definition.valueFlag}`, EXIT_CODE.USAGE);\n }\n explicitUnsets.add(definition.frontMatterKey);\n clearOptionKeys.add(definition.optionKey);\n }\n\n const scalarOptionPresence: Record<string, boolean> = {\n tags: resolvedOptions.tags !== undefined,\n deadline: resolvedOptions.deadline !== undefined,\n estimatedMinutes: resolvedOptions.estimatedMinutes !== undefined,\n acceptanceCriteria: resolvedOptions.acceptanceCriteria !== undefined,\n definitionOfReady: resolvedOptions.definitionOfReady !== undefined,\n order: resolvedOptions.order !== undefined || resolvedOptions.rank !== undefined,\n goal: resolvedOptions.goal !== undefined,\n objective: resolvedOptions.objective !== undefined,\n value: resolvedOptions.value !== undefined,\n impact: resolvedOptions.impact !== undefined,\n outcome: resolvedOptions.outcome !== undefined,\n whyNow: resolvedOptions.whyNow !== undefined,\n author: resolvedOptions.author !== undefined,\n assignee: resolvedOptions.assignee !== undefined,\n parent: resolvedOptions.parent !== undefined,\n reviewer: resolvedOptions.reviewer !== undefined,\n risk: resolvedOptions.risk !== undefined,\n confidence: resolvedOptions.confidence !== undefined,\n sprint: resolvedOptions.sprint !== undefined,\n release: resolvedOptions.release !== undefined,\n blockedBy: resolvedOptions.blockedBy !== undefined,\n blockedReason: resolvedOptions.blockedReason !== undefined,\n unblockNote: resolvedOptions.unblockNote !== undefined,\n reporter: resolvedOptions.reporter !== undefined,\n severity: resolvedOptions.severity !== undefined,\n environment: resolvedOptions.environment !== undefined,\n reproSteps: resolvedOptions.reproSteps !== undefined,\n resolution: resolvedOptions.resolution !== undefined,\n expectedResult: resolvedOptions.expectedResult !== undefined,\n actualResult: resolvedOptions.actualResult !== undefined,\n affectedVersion: resolvedOptions.affectedVersion !== undefined,\n fixedVersion: resolvedOptions.fixedVersion !== undefined,\n component: resolvedOptions.component !== undefined,\n regression: resolvedOptions.regression !== undefined,\n customerImpact: resolvedOptions.customerImpact !== undefined,\n };\n for (const [optionKey, hasValue] of Object.entries(scalarOptionPresence)) {\n if (!hasValue || !unsetTargets.optionKeys.has(optionKey)) {\n continue;\n }\n const unsetField = CREATE_OPTION_KEY_TO_UNSET_CANONICAL.get(optionKey) ?? optionKey;\n throw new PmCliError(\n `Cannot combine --unset ${unsetField} with ${commandOptionFlagLabel(\"create\", optionKey)}`,\n EXIT_CODE.USAGE,\n );\n }\n\n const assertNoLegacyScalarToken = (value: string | undefined, optionKey: string): void => {\n const unsetField = CREATE_OPTION_KEY_TO_UNSET_CANONICAL.get(optionKey);\n const hint = unsetField ? `Use --unset ${unsetField} to clear this field.` : undefined;\n assertNoLegacyNoneToken(value, commandOptionFlagLabel(\"create\", optionKey), hint);\n };\n assertNoLegacyScalarToken(resolvedOptions.tags, \"tags\");\n assertNoLegacyScalarToken(resolvedOptions.deadline, \"deadline\");\n assertNoLegacyScalarToken(resolvedOptions.estimatedMinutes, \"estimatedMinutes\");\n assertNoLegacyScalarToken(resolvedOptions.acceptanceCriteria, \"acceptanceCriteria\");\n assertNoLegacyScalarToken(resolvedOptions.definitionOfReady, \"definitionOfReady\");\n assertNoLegacyScalarToken(resolvedOptions.order ?? resolvedOptions.rank, \"order\");\n assertNoLegacyScalarToken(resolvedOptions.goal, \"goal\");\n assertNoLegacyScalarToken(resolvedOptions.objective, \"objective\");\n assertNoLegacyScalarToken(resolvedOptions.value, \"value\");\n assertNoLegacyScalarToken(resolvedOptions.impact, \"impact\");\n assertNoLegacyScalarToken(resolvedOptions.outcome, \"outcome\");\n assertNoLegacyScalarToken(resolvedOptions.whyNow, \"whyNow\");\n assertNoLegacyScalarToken(resolvedOptions.author, \"author\");\n assertNoLegacyScalarToken(resolvedOptions.assignee, \"assignee\");\n assertNoLegacyScalarToken(resolvedOptions.parent, \"parent\");\n assertNoLegacyScalarToken(resolvedOptions.reviewer, \"reviewer\");\n assertNoLegacyScalarToken(resolvedOptions.risk, \"risk\");\n assertNoLegacyScalarToken(resolvedOptions.confidence, \"confidence\");\n assertNoLegacyScalarToken(resolvedOptions.sprint, \"sprint\");\n assertNoLegacyScalarToken(resolvedOptions.release, \"release\");\n assertNoLegacyScalarToken(resolvedOptions.blockedBy, \"blockedBy\");\n assertNoLegacyScalarToken(resolvedOptions.blockedReason, \"blockedReason\");\n assertNoLegacyScalarToken(resolvedOptions.unblockNote, \"unblockNote\");\n assertNoLegacyScalarToken(resolvedOptions.reporter, \"reporter\");\n assertNoLegacyScalarToken(resolvedOptions.severity, \"severity\");\n assertNoLegacyScalarToken(resolvedOptions.environment, \"environment\");\n assertNoLegacyScalarToken(resolvedOptions.reproSteps, \"reproSteps\");\n assertNoLegacyScalarToken(resolvedOptions.resolution, \"resolution\");\n assertNoLegacyScalarToken(resolvedOptions.expectedResult, \"expectedResult\");\n assertNoLegacyScalarToken(resolvedOptions.actualResult, \"actualResult\");\n assertNoLegacyScalarToken(resolvedOptions.affectedVersion, \"affectedVersion\");\n assertNoLegacyScalarToken(resolvedOptions.fixedVersion, \"fixedVersion\");\n assertNoLegacyScalarToken(resolvedOptions.component, \"component\");\n assertNoLegacyScalarToken(resolvedOptions.regression, \"regression\");\n assertNoLegacyScalarToken(resolvedOptions.customerImpact, \"customerImpact\");\n\n const missingRequiredCreateFlags = requireCreateOptionByType(typeDefinition, resolvedOptions, createMode, clearOptionKeys);\n const nowValue = nowIso();\n const author = selectAuthor(resolvedOptions.author, settings.author_default);\n\n const dependencies = parseDependencies(resolvedOptions.dep, nowValue, settings.id_prefix);\n const comments = parseLogSeed(\"--comment\", resolvedOptions.comment, nowValue, author);\n const notes = parseLogSeed(\"--note\", resolvedOptions.note, nowValue, author);\n const learnings = parseLogSeed(\"--learning\", resolvedOptions.learning, nowValue, author);\n const files = parseFiles(resolvedOptions.file);\n const tests = parseTests(resolvedOptions.test);\n const docs = parseDocs(resolvedOptions.doc);\n const reminders = parseReminders(resolvedOptions.reminder, nowValue);\n const events = parseEvents(resolvedOptions.event, nowValue);\n const typeOptions = parseTypeOptions(resolvedOptions.typeOption);\n const validatedTypeOptions = validateTypeOptions(type, typeOptions.values, typeRegistry);\n const extensionRegistrations = getActiveExtensionRegistrations();\n const extensionFieldNames = collectRegisteredItemFieldNames(extensionRegistrations);\n const registeredItemFieldValues = parseRegisteredItemFieldAssignments(resolvedOptions.field, extensionRegistrations);\n for (const fieldKey of Object.keys(registeredItemFieldValues)) {\n if (!unsetTargets.frontMatterKeys.has(fieldKey)) {\n continue;\n }\n throw new PmCliError(`Cannot combine --unset ${fieldKey.replaceAll(\"_\", \"-\")} with --field ${fieldKey}=...`, EXIT_CODE.USAGE);\n }\n const runtimeCreateFieldValues = collectRuntimeCreateFieldValues(\n resolvedOptions as Record<string, unknown>,\n runtimeFieldRegistry,\n type,\n );\n for (const fieldKey of Object.keys(runtimeCreateFieldValues.values ?? {})) {\n if (!unsetTargets.frontMatterKeys.has(fieldKey)) {\n continue;\n }\n throw new PmCliError(`Cannot combine --unset ${fieldKey.replaceAll(\"_\", \"-\")} with its value flag`, EXIT_CODE.USAGE);\n }\n const missingRequiredTypeOptionKeys = collectMissingRequiredTypeOptionKeys(validatedTypeOptions.errors, type);\n const missingRequiredTypeOptionFlags = missingRequiredTypeOptionKeys.map((key) => `--type-option ${key}=<value>`);\n const combinedMissingFlags = [\n ...new Set([\n ...missingRequiredCreateFlags,\n ...missingRequiredTypeOptionFlags,\n ...runtimeCreateFieldValues.missing_required_flags,\n ]),\n ].sort((left, right) => left.localeCompare(right));\n if (combinedMissingFlags.length > 0) {\n const nextValidExample = buildTypeSpecificCreateExample(\n typeDefinition,\n missingRequiredCreateFlags,\n missingRequiredTypeOptionKeys,\n statusRegistry.open_status,\n );\n const nextSteps = [`Run \"pm create --help --type ${type}\" for type-aware required option guidance.`];\n if (combinedMissingFlags.includes(\"--title\")) {\n nextSteps.push('Title can also be passed as the first positional argument (example: pm create \"Your title\" --type ' + type + ').');\n }\n if (createMode === \"strict\") {\n nextSteps.push('For staged onboarding, retry with \"--create-mode progressive\".');\n if (SCHEDULE_CREATE_PRESET_TYPES.has(type)) {\n nextSteps.push('For minimal scheduling inputs, try \"--schedule-preset lightweight\".');\n }\n }\n const errorMessage =\n combinedMissingFlags.length === 1\n ? `Missing required option ${combinedMissingFlags[0]} for type \"${type}\"`\n : `Missing required options ${combinedMissingFlags.join(\", \")} for type \"${type}\"`;\n throw new PmCliError(errorMessage, EXIT_CODE.USAGE, {\n code: \"missing_required_option\",\n required: `Provide all required create options and type options for type \"${type}\" in one invocation.`,\n examples: [nextValidExample],\n nextSteps,\n });\n }\n const nonMissingTypeOptionErrors = filterNonMissingTypeOptionErrors(validatedTypeOptions.errors, type);\n if (nonMissingTypeOptionErrors.length > 0) {\n const nextValidExample = buildTypeSpecificCreateExample(typeDefinition, [], [], statusRegistry.open_status);\n throw new PmCliError(nonMissingTypeOptionErrors.join(\"; \"), EXIT_CODE.USAGE, {\n code: \"invalid_argument_value\",\n required: `Provide valid --type-option key/value pairs for type \"${type}\".`,\n examples: [nextValidExample],\n nextSteps: [`Run \"pm create --help --type ${type}\" to review allowed type-option keys and values.`],\n });\n }\n\n const id = await generateItemId(pmRoot, settings.id_prefix);\n let status =\n resolvedOptions.status !== undefined\n ? parseStatusValue(resolvedOptions.status, statusRegistry)\n : resolveCreateDefaultStatus(typeDefinition, statusRegistry);\n const priority = resolvedOptions.priority !== undefined ? ensurePriority(resolvedOptions.priority) : 2;\n // `--unset tags` clears the field; combining it with `--add-tags` is the same\n // contradiction that `--unset tags --tags ...` already rejects, so reject it\n // here rather than silently letting the additions win over the clear.\n if (\n unsetTargets.frontMatterKeys.has(\"tags\") &&\n Array.isArray(resolvedOptions.addTags) &&\n resolvedOptions.addTags.length > 0\n ) {\n throw new PmCliError(\"Cannot combine --unset tags with --add-tags\", EXIT_CODE.USAGE);\n }\n const baseTags = unsetTargets.frontMatterKeys.has(\"tags\")\n ? []\n : resolvedOptions.tags !== undefined\n ? parseTags(resolvedOptions.tags)\n : [];\n const tags = mergeAdditiveTags(baseTags, resolvedOptions.addTags);\n\n const deadline = unsetTargets.frontMatterKeys.has(\"deadline\")\n ? undefined\n : resolvedOptions.deadline === undefined\n ? undefined\n : resolveIsoOrRelative(resolvedOptions.deadline, new Date(nowValue), \"deadline\");\n const estimatedMinutes = unsetTargets.frontMatterKeys.has(\"estimated_minutes\")\n ? undefined\n : resolvedOptions.estimatedMinutes === undefined\n ? undefined\n : parseOptionalNumber(resolvedOptions.estimatedMinutes, \"estimated-minutes\");\n const acceptanceCriteria = unsetTargets.frontMatterKeys.has(\"acceptance_criteria\")\n ? undefined\n : resolvedOptions.acceptanceCriteria === undefined\n ? undefined\n : resolvedOptions.acceptanceCriteria;\n const definitionOfReady =\n unsetTargets.frontMatterKeys.has(\"definition_of_ready\") || resolvedOptions.definitionOfReady === undefined\n ? undefined\n : parseOptionalString(resolvedOptions.definitionOfReady);\n if (\n resolvedOptions.order !== undefined &&\n resolvedOptions.rank !== undefined &&\n resolvedOptions.order !== resolvedOptions.rank\n ) {\n throw new PmCliError(\"--order and --rank must match when both are provided\", EXIT_CODE.USAGE);\n }\n const orderRaw = resolvedOptions.order ?? resolvedOptions.rank;\n const order =\n unsetTargets.frontMatterKeys.has(\"order\") || orderRaw === undefined ? undefined : parseOptionalNumber(orderRaw, \"order\");\n if (order !== undefined && !Number.isInteger(order)) {\n throw new PmCliError(\"Order must be an integer\", EXIT_CODE.USAGE);\n }\n const goal =\n unsetTargets.frontMatterKeys.has(\"goal\") || resolvedOptions.goal === undefined ? undefined : parseOptionalString(resolvedOptions.goal);\n const objective =\n unsetTargets.frontMatterKeys.has(\"objective\") || resolvedOptions.objective === undefined\n ? undefined\n : parseOptionalString(resolvedOptions.objective);\n const value =\n unsetTargets.frontMatterKeys.has(\"value\") || resolvedOptions.value === undefined\n ? undefined\n : parseOptionalString(resolvedOptions.value);\n const impact =\n unsetTargets.frontMatterKeys.has(\"impact\") || resolvedOptions.impact === undefined\n ? undefined\n : parseOptionalString(resolvedOptions.impact);\n const outcome =\n unsetTargets.frontMatterKeys.has(\"outcome\") || resolvedOptions.outcome === undefined\n ? undefined\n : parseOptionalString(resolvedOptions.outcome);\n const whyNow =\n unsetTargets.frontMatterKeys.has(\"why_now\") || resolvedOptions.whyNow === undefined\n ? undefined\n : parseOptionalString(resolvedOptions.whyNow);\n const assignee =\n unsetTargets.frontMatterKeys.has(\"assignee\") || resolvedOptions.assignee === undefined\n ? undefined\n : parseOptionalString(resolvedOptions.assignee);\n const authorValue = unsetTargets.frontMatterKeys.has(\"author\")\n ? undefined\n : parseOptionalString(resolvedOptions.author) ?? author;\n let parent =\n unsetTargets.frontMatterKeys.has(\"parent\") || resolvedOptions.parent === undefined\n ? undefined\n : parseOptionalString(resolvedOptions.parent);\n const reviewer =\n unsetTargets.frontMatterKeys.has(\"reviewer\") || resolvedOptions.reviewer === undefined\n ? undefined\n : parseOptionalString(resolvedOptions.reviewer);\n const riskRaw =\n unsetTargets.frontMatterKeys.has(\"risk\") || resolvedOptions.risk === undefined\n ? undefined\n : parseOptionalString(resolvedOptions.risk);\n const risk = riskRaw !== undefined ? ensureEnumValue(normalizeRiskInput(riskRaw), RISK_VALUES, \"risk\") : undefined;\n const confidenceRaw =\n unsetTargets.frontMatterKeys.has(\"confidence\") || resolvedOptions.confidence === undefined\n ? undefined\n : parseOptionalString(resolvedOptions.confidence);\n const confidence = confidenceRaw !== undefined ? parseConfidenceInput(confidenceRaw) : undefined;\n const parentReferencePolicy = settings.validation.parent_reference;\n const sprintReleasePolicy = settings.validation.sprint_release_format;\n const validationWarnings: string[] = [];\n // Event-type items with no attached schedule never surface on the calendar; warn (never block).\n if (type.toLowerCase() === \"event\" && (events.values === undefined || events.values.length === 0)) {\n validationWarnings.push(`event_without_schedule:${id}:no_time_set`);\n }\n // Calendar-relevant types (Milestone, Meeting, Reminder, Event) with NO deadline AND no\n // reminders AND no events are invisible on `pm calendar`. Warn (never block) so the agent\n // can attach a schedule via `pm update`.\n const calendarRelevantTypes = new Set([\"milestone\", \"meeting\", \"reminder\", \"event\"]);\n const hasDeadline = deadline !== undefined;\n const hasReminders = reminders.values !== undefined && reminders.values.length > 0;\n const hasEvents = events.values !== undefined && events.values.length > 0;\n if (calendarRelevantTypes.has(type.toLowerCase()) && !hasDeadline && !hasReminders && !hasEvents) {\n validationWarnings.push(`calendar_item_without_schedule:${id}:no_deadline_or_reminder_or_event`);\n }\n if (parent !== undefined) {\n parent = normalizeParentReferenceValue(parent);\n const parentLocated = await locateItem(pmRoot, parent, settings.id_prefix, settings.item_format, typeRegistry.type_to_folder);\n if (!parentLocated) {\n const normalizedParentId = normalizeItemId(parent, settings.id_prefix);\n validationWarnings.push(...validateMissingParentReference(normalizedParentId, parentReferencePolicy).warnings);\n }\n }\n let sprint =\n unsetTargets.frontMatterKeys.has(\"sprint\") || resolvedOptions.sprint === undefined\n ? undefined\n : parseOptionalString(resolvedOptions.sprint);\n if (sprint !== undefined) {\n const sprintValidation = validateSprintOrReleaseValue(\"sprint\", sprint, sprintReleasePolicy);\n sprint = sprintValidation.value;\n validationWarnings.push(...sprintValidation.warnings);\n }\n let release =\n unsetTargets.frontMatterKeys.has(\"release\") || resolvedOptions.release === undefined\n ? undefined\n : parseOptionalString(resolvedOptions.release);\n if (release !== undefined) {\n const releaseValidation = validateSprintOrReleaseValue(\"release\", release, sprintReleasePolicy);\n release = releaseValidation.value;\n validationWarnings.push(...releaseValidation.warnings);\n }\n const blockedBy =\n unsetTargets.frontMatterKeys.has(\"blocked_by\") || resolvedOptions.blockedBy === undefined\n ? undefined\n : parseOptionalString(resolvedOptions.blockedBy);\n let dependencyValues = dependencies.values;\n if (blockedBy !== undefined) {\n const normalizedBlockedBy = normalizeItemId(blockedBy, settings.id_prefix);\n const blockedByLocated = await locateItem(pmRoot, normalizedBlockedBy, settings.id_prefix, settings.item_format, typeRegistry.type_to_folder);\n if (blockedByLocated) {\n const hasBlockedByDependency = (dependencyValues ?? []).some(\n (dependency) => dependency.id === blockedByLocated.id && dependency.kind === \"blocked_by\",\n );\n if (!hasBlockedByDependency) {\n dependencyValues = [\n ...(dependencyValues ?? []),\n {\n id: blockedByLocated.id,\n kind: \"blocked_by\",\n created_at: nowValue,\n author,\n },\n ];\n }\n if (resolvedOptions.status === undefined) {\n status = statusRegistry.blocked_statuses.has(\"blocked\")\n ? \"blocked\"\n : [...statusRegistry.blocked_statuses].sort((left, right) => left.localeCompare(right))[0] ?? statusRegistry.open_status;\n }\n }\n }\n const blockedReason =\n unsetTargets.frontMatterKeys.has(\"blocked_reason\") || resolvedOptions.blockedReason === undefined\n ? undefined\n : parseOptionalString(resolvedOptions.blockedReason);\n const unblockNote =\n unsetTargets.frontMatterKeys.has(\"unblock_note\") || resolvedOptions.unblockNote === undefined\n ? undefined\n : parseOptionalString(resolvedOptions.unblockNote);\n const reporter =\n unsetTargets.frontMatterKeys.has(\"reporter\") || resolvedOptions.reporter === undefined\n ? undefined\n : parseOptionalString(resolvedOptions.reporter);\n const severityRaw =\n unsetTargets.frontMatterKeys.has(\"severity\") || resolvedOptions.severity === undefined\n ? undefined\n : parseOptionalString(resolvedOptions.severity);\n const severity =\n severityRaw !== undefined ? ensureEnumValue(normalizeSeverityInput(severityRaw), ISSUE_SEVERITY_VALUES, \"severity\") : undefined;\n const environment =\n unsetTargets.frontMatterKeys.has(\"environment\") || resolvedOptions.environment === undefined\n ? undefined\n : parseOptionalString(resolvedOptions.environment);\n const reproSteps =\n unsetTargets.frontMatterKeys.has(\"repro_steps\") || resolvedOptions.reproSteps === undefined\n ? undefined\n : parseOptionalString(resolvedOptions.reproSteps);\n const resolution =\n unsetTargets.frontMatterKeys.has(\"resolution\") || resolvedOptions.resolution === undefined\n ? undefined\n : parseOptionalString(resolvedOptions.resolution);\n const expectedResult =\n unsetTargets.frontMatterKeys.has(\"expected_result\") || resolvedOptions.expectedResult === undefined\n ? undefined\n : parseOptionalString(resolvedOptions.expectedResult);\n const actualResult =\n unsetTargets.frontMatterKeys.has(\"actual_result\") || resolvedOptions.actualResult === undefined\n ? undefined\n : parseOptionalString(resolvedOptions.actualResult);\n const affectedVersion =\n unsetTargets.frontMatterKeys.has(\"affected_version\") || resolvedOptions.affectedVersion === undefined\n ? undefined\n : parseOptionalString(resolvedOptions.affectedVersion);\n const fixedVersion =\n unsetTargets.frontMatterKeys.has(\"fixed_version\") || resolvedOptions.fixedVersion === undefined\n ? undefined\n : parseOptionalString(resolvedOptions.fixedVersion);\n const component =\n unsetTargets.frontMatterKeys.has(\"component\") || resolvedOptions.component === undefined\n ? undefined\n : parseOptionalString(resolvedOptions.component);\n const regressionRaw =\n unsetTargets.frontMatterKeys.has(\"regression\") || resolvedOptions.regression === undefined\n ? undefined\n : parseOptionalString(resolvedOptions.regression);\n const regression = regressionRaw !== undefined ? parseRegressionInput(regressionRaw) : undefined;\n const customerImpact =\n unsetTargets.frontMatterKeys.has(\"customer_impact\") || resolvedOptions.customerImpact === undefined\n ? undefined\n : parseOptionalString(resolvedOptions.customerImpact);\n const title = requireStringOption(resolvedOptions.title, \"--title\");\n const description = resolvedOptions.description ?? \"\";\n const body = resolvedOptions.body ?? \"\";\n\n const frontMatter: ItemMetadata = normalizeFrontMatter({\n id,\n title,\n description,\n type,\n type_options: validatedTypeOptions.normalized,\n status,\n priority,\n tags,\n created_at: nowValue,\n updated_at: nowValue,\n deadline,\n assignee,\n author: authorValue,\n estimated_minutes: estimatedMinutes,\n acceptance_criteria: acceptanceCriteria,\n definition_of_ready: definitionOfReady,\n order,\n goal,\n objective,\n value,\n impact,\n outcome,\n why_now: whyNow,\n parent,\n reviewer,\n risk,\n confidence,\n sprint,\n release,\n blocked_by: blockedBy,\n blocked_reason: blockedReason,\n unblock_note: unblockNote,\n reporter,\n severity,\n environment,\n repro_steps: reproSteps,\n resolution,\n expected_result: expectedResult,\n actual_result: actualResult,\n affected_version: affectedVersion,\n fixed_version: fixedVersion,\n component,\n regression,\n customer_impact: customerImpact,\n dependencies: dependencyValues,\n comments: comments.values as Comment[] | undefined,\n notes: notes.values as LogNote[] | undefined,\n learnings: learnings.values as LogNote[] | undefined,\n files: files.values,\n tests: tests.values,\n docs: docs.values,\n reminders: reminders.values,\n events: events.values,\n ...registeredItemFieldValues,\n ...(runtimeCreateFieldValues.values ?? {}),\n });\n try {\n applyRegisteredItemFieldDefaultsAndValidation(\n frontMatter as unknown as Record<string, unknown>,\n extensionRegistrations,\n );\n } catch (error: unknown) {\n throw new PmCliError(error instanceof Error ? error.message : \"Invalid extension item field values\", EXIT_CODE.USAGE);\n }\n\n const afterDocument: ItemDocument = canonicalDocument(\n {\n metadata: frontMatter,\n body,\n },\n { schema: settings.schema, extensionFieldNames },\n );\n const beforeDocument: ItemDocument = {\n metadata: {} as ItemMetadata,\n body: \"\",\n };\n\n const itemPath = getItemPath(pmRoot, type, id, settings.item_format, typeRegistry.type_to_folder);\n const historyPath = getHistoryPath(pmRoot, id);\n const lockRelease = await acquireLock(\n pmRoot,\n id,\n settings.locks.ttl_seconds,\n author,\n false,\n settings.governance.force_required_for_stale_lock,\n );\n const explicitUnsetKeys = [...explicitUnsets].sort((left, right) => left.localeCompare(right));\n const historyMessage = buildHistoryMessage(resolvedOptions.message, explicitUnsetKeys);\n const changedFields = buildChangedFields(frontMatter, body, explicitUnsetKeys, [\n ...Object.keys(registeredItemFieldValues),\n ...Object.keys(runtimeCreateFieldValues.values ?? {}),\n ]);\n let hookWarnings: string[] = [];\n\n try {\n await writeFileAtomic(\n itemPath,\n serializeItemDocument(afterDocument, {\n format: settings.item_format,\n schema: settings.schema,\n extensionFieldNames,\n }),\n );\n try {\n const entry = createHistoryEntry({\n nowIso: nowValue,\n author,\n op: \"create\",\n before: beforeDocument,\n after: afterDocument,\n message: historyMessage,\n });\n await appendHistoryEntry(historyPath, entry);\n } catch (error: unknown) {\n await removeFileIfExists(itemPath);\n throw error;\n }\n hookWarnings = [\n ...(await runActiveOnWriteHooks({\n path: itemPath,\n scope: \"project\",\n op: \"create\",\n item_id: afterDocument.metadata.id,\n item_type: afterDocument.metadata.type,\n before: beforeDocument,\n after: afterDocument,\n changed_fields: changedFields,\n })),\n ...(await runActiveOnWriteHooks({\n path: historyPath,\n scope: \"project\",\n op: \"create:history\",\n item_id: afterDocument.metadata.id,\n item_type: afterDocument.metadata.type,\n before: beforeDocument,\n after: afterDocument,\n changed_fields: changedFields,\n })),\n ];\n recordAfterCommandAffectedItem({\n id: afterDocument.metadata.id,\n op: \"create\",\n item_type: afterDocument.metadata.type,\n status: afterDocument.metadata.status,\n current: projectAfterCommandItemSnapshot(afterDocument.metadata, changedFields),\n changed_fields: changedFields,\n });\n } finally {\n await lockRelease();\n }\n\n const outputItem = structuredClone(frontMatter);\n\n // After the create has committed (so the ID is real and shows up in the suggestion),\n // emit a single non-blocking stderr hint when the new item would be invisible on `pm\n // calendar`. The structured `calendar_item_without_schedule:*` warning above is what\n // automation reads; this stderr line is the human/agent-facing version with a\n // copy-pasteable `pm update` recipe.\n if (calendarRelevantTypes.has(type.toLowerCase()) && !hasDeadline && !hasReminders && !hasEvents) {\n printError(\n `[pm] warning: ${type} '${id}' has no deadline/reminder/event — it will not appear on the calendar. Add one via 'pm update ${id} --deadline <ISO>' or 'pm update ${id} --event \"start=<ISO>,end=<ISO>\"'.`,\n );\n }\n\n return {\n item: outputItem,\n changed_fields: changedFields,\n warnings: [...validationWarnings, ...hookWarnings],\n };\n}\n"],"names":["endAt","value"],"mappings":"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","debugId":"67af10d9-cb2f-5b7f-9238-a7eae5edeb4d"}
|