@unbrained/pm-cli 2026.6.30 → 2026.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +2 -0
- package/CHANGELOG.md +26 -0
- package/dist/cli/bootstrap-args.js +89 -79
- package/dist/cli/bootstrap-args.js.map +1 -1
- package/dist/cli/commander-usage.d.ts +2 -0
- package/dist/cli/commander-usage.js +58 -47
- package/dist/cli/commander-usage.js.map +1 -1
- package/dist/cli/commands/aggregate.js +102 -79
- package/dist/cli/commands/aggregate.js.map +1 -1
- package/dist/cli/commands/calendar.js +339 -303
- package/dist/cli/commands/calendar.js.map +1 -1
- package/dist/cli/commands/close-many.js +89 -68
- package/dist/cli/commands/close-many.js.map +1 -1
- package/dist/cli/commands/close.js +157 -129
- package/dist/cli/commands/close.js.map +1 -1
- package/dist/cli/commands/comments-audit.js +50 -42
- package/dist/cli/commands/comments-audit.js.map +1 -1
- package/dist/cli/commands/config.d.ts +2 -0
- package/dist/cli/commands/config.js +443 -879
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/context.js +365 -287
- package/dist/cli/commands/context.js.map +1 -1
- package/dist/cli/commands/contracts.js +352 -238
- package/dist/cli/commands/contracts.js.map +1 -1
- package/dist/cli/commands/create.js +483 -434
- package/dist/cli/commands/create.js.map +1 -1
- package/dist/cli/commands/dedupe-audit.js +46 -39
- package/dist/cli/commands/dedupe-audit.js.map +1 -1
- package/dist/cli/commands/dedupe-merge.js +88 -69
- package/dist/cli/commands/dedupe-merge.js.map +1 -1
- package/dist/cli/commands/extension/bundled-catalog.js +59 -46
- package/dist/cli/commands/extension/bundled-catalog.js.map +1 -1
- package/dist/cli/commands/extension/doctor.js +129 -78
- package/dist/cli/commands/extension/doctor.js.map +1 -1
- package/dist/cli/commands/extension/managed-state.js +101 -57
- package/dist/cli/commands/extension/managed-state.js.map +1 -1
- package/dist/cli/commands/extension/scaffold.d.ts +7 -0
- package/dist/cli/commands/extension/scaffold.js +214 -186
- package/dist/cli/commands/extension/scaffold.js.map +1 -1
- package/dist/cli/commands/extension.d.ts +6 -1
- package/dist/cli/commands/extension.js +1034 -902
- package/dist/cli/commands/extension.js.map +1 -1
- package/dist/cli/commands/get.js +114 -81
- package/dist/cli/commands/get.js.map +1 -1
- package/dist/cli/commands/health.d.ts +17 -0
- package/dist/cli/commands/health.js +446 -307
- package/dist/cli/commands/health.js.map +1 -1
- package/dist/cli/commands/history-compact.js +209 -140
- package/dist/cli/commands/history-compact.js.map +1 -1
- package/dist/cli/commands/history-redact.js +162 -119
- package/dist/cli/commands/history-redact.js.map +1 -1
- package/dist/cli/commands/history-repair.js +120 -85
- package/dist/cli/commands/history-repair.js.map +1 -1
- package/dist/cli/commands/init.d.ts +8 -2
- package/dist/cli/commands/init.js +263 -162
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/list-filter-shared.js +55 -48
- package/dist/cli/commands/list-filter-shared.js.map +1 -1
- package/dist/cli/commands/list.js +152 -102
- package/dist/cli/commands/list.js.map +1 -1
- package/dist/cli/commands/next.js +49 -32
- package/dist/cli/commands/next.js.map +1 -1
- package/dist/cli/commands/plan.js +373 -298
- package/dist/cli/commands/plan.js.map +1 -1
- package/dist/cli/commands/recurrence-parsers.js +43 -25
- package/dist/cli/commands/recurrence-parsers.js.map +1 -1
- package/dist/cli/commands/reindex.d.ts +21 -5
- package/dist/cli/commands/reindex.js +345 -205
- package/dist/cli/commands/reindex.js.map +1 -1
- package/dist/cli/commands/restore.d.ts +8 -7
- package/dist/cli/commands/restore.js +105 -69
- package/dist/cli/commands/restore.js.map +1 -1
- package/dist/cli/commands/schema.js +33 -30
- package/dist/cli/commands/schema.js.map +1 -1
- package/dist/cli/commands/search.d.ts +10 -2
- package/dist/cli/commands/search.js +595 -536
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/telemetry.js +98 -87
- package/dist/cli/commands/telemetry.js.map +1 -1
- package/dist/cli/commands/test-all.js +237 -168
- package/dist/cli/commands/test-all.js.map +1 -1
- package/dist/cli/commands/test.d.ts +6 -5
- package/dist/cli/commands/test.js +530 -464
- package/dist/cli/commands/test.js.map +1 -1
- package/dist/cli/commands/update-many.js +57 -42
- package/dist/cli/commands/update-many.js.map +1 -1
- package/dist/cli/commands/update.d.ts +1 -1
- package/dist/cli/commands/update.js +764 -747
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/commands/validate.d.ts +18 -1
- package/dist/cli/commands/validate.js +466 -343
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/error-guidance.js +399 -357
- package/dist/cli/error-guidance.js.map +1 -1
- package/dist/cli/extension-command-options.js +48 -21
- package/dist/cli/extension-command-options.js.map +1 -1
- package/dist/cli/main.d.ts +47 -0
- package/dist/cli/main.js +428 -341
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/migration-gates.js +22 -45
- package/dist/cli/migration-gates.js.map +1 -1
- package/dist/cli/register-list-query.js +94 -105
- package/dist/cli/register-list-query.js.map +1 -1
- package/dist/cli/register-mutation.js +400 -416
- package/dist/cli/register-mutation.js.map +1 -1
- package/dist/cli/register-operations.js +86 -66
- package/dist/cli/register-operations.js.map +1 -1
- package/dist/cli/register-setup.js +120 -101
- package/dist/cli/register-setup.js.map +1 -1
- package/dist/cli/registration-helpers.js +117 -122
- package/dist/cli/registration-helpers.js.map +1 -1
- package/dist/cli-bundle/chunks/{activity-MVSEND6D.js → activity-CUC4JY3U.js} +9 -9
- package/dist/cli-bundle/chunks/activity-WEIEMM73.js +16 -0
- package/dist/cli-bundle/chunks/{aggregate-MOC4TR2G.js → aggregate-DKUTRY6R.js} +109 -85
- package/dist/cli-bundle/chunks/aggregate-DKUTRY6R.js.map +1 -0
- package/dist/cli-bundle/chunks/{aggregate-XJHLZQ5X.js → aggregate-SW5PNGCS.js} +108 -84
- package/dist/cli-bundle/chunks/{aggregate-XJHLZQ5X.js.map → aggregate-SW5PNGCS.js.map} +2 -2
- package/dist/cli-bundle/chunks/{append-KDHT4GHI.js → append-H32VOR2Y.js} +6 -6
- package/dist/cli-bundle/chunks/{append-LEDBAM3K.js → append-UBM632FK.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-Z55WX4IQ.js → chunk-2227673O.js} +158 -114
- package/dist/cli-bundle/chunks/chunk-2227673O.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-SJZTPVFT.js → chunk-2ASNV4DH.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-JVQ7UOYC.js → chunk-2CHRYUXL.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-QE5UFCCO.js → chunk-2KWL5NPW.js} +42 -27
- package/dist/cli-bundle/chunks/chunk-2KWL5NPW.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-ZEATCVAC.js → chunk-36UGKF4O.js} +21 -29
- package/dist/cli-bundle/chunks/chunk-36UGKF4O.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-JZG5ADVE.js → chunk-3AZUFQK6.js} +1103 -963
- package/dist/cli-bundle/chunks/chunk-3AZUFQK6.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-DRPF274X.js → chunk-3LCUASYG.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-JJ4SG243.js → chunk-3Q2HBMTI.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-4BU75MF4.js +87 -0
- package/dist/cli-bundle/chunks/chunk-4BU75MF4.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-GF7EAR22.js → chunk-4NUOWFBT.js} +109 -72
- package/dist/cli-bundle/chunks/chunk-4NUOWFBT.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-TQ6E76BE.js → chunk-55XRYWEG.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-5IRVSKPS.js → chunk-5GVTFFTC.js} +150 -224
- package/dist/cli-bundle/chunks/chunk-5GVTFFTC.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-CHRNYKNI.js → chunk-5PGBHRY3.js} +41 -26
- package/dist/cli-bundle/chunks/chunk-5PGBHRY3.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-53ARXF2O.js → chunk-66Z3X7ZG.js} +261 -161
- package/dist/cli-bundle/chunks/chunk-66Z3X7ZG.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-A3UNLXNJ.js → chunk-6ITZLD4T.js} +738 -688
- package/dist/cli-bundle/chunks/chunk-6ITZLD4T.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-JTRKME24.js → chunk-6YCYF2AI.js} +262 -162
- package/dist/cli-bundle/chunks/chunk-6YCYF2AI.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-RM6MHL6A.js → chunk-6ZMBJRDJ.js} +580 -467
- package/dist/cli-bundle/chunks/chunk-6ZMBJRDJ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-RPRW26NG.js → chunk-7MYWF4ZX.js} +110 -73
- package/dist/cli-bundle/chunks/chunk-7MYWF4ZX.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-SNUK7H5J.js → chunk-7NSPKJUS.js} +716 -606
- package/dist/cli-bundle/chunks/chunk-7NSPKJUS.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-KYDYQMNW.js → chunk-7TH5NMVB.js} +95 -53
- package/dist/cli-bundle/chunks/chunk-7TH5NMVB.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-VD3LKZFX.js → chunk-7W4H4K26.js} +739 -689
- package/dist/cli-bundle/chunks/chunk-7W4H4K26.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-IBU2LLWM.js → chunk-A6VOGKBA.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-MLHX6DN5.js → chunk-AIAIXG7I.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-NIBP3I7A.js → chunk-AJEBCRIY.js} +128 -126
- package/dist/cli-bundle/chunks/chunk-AJEBCRIY.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-VZDBVEZR.js → chunk-B4O5S7I3.js} +79 -57
- package/dist/cli-bundle/chunks/{chunk-VZDBVEZR.js.map → chunk-B4O5S7I3.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-5ABGFWR4.js → chunk-BTX5MIQF.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-BVZZN2LH.js +809 -0
- package/dist/cli-bundle/chunks/chunk-BVZZN2LH.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-3JWQCLR5.js → chunk-CYBDUHNO.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-WFJZDUM7.js → chunk-CZPVDLD2.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-FDEVKXC4.js → chunk-EMPGXBUF.js} +22 -30
- package/dist/cli-bundle/chunks/chunk-EMPGXBUF.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-HUYYMTGW.js → chunk-EUKTMRN3.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-EVWYAG46.js → chunk-FFOQHGNH.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-IF4ERU6A.js → chunk-GFMSLORL.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-IZQOJR2B.js → chunk-GRRG3MCT.js} +198 -189
- package/dist/cli-bundle/chunks/chunk-GRRG3MCT.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-IDYCAK35.js → chunk-H4GRLYJS.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-VMY7MZEM.js → chunk-HQTPRV4D.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-CY5IJMUM.js → chunk-I66WE2HE.js} +712 -602
- package/dist/cli-bundle/chunks/chunk-I66WE2HE.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-ZFIEEDTJ.js → chunk-IEEJQCZ4.js} +509 -363
- package/dist/cli-bundle/chunks/chunk-IEEJQCZ4.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-DU66JUGT.js → chunk-IG5JYZGU.js} +488 -420
- package/dist/cli-bundle/chunks/chunk-IG5JYZGU.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-7L6TXOOC.js → chunk-JMK5GCK2.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-LBH7UYKY.js → chunk-JXAUVO6X.js} +258 -169
- package/dist/cli-bundle/chunks/{chunk-LBH7UYKY.js.map → chunk-JXAUVO6X.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-KRASIL6M.js → chunk-K2VYLVX4.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-4YIMPANT.js → chunk-KCO2EAN5.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-T7ZMQI4J.js → chunk-KIYCOJ63.js} +198 -189
- package/dist/cli-bundle/chunks/chunk-KIYCOJ63.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-D6USKAMA.js → chunk-KLXF7NCC.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-V3KLX7U7.js → chunk-KN3URLKS.js} +510 -364
- package/dist/cli-bundle/chunks/chunk-KN3URLKS.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-OB3RJV5F.js → chunk-LRKMWUUV.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-74PUWBGN.js → chunk-LTRAF2D7.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-5T6WPLRO.js → chunk-MNBPX5JS.js} +394 -354
- package/dist/cli-bundle/chunks/chunk-MNBPX5JS.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-4TXTVZL3.js → chunk-MRD4T5LF.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-E2Q2ULMR.js → chunk-N2JSWVWG.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-7WDETKGP.js → chunk-N3QCJS4M.js} +1105 -965
- package/dist/cli-bundle/chunks/chunk-N3QCJS4M.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-KGQ3W65B.js → chunk-NRZS637N.js} +258 -169
- package/dist/cli-bundle/chunks/chunk-NRZS637N.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-OTUJZKGI.js +799 -0
- package/dist/cli-bundle/chunks/chunk-OTUJZKGI.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-ZIE6WXJ2.js → chunk-Q6K2OACU.js} +153 -90
- package/dist/cli-bundle/chunks/chunk-Q6K2OACU.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-K46GQ265.js → chunk-Q6NXOHS6.js} +489 -421
- package/dist/cli-bundle/chunks/chunk-Q6NXOHS6.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-7RIJGN4R.js → chunk-QH3FSKRJ.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-UB3V5WUI.js → chunk-RM37OPYK.js} +394 -354
- package/dist/cli-bundle/chunks/chunk-RM37OPYK.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-OUQ5JEFM.js → chunk-S62UANU7.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-NO6Y6FB2.js → chunk-SPM2XLWI.js} +37 -28
- package/dist/cli-bundle/chunks/chunk-SPM2XLWI.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-DORJSBGJ.js → chunk-SYNKD3ZG.js} +127 -125
- package/dist/cli-bundle/chunks/chunk-SYNKD3ZG.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-6YRAMXRS.js → chunk-SYVUU7EK.js} +581 -468
- package/dist/cli-bundle/chunks/chunk-SYVUU7EK.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-D5LYZVGB.js → chunk-TPOFWBMY.js} +95 -53
- package/dist/cli-bundle/chunks/chunk-TPOFWBMY.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-IHXXUIXS.js → chunk-TTHCEV5Q.js} +92 -77
- package/dist/cli-bundle/chunks/chunk-TTHCEV5Q.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-DLDCPF5X.js → chunk-U2BEEM2X.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-Z5BM2FKQ.js → chunk-UGLU6Q2I.js} +91 -76
- package/dist/cli-bundle/chunks/chunk-UGLU6Q2I.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-73PTKMAE.js → chunk-UT73HUPC.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-F7G53BOA.js → chunk-UTSH5GWX.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-AWN4PPH5.js → chunk-UWKEJMZU.js} +157 -113
- package/dist/cli-bundle/chunks/chunk-UWKEJMZU.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-VY3VQ22F.js +84 -0
- package/dist/cli-bundle/chunks/chunk-VY3VQ22F.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-KTMMTOIP.js → chunk-W47SML5B.js} +152 -89
- package/dist/cli-bundle/chunks/chunk-W47SML5B.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-UFKNF23C.js → chunk-WJAMWAHZ.js} +157 -118
- package/dist/cli-bundle/chunks/chunk-WJAMWAHZ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-HIBK6H4S.js → chunk-XCHUVHKU.js} +685 -544
- package/dist/cli-bundle/chunks/chunk-XCHUVHKU.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-DJDXAU74.js → chunk-XEWQKDYZ.js} +685 -544
- package/dist/cli-bundle/chunks/chunk-XEWQKDYZ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-BOWQWXLI.js → chunk-XTHQWXVC.js} +158 -119
- package/dist/cli-bundle/chunks/chunk-XTHQWXVC.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-6T5ZIWBS.js → chunk-XWGEMNBR.js} +150 -224
- package/dist/cli-bundle/chunks/chunk-XWGEMNBR.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-JIP67N2K.js → chunk-Y4NRKBFW.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-WTRUDJ3R.js → chunk-YLZZ6T54.js} +38 -29
- package/dist/cli-bundle/chunks/chunk-YLZZ6T54.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-FBZ5XAAF.js → chunk-YPKFV2JR.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-OKQ22KTH.js → chunk-Z4DGFQDH.js} +80 -58
- package/dist/cli-bundle/chunks/{chunk-OKQ22KTH.js.map → chunk-Z4DGFQDH.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-BN3CWK6G.js → chunk-ZNHEYCDD.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-YEDFE4DC.js → chunk-ZNT7KEWE.js} +2 -2
- package/dist/cli-bundle/chunks/{claim-HMCLSLUE.js → claim-SENTPZBN.js} +8 -8
- package/dist/cli-bundle/chunks/{claim-6NINZYB3.js → claim-Z7MEQCBT.js} +8 -8
- package/dist/cli-bundle/chunks/{close-OP3LK7Z2.js → close-424MX4CU.js} +7 -7
- package/dist/cli-bundle/chunks/close-YCWQQPDS.js +14 -0
- package/dist/cli-bundle/chunks/{close-many-CXJBOWWY.js → close-many-2IV4J2TR.js} +103 -82
- package/dist/cli-bundle/chunks/close-many-2IV4J2TR.js.map +1 -0
- package/dist/cli-bundle/chunks/{close-many-BFMP6HHK.js → close-many-SWY34BII.js} +102 -81
- package/dist/cli-bundle/chunks/close-many-SWY34BII.js.map +7 -0
- package/dist/cli-bundle/chunks/{comments-ETHABIY6.js → comments-4FGNTSNV.js} +8 -8
- package/dist/cli-bundle/chunks/{comments-MU2WMBUY.js → comments-7YS5MY5X.js} +8 -8
- package/dist/cli-bundle/chunks/config-BZJKK7FZ.js +1062 -0
- package/dist/cli-bundle/chunks/config-BZJKK7FZ.js.map +1 -0
- package/dist/cli-bundle/chunks/config-G74GISC4.js +1072 -0
- package/dist/cli-bundle/chunks/config-G74GISC4.js.map +7 -0
- package/dist/cli-bundle/chunks/{context-7ZEZV3BV.js → context-LHVKJSPJ.js} +12 -12
- package/dist/cli-bundle/chunks/{context-XDI4DKKT.js → context-ZQY54JNS.js} +12 -12
- package/dist/cli-bundle/chunks/{contracts-SMOAN5NF.js → contracts-CP2EZJC7.js} +320 -199
- package/dist/cli-bundle/chunks/contracts-CP2EZJC7.js.map +7 -0
- package/dist/cli-bundle/chunks/{contracts-KP4QAGVW.js → contracts-FIZLMP7O.js} +321 -200
- package/dist/cli-bundle/chunks/contracts-FIZLMP7O.js.map +1 -0
- package/dist/cli-bundle/chunks/{copy-JJ3KOQW2.js → copy-GYNQQPW2.js} +5 -5
- package/dist/cli-bundle/chunks/{copy-CWM6SBY6.js → copy-TLW7JTQT.js} +5 -5
- package/dist/cli-bundle/chunks/{create-J5Q2ELZT.js → create-VSKYSOCD.js} +12 -12
- package/dist/cli-bundle/chunks/create-XTMAPS7I.js +28 -0
- package/dist/cli-bundle/chunks/{delete-2GZLQEUQ.js → delete-4W5JYCEG.js} +5 -5
- package/dist/cli-bundle/chunks/{delete-OOQS4KVD.js → delete-ANTOTI2I.js} +5 -5
- package/dist/cli-bundle/chunks/{deps-IF4IGL4R.js → deps-HPPE6MJN.js} +5 -5
- package/dist/cli-bundle/chunks/{deps-ZVGGCRR6.js → deps-ZQZN54EZ.js} +5 -5
- package/dist/cli-bundle/chunks/{docs-NFTBCQQC.js → docs-RPOVFMP3.js} +7 -7
- package/dist/cli-bundle/chunks/{docs-2TIFR62T.js → docs-XJNYBJGE.js} +7 -7
- package/dist/cli-bundle/chunks/{eval-2F6EH4XN.js → eval-DM6JBZTS.js} +10 -10
- package/dist/cli-bundle/chunks/{eval-PFKXQR3B.js → eval-RFBI5FGS.js} +10 -10
- package/dist/cli-bundle/chunks/{extension-GMVOIP4O.js → extension-B3YY4WY5.js} +11 -10
- package/dist/cli-bundle/chunks/{extension-3LRYX7SW.js → extension-TTSEFQTS.js} +11 -10
- package/dist/cli-bundle/chunks/{files-DF3HO6XK.js → files-5D65CHGE.js} +7 -7
- package/dist/cli-bundle/chunks/{files-T5ODMETM.js → files-GPIG77EN.js} +7 -7
- package/dist/cli-bundle/chunks/{focus-MY5ARIEK.js → focus-C3PEJV2C.js} +6 -6
- package/dist/cli-bundle/chunks/{focus-DLXKK4AH.js → focus-ZHN7WIGX.js} +6 -6
- package/dist/cli-bundle/chunks/{gc-MDGRR2SU.js → gc-D4JQ6OWN.js} +3 -3
- package/dist/cli-bundle/chunks/{gc-FULIVYR4.js → gc-VZIXDL32.js} +3 -3
- package/dist/cli-bundle/chunks/{get-VYPIICPC.js → get-GIBRUUOP.js} +121 -81
- package/dist/cli-bundle/chunks/get-GIBRUUOP.js.map +1 -0
- package/dist/cli-bundle/chunks/{get-AWK324RS.js → get-IOVAN6RU.js} +120 -80
- package/dist/cli-bundle/chunks/get-IOVAN6RU.js.map +7 -0
- package/dist/cli-bundle/chunks/{health-Q66C43GN.js → health-L2U3AFKV.js} +437 -264
- package/dist/cli-bundle/chunks/health-L2U3AFKV.js.map +1 -0
- package/dist/cli-bundle/chunks/{health-FBCVZGSX.js → health-MM7AWXYF.js} +436 -263
- package/dist/cli-bundle/chunks/health-MM7AWXYF.js.map +7 -0
- package/dist/cli-bundle/chunks/history-DD7L7BNL.js +18 -0
- package/dist/cli-bundle/chunks/{history-X4OSES6K.js → history-IL7XCEX2.js} +8 -8
- package/dist/cli-bundle/chunks/{history-compact-2GHT32UX.js → history-compact-HALOTOU7.js} +214 -135
- package/dist/cli-bundle/chunks/history-compact-HALOTOU7.js.map +1 -0
- package/dist/cli-bundle/chunks/{history-compact-WLCQEKXS.js → history-compact-MV25P7DM.js} +213 -134
- package/dist/cli-bundle/chunks/history-compact-MV25P7DM.js.map +7 -0
- package/dist/cli-bundle/chunks/history-redact-IX4YEWMY.js +19 -0
- package/dist/cli-bundle/chunks/{history-redact-45YW65BK.js → history-redact-VYCWQFK7.js} +9 -9
- package/dist/cli-bundle/chunks/{history-repair-FY75IC26.js → history-repair-44MODPQF.js} +124 -84
- package/dist/cli-bundle/chunks/history-repair-44MODPQF.js.map +1 -0
- package/dist/cli-bundle/chunks/{history-repair-GABSDSVD.js → history-repair-CPNAOCNF.js} +123 -83
- package/dist/cli-bundle/chunks/history-repair-CPNAOCNF.js.map +7 -0
- package/dist/cli-bundle/chunks/{init-KO7CGIRQ.js → init-F27NHENZ.js} +12 -11
- package/dist/cli-bundle/chunks/init-HHVQQP6C.js +22 -0
- package/dist/cli-bundle/chunks/{learnings-LHZT5BHW.js → learnings-HJVDQIGY.js} +8 -8
- package/dist/cli-bundle/chunks/{learnings-3F7YLI45.js → learnings-XSFSUUWK.js} +8 -8
- package/dist/cli-bundle/chunks/{list-Y6AU5BJS.js → list-HPMEKCAA.js} +8 -8
- package/dist/cli-bundle/chunks/{list-ROT7JF62.js → list-VMPWTURB.js} +8 -8
- package/dist/cli-bundle/chunks/{next-66BJB4N2.js → next-ETXF2ZCN.js} +59 -37
- package/dist/cli-bundle/chunks/next-ETXF2ZCN.js.map +7 -0
- package/dist/cli-bundle/chunks/{next-N5MWJTBY.js → next-QM6YJIIS.js} +60 -38
- package/dist/cli-bundle/chunks/next-QM6YJIIS.js.map +1 -0
- package/dist/cli-bundle/chunks/{notes-FW6YFLND.js → notes-GDZIKGR6.js} +8 -8
- package/dist/cli-bundle/chunks/{notes-EVJZ3VAB.js → notes-WDDBPC4D.js} +8 -8
- package/dist/cli-bundle/chunks/{plan-ZHKZ7JVF.js → plan-BGDR73Z6.js} +373 -279
- package/dist/cli-bundle/chunks/plan-BGDR73Z6.js.map +1 -0
- package/dist/cli-bundle/chunks/{plan-DQ7G4EDC.js → plan-C5IMM335.js} +372 -278
- package/dist/cli-bundle/chunks/plan-C5IMM335.js.map +7 -0
- package/dist/cli-bundle/chunks/{profile-CHAW6SEA.js → profile-CCOKZ2IQ.js} +9 -9
- package/dist/cli-bundle/chunks/{profile-UPZGCDOG.js → profile-HUCENIEQ.js} +9 -9
- package/dist/cli-bundle/chunks/{register-list-query-Y2VRHPCL.js → register-list-query-ROSNIL52.js} +80 -83
- package/dist/cli-bundle/chunks/register-list-query-ROSNIL52.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-list-query-KY6Z6WV7.js → register-list-query-XN4ZRHSV.js} +79 -82
- package/dist/cli-bundle/chunks/register-list-query-XN4ZRHSV.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-mutation-PCARIGZS.js → register-mutation-CFSB2MS3.js} +406 -385
- package/dist/cli-bundle/chunks/register-mutation-CFSB2MS3.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-mutation-N6AYSKPM.js → register-mutation-KRLAHEL2.js} +405 -384
- package/dist/cli-bundle/chunks/register-mutation-KRLAHEL2.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-operations-L6CYTOIH.js → register-operations-4PASGJDB.js} +112 -93
- package/dist/cli-bundle/chunks/register-operations-4PASGJDB.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-operations-YAT6FUUB.js → register-operations-MBN4KGUM.js} +113 -94
- package/dist/cli-bundle/chunks/register-operations-MBN4KGUM.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-setup-N7UGXYJC.js → register-setup-VIAWYFP5.js} +129 -104
- package/dist/cli-bundle/chunks/register-setup-VIAWYFP5.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-setup-MPANILQF.js → register-setup-ZCGKHDKL.js} +128 -103
- package/dist/cli-bundle/chunks/register-setup-ZCGKHDKL.js.map +7 -0
- package/dist/cli-bundle/chunks/{restore-DKMCLPI5.js → restore-4CBWUMCX.js} +9 -9
- package/dist/cli-bundle/chunks/restore-5UEAGG3W.js +17 -0
- package/dist/cli-bundle/chunks/{scheduling-shortcuts-3F4QUEDH.js → scheduling-shortcuts-6VFKNKCM.js} +12 -12
- package/dist/cli-bundle/chunks/{scheduling-shortcuts-BNZLQK36.js → scheduling-shortcuts-ERHCVTEM.js} +12 -12
- package/dist/cli-bundle/chunks/{schema-OLT6LVKH.js → schema-TDGK6N3I.js} +7 -7
- package/dist/cli-bundle/chunks/{schema-XJXKJQF5.js → schema-UE5KKAUX.js} +7 -7
- package/dist/cli-bundle/chunks/{search-KP6H7COV.js → search-FP7MEU4S.js} +10 -10
- package/dist/cli-bundle/chunks/{search-CX5UMV4H.js → search-K4CFLQ5S.js} +10 -10
- package/dist/cli-bundle/chunks/{stats-QZUG6MX5.js → stats-NJJCALEZ.js} +6 -6
- package/dist/cli-bundle/chunks/{stats-7XW4OEMK.js → stats-XT6QRKQY.js} +6 -6
- package/dist/cli-bundle/chunks/{telemetry-DIFPXCAT.js → telemetry-5SQ5UDXC.js} +84 -70
- package/dist/cli-bundle/chunks/telemetry-5SQ5UDXC.js.map +7 -0
- package/dist/cli-bundle/chunks/{telemetry-WTYFUPRL.js → telemetry-HVXFZA2U.js} +85 -71
- package/dist/cli-bundle/chunks/telemetry-HVXFZA2U.js.map +1 -0
- package/dist/cli-bundle/chunks/{test-QNDXZQCW.js → test-UFSJ5YIO.js} +15 -14
- package/dist/cli-bundle/chunks/{test-HU2BS7EY.js → test-YCDAUBWF.js} +15 -14
- package/dist/cli-bundle/chunks/test-all-2BWKY3GQ.js +427 -0
- package/dist/cli-bundle/chunks/test-all-2BWKY3GQ.js.map +1 -0
- package/dist/cli-bundle/chunks/test-all-PM7UYN42.js +430 -0
- package/dist/cli-bundle/chunks/test-all-PM7UYN42.js.map +7 -0
- package/dist/cli-bundle/chunks/{test-runs-CA6K32RD.js → test-runs-FK5E75AA.js} +185 -147
- package/dist/cli-bundle/chunks/test-runs-FK5E75AA.js.map +1 -0
- package/dist/cli-bundle/chunks/{test-runs-LANLLPVO.js → test-runs-H4TGWGRN.js} +184 -146
- package/dist/cli-bundle/chunks/test-runs-H4TGWGRN.js.map +7 -0
- package/dist/cli-bundle/chunks/update-MTCFES6X.js +24 -0
- package/dist/cli-bundle/chunks/{update-DJKWLBWJ.js → update-Y5WQVT5O.js} +15 -15
- package/dist/cli-bundle/chunks/{update-many-LU3SCNK5.js → update-many-6YAYYRLE.js} +83 -68
- package/dist/cli-bundle/chunks/{update-many-LU3SCNK5.js.map → update-many-6YAYYRLE.js.map} +2 -2
- package/dist/cli-bundle/chunks/{update-many-VW5DGF3S.js → update-many-JTKKSA7Y.js} +84 -69
- package/dist/cli-bundle/chunks/{update-many-VW5DGF3S.js.map → update-many-JTKKSA7Y.js.map} +1 -1
- package/dist/cli-bundle/chunks/{upgrade-ICXY244R.js → upgrade-DTAHZ236.js} +11 -10
- package/dist/cli-bundle/chunks/{upgrade-ICXY244R.js.map → upgrade-DTAHZ236.js.map} +1 -1
- package/dist/cli-bundle/chunks/{upgrade-77FRUAXN.js → upgrade-JUDU7YL4.js} +13 -12
- package/dist/cli-bundle/chunks/{upgrade-77FRUAXN.js.map → upgrade-JUDU7YL4.js.map} +1 -1
- package/dist/cli-bundle/chunks/{validate-2G566PKQ.js → validate-732RWS5W.js} +440 -319
- package/dist/cli-bundle/chunks/validate-732RWS5W.js.map +7 -0
- package/dist/cli-bundle/chunks/{validate-BDPVXHHH.js → validate-W7H5TEDC.js} +441 -320
- package/dist/cli-bundle/chunks/validate-W7H5TEDC.js.map +1 -0
- package/dist/cli-bundle/main.js +986 -1500
- package/dist/cli-bundle/main.js.map +4 -4
- package/dist/core/config/nested-settings.js +89 -67
- package/dist/core/config/nested-settings.js.map +1 -1
- package/dist/core/extensions/activation-summary-markdown.js +23 -12
- package/dist/core/extensions/activation-summary-markdown.js.map +1 -1
- package/dist/core/extensions/extension-policy.d.ts +18 -3
- package/dist/core/extensions/extension-policy.js +116 -106
- package/dist/core/extensions/extension-policy.js.map +1 -1
- package/dist/core/extensions/loader.js +310 -232
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/governance/metadata-coverage.js +20 -28
- package/dist/core/governance/metadata-coverage.js.map +1 -1
- package/dist/core/history/drift-scan.js +93 -81
- package/dist/core/history/drift-scan.js.map +1 -1
- package/dist/core/item/item-format.js +523 -410
- package/dist/core/item/item-format.js.map +1 -1
- package/dist/core/item/item-type-definition.js +14 -14
- package/dist/core/item/item-type-definition.js.map +1 -1
- package/dist/core/item/type-registry.js +87 -82
- package/dist/core/item/type-registry.js.map +1 -1
- package/dist/core/output/mutation-projection.js +42 -26
- package/dist/core/output/mutation-projection.js.map +1 -1
- package/dist/core/schema/runtime-schema.js +34 -28
- package/dist/core/schema/runtime-schema.js.map +1 -1
- package/dist/core/search/semantic-defaults.js +64 -37
- package/dist/core/search/semantic-defaults.js.map +1 -1
- package/dist/core/search/vector-stores.js +32 -17
- package/dist/core/search/vector-stores.js.map +1 -1
- package/dist/core/sentry/helpers.js +31 -28
- package/dist/core/sentry/helpers.js.map +1 -1
- package/dist/core/sentry/instrument.js +54 -43
- package/dist/core/sentry/instrument.js.map +1 -1
- package/dist/core/store/front-matter-cache.js +239 -153
- package/dist/core/store/front-matter-cache.js.map +1 -1
- package/dist/core/store/item-store.js +33 -26
- package/dist/core/store/item-store.js.map +1 -1
- package/dist/core/store/settings.js +247 -203
- package/dist/core/store/settings.js.map +1 -1
- package/dist/core/test/background-runs.js +189 -160
- package/dist/core/test/background-runs.js.map +1 -1
- package/dist/mcp/server.js +387 -367
- package/dist/mcp/server.js.map +1 -1
- package/dist/sdk/cli-contracts/flag-contracts.js +111 -180
- package/dist/sdk/cli-contracts/flag-contracts.js.map +1 -1
- package/dist/sdk/cli-contracts/tool-schema.js +76 -45
- package/dist/sdk/cli-contracts/tool-schema.js.map +1 -1
- package/dist/sdk/compose.d.ts +4 -1
- package/dist/sdk/compose.js +181 -115
- package/dist/sdk/compose.js.map +1 -1
- package/docs/RELEASING.md +2 -3
- package/package.json +2 -2
- package/packages/pm-beads/extensions/beads/runtime.ts +240 -167
- package/packages/pm-guide-shell/extensions/guide-shell/runtime.ts +65 -58
- package/packages/pm-todos/extensions/todos/runtime.ts +65 -42
- package/dist/cli-bundle/chunks/activity-EJBMXUBH.js +0 -16
- package/dist/cli-bundle/chunks/aggregate-MOC4TR2G.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-53ARXF2O.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-5IRVSKPS.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-5T6WPLRO.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-6T5ZIWBS.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-6YRAMXRS.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-7WDETKGP.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-A3UNLXNJ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-AWN4PPH5.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-BOWQWXLI.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-C2KCIZKZ.js +0 -115
- package/dist/cli-bundle/chunks/chunk-C2KCIZKZ.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-CHRNYKNI.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-CY5IJMUM.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-D5LYZVGB.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-DJDXAU74.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-DORJSBGJ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-DU66JUGT.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-F6VH3LFC.js +0 -118
- package/dist/cli-bundle/chunks/chunk-F6VH3LFC.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-FDEVKXC4.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-GF7EAR22.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-HIBK6H4S.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-IHXXUIXS.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-ISEKN64V.js +0 -35
- package/dist/cli-bundle/chunks/chunk-ISEKN64V.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-IZQOJR2B.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-JTRKME24.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-JZG5ADVE.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-K46GQ265.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-KGQ3W65B.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-KTMMTOIP.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-KYDYQMNW.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-NIBP3I7A.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-NO6Y6FB2.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-QE5UFCCO.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-RM6MHL6A.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-RPRW26NG.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-SNUK7H5J.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-T7ZMQI4J.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-UB3V5WUI.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-UFKNF23C.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-V3KLX7U7.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-VD3LKZFX.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-W2VMLL5S.js +0 -32
- package/dist/cli-bundle/chunks/chunk-W2VMLL5S.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-WTRUDJ3R.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-Z55WX4IQ.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-Z5BM2FKQ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-ZEATCVAC.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-ZFIEEDTJ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-ZIE6WXJ2.js.map +0 -1
- package/dist/cli-bundle/chunks/close-37KEHLYM.js +0 -14
- package/dist/cli-bundle/chunks/close-many-BFMP6HHK.js.map +0 -7
- package/dist/cli-bundle/chunks/close-many-CXJBOWWY.js.map +0 -1
- package/dist/cli-bundle/chunks/config-FIXJZEQK.js +0 -1541
- package/dist/cli-bundle/chunks/config-FIXJZEQK.js.map +0 -7
- package/dist/cli-bundle/chunks/config-X3ZVCUUG.js +0 -1531
- package/dist/cli-bundle/chunks/config-X3ZVCUUG.js.map +0 -1
- package/dist/cli-bundle/chunks/contracts-KP4QAGVW.js.map +0 -1
- package/dist/cli-bundle/chunks/contracts-SMOAN5NF.js.map +0 -7
- package/dist/cli-bundle/chunks/create-DFMNBKBS.js +0 -28
- package/dist/cli-bundle/chunks/get-AWK324RS.js.map +0 -7
- package/dist/cli-bundle/chunks/get-VYPIICPC.js.map +0 -1
- package/dist/cli-bundle/chunks/health-FBCVZGSX.js.map +0 -7
- package/dist/cli-bundle/chunks/health-Q66C43GN.js.map +0 -1
- package/dist/cli-bundle/chunks/history-5XUSLAJA.js +0 -18
- package/dist/cli-bundle/chunks/history-compact-2GHT32UX.js.map +0 -1
- package/dist/cli-bundle/chunks/history-compact-WLCQEKXS.js.map +0 -7
- package/dist/cli-bundle/chunks/history-redact-BVHWDXPR.js +0 -19
- package/dist/cli-bundle/chunks/history-repair-FY75IC26.js.map +0 -1
- package/dist/cli-bundle/chunks/history-repair-GABSDSVD.js.map +0 -7
- package/dist/cli-bundle/chunks/init-TRYJELH4.js +0 -21
- package/dist/cli-bundle/chunks/next-66BJB4N2.js.map +0 -7
- package/dist/cli-bundle/chunks/next-N5MWJTBY.js.map +0 -1
- package/dist/cli-bundle/chunks/plan-DQ7G4EDC.js.map +0 -7
- package/dist/cli-bundle/chunks/plan-ZHKZ7JVF.js.map +0 -1
- package/dist/cli-bundle/chunks/register-list-query-KY6Z6WV7.js.map +0 -7
- package/dist/cli-bundle/chunks/register-list-query-Y2VRHPCL.js.map +0 -1
- package/dist/cli-bundle/chunks/register-mutation-N6AYSKPM.js.map +0 -7
- package/dist/cli-bundle/chunks/register-mutation-PCARIGZS.js.map +0 -1
- package/dist/cli-bundle/chunks/register-operations-L6CYTOIH.js.map +0 -7
- package/dist/cli-bundle/chunks/register-operations-YAT6FUUB.js.map +0 -1
- package/dist/cli-bundle/chunks/register-setup-MPANILQF.js.map +0 -7
- package/dist/cli-bundle/chunks/register-setup-N7UGXYJC.js.map +0 -1
- package/dist/cli-bundle/chunks/restore-IRAKSWIW.js +0 -17
- package/dist/cli-bundle/chunks/telemetry-DIFPXCAT.js.map +0 -7
- package/dist/cli-bundle/chunks/telemetry-WTYFUPRL.js.map +0 -1
- package/dist/cli-bundle/chunks/test-all-PZTBLLQ6.js +0 -360
- package/dist/cli-bundle/chunks/test-all-PZTBLLQ6.js.map +0 -7
- package/dist/cli-bundle/chunks/test-all-XLPI4USF.js +0 -357
- package/dist/cli-bundle/chunks/test-all-XLPI4USF.js.map +0 -1
- package/dist/cli-bundle/chunks/test-runs-CA6K32RD.js.map +0 -1
- package/dist/cli-bundle/chunks/test-runs-LANLLPVO.js.map +0 -7
- package/dist/cli-bundle/chunks/update-UXDLTEOZ.js +0 -24
- package/dist/cli-bundle/chunks/validate-2G566PKQ.js.map +0 -7
- package/dist/cli-bundle/chunks/validate-BDPVXHHH.js.map +0 -1
- /package/dist/cli-bundle/chunks/{activity-MVSEND6D.js.map → activity-CUC4JY3U.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{activity-EJBMXUBH.js.map → activity-WEIEMM73.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-KDHT4GHI.js.map → append-H32VOR2Y.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-LEDBAM3K.js.map → append-UBM632FK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-SJZTPVFT.js.map → chunk-2ASNV4DH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JVQ7UOYC.js.map → chunk-2CHRYUXL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-DRPF274X.js.map → chunk-3LCUASYG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JJ4SG243.js.map → chunk-3Q2HBMTI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-TQ6E76BE.js.map → chunk-55XRYWEG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-IBU2LLWM.js.map → chunk-A6VOGKBA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-MLHX6DN5.js.map → chunk-AIAIXG7I.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-5ABGFWR4.js.map → chunk-BTX5MIQF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-3JWQCLR5.js.map → chunk-CYBDUHNO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-WFJZDUM7.js.map → chunk-CZPVDLD2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-HUYYMTGW.js.map → chunk-EUKTMRN3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-EVWYAG46.js.map → chunk-FFOQHGNH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-IF4ERU6A.js.map → chunk-GFMSLORL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-IDYCAK35.js.map → chunk-H4GRLYJS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-VMY7MZEM.js.map → chunk-HQTPRV4D.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-7L6TXOOC.js.map → chunk-JMK5GCK2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-KRASIL6M.js.map → chunk-K2VYLVX4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4YIMPANT.js.map → chunk-KCO2EAN5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-D6USKAMA.js.map → chunk-KLXF7NCC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-OB3RJV5F.js.map → chunk-LRKMWUUV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-74PUWBGN.js.map → chunk-LTRAF2D7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4TXTVZL3.js.map → chunk-MRD4T5LF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-E2Q2ULMR.js.map → chunk-N2JSWVWG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-7RIJGN4R.js.map → chunk-QH3FSKRJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-OUQ5JEFM.js.map → chunk-S62UANU7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-DLDCPF5X.js.map → chunk-U2BEEM2X.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-73PTKMAE.js.map → chunk-UT73HUPC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-F7G53BOA.js.map → chunk-UTSH5GWX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JIP67N2K.js.map → chunk-Y4NRKBFW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-FBZ5XAAF.js.map → chunk-YPKFV2JR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-BN3CWK6G.js.map → chunk-ZNHEYCDD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-YEDFE4DC.js.map → chunk-ZNT7KEWE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-HMCLSLUE.js.map → claim-SENTPZBN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-6NINZYB3.js.map → claim-Z7MEQCBT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-OP3LK7Z2.js.map → close-424MX4CU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-37KEHLYM.js.map → close-YCWQQPDS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-ETHABIY6.js.map → comments-4FGNTSNV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-MU2WMBUY.js.map → comments-7YS5MY5X.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{context-7ZEZV3BV.js.map → context-LHVKJSPJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{context-XDI4DKKT.js.map → context-ZQY54JNS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-JJ3KOQW2.js.map → copy-GYNQQPW2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-CWM6SBY6.js.map → copy-TLW7JTQT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-J5Q2ELZT.js.map → create-VSKYSOCD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-DFMNBKBS.js.map → create-XTMAPS7I.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-2GZLQEUQ.js.map → delete-4W5JYCEG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-OOQS4KVD.js.map → delete-ANTOTI2I.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-IF4IGL4R.js.map → deps-HPPE6MJN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-ZVGGCRR6.js.map → deps-ZQZN54EZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-NFTBCQQC.js.map → docs-RPOVFMP3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-2TIFR62T.js.map → docs-XJNYBJGE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{eval-2F6EH4XN.js.map → eval-DM6JBZTS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{eval-PFKXQR3B.js.map → eval-RFBI5FGS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-GMVOIP4O.js.map → extension-B3YY4WY5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-3LRYX7SW.js.map → extension-TTSEFQTS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{files-DF3HO6XK.js.map → files-5D65CHGE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{files-T5ODMETM.js.map → files-GPIG77EN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{focus-MY5ARIEK.js.map → focus-C3PEJV2C.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{focus-DLXKK4AH.js.map → focus-ZHN7WIGX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{gc-MDGRR2SU.js.map → gc-D4JQ6OWN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{gc-FULIVYR4.js.map → gc-VZIXDL32.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-5XUSLAJA.js.map → history-DD7L7BNL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-X4OSES6K.js.map → history-IL7XCEX2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-BVHWDXPR.js.map → history-redact-IX4YEWMY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-45YW65BK.js.map → history-redact-VYCWQFK7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-KO7CGIRQ.js.map → init-F27NHENZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-TRYJELH4.js.map → init-HHVQQP6C.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-LHZT5BHW.js.map → learnings-HJVDQIGY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-3F7YLI45.js.map → learnings-XSFSUUWK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-Y6AU5BJS.js.map → list-HPMEKCAA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-ROT7JF62.js.map → list-VMPWTURB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-FW6YFLND.js.map → notes-GDZIKGR6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-EVJZ3VAB.js.map → notes-WDDBPC4D.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{profile-CHAW6SEA.js.map → profile-CCOKZ2IQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{profile-UPZGCDOG.js.map → profile-HUCENIEQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-DKMCLPI5.js.map → restore-4CBWUMCX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-IRAKSWIW.js.map → restore-5UEAGG3W.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{scheduling-shortcuts-3F4QUEDH.js.map → scheduling-shortcuts-6VFKNKCM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{scheduling-shortcuts-BNZLQK36.js.map → scheduling-shortcuts-ERHCVTEM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-OLT6LVKH.js.map → schema-TDGK6N3I.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-XJXKJQF5.js.map → schema-UE5KKAUX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{search-KP6H7COV.js.map → search-FP7MEU4S.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{search-CX5UMV4H.js.map → search-K4CFLQ5S.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{stats-QZUG6MX5.js.map → stats-NJJCALEZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{stats-7XW4OEMK.js.map → stats-XT6QRKQY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-QNDXZQCW.js.map → test-UFSJ5YIO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-HU2BS7EY.js.map → test-YCDAUBWF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-UXDLTEOZ.js.map → update-MTCFES6X.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-DJKWLBWJ.js.map → update-Y5WQVT5O.js.map} +0 -0
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
|
|
2
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="89ae7463-1314-574c-9158-0967e6d9c589")}catch(e){}}();
|
|
3
3
|
import {
|
|
4
4
|
compareTimestampStrings,
|
|
5
5
|
isTimestampLiteral
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-K2VYLVX4.js";
|
|
7
7
|
import {
|
|
8
8
|
CONFIDENCE_TEXT_VALUES,
|
|
9
9
|
EXIT_CODE,
|
|
10
10
|
FRONT_MATTER_KEY_ORDER,
|
|
11
11
|
ISSUE_SEVERITY_VALUES,
|
|
12
|
+
PLAN_STEP_STATUS_VALUES,
|
|
12
13
|
PmCliError,
|
|
13
14
|
RECURRENCE_FREQUENCY_VALUES,
|
|
14
15
|
RECURRENCE_WEEKDAY_VALUES,
|
|
@@ -19,7 +20,7 @@ import {
|
|
|
19
20
|
resolveRuntimeStatusRegistry,
|
|
20
21
|
runtimeFieldOptionTarget,
|
|
21
22
|
weekdayOrderIndex
|
|
22
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-I66WE2HE.js";
|
|
23
24
|
|
|
24
25
|
// dist/core/schema/runtime-field-values.js
|
|
25
26
|
function toCamelToken(value) {
|
|
@@ -304,6 +305,8 @@ function decodeToonItemContent(content) {
|
|
|
304
305
|
|
|
305
306
|
// dist/core/item/item-format.js
|
|
306
307
|
var LINKED_TEST_PM_CONTEXT_MODE_VALUES = /* @__PURE__ */ new Set(["schema", "tracker", "auto"]);
|
|
308
|
+
var ITEM_TEST_RUN_STATUS_VALUES = /* @__PURE__ */ new Set(["passed", "failed", "stopped", "canceled"]);
|
|
309
|
+
var PLAN_STEP_STATUS_SET = new Set(PLAN_STEP_STATUS_VALUES);
|
|
307
310
|
function normalizePathValue(value) {
|
|
308
311
|
return value.replaceAll("\\", "/");
|
|
309
312
|
}
|
|
@@ -315,6 +318,13 @@ function firstNonZeroComparison(comparisons) {
|
|
|
315
318
|
}
|
|
316
319
|
return 0;
|
|
317
320
|
}
|
|
321
|
+
function deleteUndefinedFields(record) {
|
|
322
|
+
for (const [key, value] of Object.entries(record)) {
|
|
323
|
+
if (value === void 0) {
|
|
324
|
+
delete record[key];
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
}
|
|
318
328
|
var REQUIRED_STRING_FIELDS = [
|
|
319
329
|
"id",
|
|
320
330
|
"title",
|
|
@@ -368,47 +378,65 @@ function assertTimestampField(record, fieldName) {
|
|
|
368
378
|
const timestamp = rawValue;
|
|
369
379
|
assertFrontMatterCondition(isTimestampLiteral(timestamp), `${fieldName} must be a valid ISO timestamp`);
|
|
370
380
|
}
|
|
381
|
+
function assertPositiveIntegerField(record, fieldName, messagePrefix) {
|
|
382
|
+
const value = record[fieldName];
|
|
383
|
+
if (value === void 0) {
|
|
384
|
+
return;
|
|
385
|
+
}
|
|
386
|
+
assertFrontMatterCondition(typeof value === "number" && Number.isInteger(value) && value >= 1, `${messagePrefix} must be an integer >= 1`);
|
|
387
|
+
}
|
|
388
|
+
function assertOptionalTimestampString(record, fieldName, messagePrefix) {
|
|
389
|
+
const value = record[fieldName];
|
|
390
|
+
if (value === void 0) {
|
|
391
|
+
return;
|
|
392
|
+
}
|
|
393
|
+
assertFrontMatterCondition(typeof value === "string", `${messagePrefix} must be a string`);
|
|
394
|
+
assertFrontMatterCondition(isTimestampLiteral(value), `${messagePrefix} must be a valid ISO timestamp`);
|
|
395
|
+
}
|
|
396
|
+
function assertRecurrenceWeekdays(value) {
|
|
397
|
+
if (value === void 0) {
|
|
398
|
+
return;
|
|
399
|
+
}
|
|
400
|
+
assertFrontMatterCondition(Array.isArray(value), "event.recurrence.by_weekday must be an array");
|
|
401
|
+
for (const weekday of value) {
|
|
402
|
+
assertFrontMatterCondition(typeof weekday === "string", "event.recurrence.by_weekday entries must be strings");
|
|
403
|
+
const normalizedWeekday = weekday.trim().toLowerCase();
|
|
404
|
+
assertFrontMatterCondition(RECURRENCE_WEEKDAY_VALUES.includes(normalizedWeekday), `event.recurrence.by_weekday entries must be one of: ${RECURRENCE_WEEKDAY_VALUES.join(", ")}`);
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
function assertRecurrenceMonthDays(value) {
|
|
408
|
+
if (value === void 0) {
|
|
409
|
+
return;
|
|
410
|
+
}
|
|
411
|
+
assertFrontMatterCondition(Array.isArray(value), "event.recurrence.by_month_day must be an array");
|
|
412
|
+
for (const day of value) {
|
|
413
|
+
assertFrontMatterCondition(typeof day === "number" && Number.isInteger(day) && day >= 1 && day <= 31, "event.recurrence.by_month_day entries must be integers 1..31");
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
function assertRecurrenceExdates(value) {
|
|
417
|
+
if (value === void 0) {
|
|
418
|
+
return;
|
|
419
|
+
}
|
|
420
|
+
assertFrontMatterCondition(Array.isArray(value), "event.recurrence.exdates must be an array");
|
|
421
|
+
for (const exdate of value) {
|
|
422
|
+
assertFrontMatterCondition(typeof exdate === "string", "event.recurrence.exdates entries must be strings");
|
|
423
|
+
assertFrontMatterCondition(isTimestampLiteral(exdate), "event.recurrence.exdates entries must be valid ISO timestamps");
|
|
424
|
+
}
|
|
425
|
+
}
|
|
371
426
|
function assertValidRecurrenceRule(recurrence) {
|
|
372
427
|
assertFrontMatterCondition(typeof recurrence === "object" && recurrence !== null && !Array.isArray(recurrence), "event.recurrence must be an object");
|
|
373
428
|
const recurrenceRecord = recurrence;
|
|
374
429
|
assertFrontMatterCondition(typeof recurrenceRecord.freq === "string", "event.recurrence.freq must be a string");
|
|
375
430
|
const frequency = recurrenceRecord.freq.trim().toLowerCase();
|
|
376
431
|
assertFrontMatterCondition(RECURRENCE_FREQUENCY_VALUES.includes(frequency), `event.recurrence.freq must be one of: ${RECURRENCE_FREQUENCY_VALUES.join(", ")}`);
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
assertFrontMatterCondition(isTimestampLiteral(recurrenceRecord.until), "event.recurrence.until must be a valid ISO timestamp");
|
|
386
|
-
}
|
|
387
|
-
if (recurrenceRecord.by_weekday !== void 0) {
|
|
388
|
-
assertFrontMatterCondition(Array.isArray(recurrenceRecord.by_weekday), "event.recurrence.by_weekday must be an array");
|
|
389
|
-
for (const weekday of recurrenceRecord.by_weekday) {
|
|
390
|
-
assertFrontMatterCondition(typeof weekday === "string", "event.recurrence.by_weekday entries must be strings");
|
|
391
|
-
const normalizedWeekday = weekday.trim().toLowerCase();
|
|
392
|
-
assertFrontMatterCondition(RECURRENCE_WEEKDAY_VALUES.includes(normalizedWeekday), `event.recurrence.by_weekday entries must be one of: ${RECURRENCE_WEEKDAY_VALUES.join(", ")}`);
|
|
393
|
-
}
|
|
394
|
-
}
|
|
395
|
-
if (recurrenceRecord.by_month_day !== void 0) {
|
|
396
|
-
assertFrontMatterCondition(Array.isArray(recurrenceRecord.by_month_day), "event.recurrence.by_month_day must be an array");
|
|
397
|
-
for (const day of recurrenceRecord.by_month_day) {
|
|
398
|
-
assertFrontMatterCondition(typeof day === "number" && Number.isInteger(day) && day >= 1 && day <= 31, "event.recurrence.by_month_day entries must be integers 1..31");
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
if (recurrenceRecord.exdates !== void 0) {
|
|
402
|
-
assertFrontMatterCondition(Array.isArray(recurrenceRecord.exdates), "event.recurrence.exdates must be an array");
|
|
403
|
-
for (const exdate of recurrenceRecord.exdates) {
|
|
404
|
-
assertFrontMatterCondition(typeof exdate === "string", "event.recurrence.exdates entries must be strings");
|
|
405
|
-
assertFrontMatterCondition(isTimestampLiteral(exdate), "event.recurrence.exdates entries must be valid ISO timestamps");
|
|
406
|
-
}
|
|
407
|
-
}
|
|
408
|
-
}
|
|
409
|
-
function assertValidFrontMatter(frontMatter, runtimeContext) {
|
|
410
|
-
assertFrontMatterCondition(typeof frontMatter === "object" && frontMatter !== null && !Array.isArray(frontMatter), "front matter must be an object");
|
|
411
|
-
const record = frontMatter;
|
|
432
|
+
assertPositiveIntegerField(recurrenceRecord, "interval", "event.recurrence.interval");
|
|
433
|
+
assertPositiveIntegerField(recurrenceRecord, "count", "event.recurrence.count");
|
|
434
|
+
assertOptionalTimestampString(recurrenceRecord, "until", "event.recurrence.until");
|
|
435
|
+
assertRecurrenceWeekdays(recurrenceRecord.by_weekday);
|
|
436
|
+
assertRecurrenceMonthDays(recurrenceRecord.by_month_day);
|
|
437
|
+
assertRecurrenceExdates(recurrenceRecord.exdates);
|
|
438
|
+
}
|
|
439
|
+
function assertRequiredFrontMatterFields(record) {
|
|
412
440
|
for (const fieldName of REQUIRED_STRING_FIELDS) {
|
|
413
441
|
assertFrontMatterCondition(typeof record[fieldName] === "string", `${fieldName} is required and must be a string`);
|
|
414
442
|
}
|
|
@@ -418,12 +446,17 @@ function assertValidFrontMatter(frontMatter, runtimeContext) {
|
|
|
418
446
|
if (formatVersion !== void 0) {
|
|
419
447
|
assertFrontMatterCondition(typeof formatVersion === "number" && Number.isInteger(formatVersion) && formatVersion >= BASELINE_ITEM_FORMAT_VERSION, `pm_format_version must be an integer >= ${BASELINE_ITEM_FORMAT_VERSION}`);
|
|
420
448
|
}
|
|
449
|
+
return itemType;
|
|
450
|
+
}
|
|
451
|
+
function assertStatusFrontMatterField(record, runtimeContext) {
|
|
421
452
|
const status = record.status;
|
|
422
453
|
assertFrontMatterCondition(typeof status === "string" && status.trim().length > 0, "status must be a non-empty string");
|
|
423
454
|
const statusRegistry = runtimeContext?.statusRegistry;
|
|
424
455
|
const normalizedStatus = normalizeStatusInput(status, statusRegistry);
|
|
425
456
|
const statusDomain = statusRegistry ? statusRegistry.definitions.map((definition) => definition.id) : [...STATUS_VALUES];
|
|
426
457
|
assertFrontMatterCondition(normalizedStatus !== void 0, `status must be one of: ${statusDomain.join(", ")}`);
|
|
458
|
+
}
|
|
459
|
+
function assertPriorityAndTags(record) {
|
|
427
460
|
const priority = record.priority;
|
|
428
461
|
assertFrontMatterCondition(typeof priority === "number" && Number.isInteger(priority) && [0, 1, 2, 3, 4].includes(priority), "priority must be an integer 0..4");
|
|
429
462
|
const tags = record.tags;
|
|
@@ -431,129 +464,176 @@ function assertValidFrontMatter(frontMatter, runtimeContext) {
|
|
|
431
464
|
for (const tag of tags) {
|
|
432
465
|
assertFrontMatterCondition(typeof tag === "string", "tags entries must be strings");
|
|
433
466
|
}
|
|
467
|
+
}
|
|
468
|
+
function assertConfidenceFrontMatterField(record) {
|
|
434
469
|
const confidence = record.confidence;
|
|
435
|
-
if (confidence
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
assertFrontMatterCondition(isKnownTextConfidence, `confidence string value must be one of: ${[...CONFIDENCE_TEXT_VALUES, "med"].join(", ")}`);
|
|
442
|
-
} else {
|
|
443
|
-
assertFrontMatterCondition(false, "confidence must be a number or string");
|
|
444
|
-
}
|
|
470
|
+
if (confidence === void 0) {
|
|
471
|
+
return;
|
|
472
|
+
}
|
|
473
|
+
if (typeof confidence === "number") {
|
|
474
|
+
assertFrontMatterCondition(Number.isInteger(confidence) && confidence >= 0 && confidence <= 100, "confidence number value must be an integer 0..100");
|
|
475
|
+
return;
|
|
445
476
|
}
|
|
477
|
+
if (typeof confidence === "string") {
|
|
478
|
+
const normalizedConfidence = confidence.trim().toLowerCase();
|
|
479
|
+
const isKnownTextConfidence = normalizedConfidence === "med" || CONFIDENCE_TEXT_VALUES.includes(normalizedConfidence);
|
|
480
|
+
assertFrontMatterCondition(isKnownTextConfidence, `confidence string value must be one of: ${[...CONFIDENCE_TEXT_VALUES, "med"].join(", ")}`);
|
|
481
|
+
return;
|
|
482
|
+
}
|
|
483
|
+
assertFrontMatterCondition(false, "confidence must be a number or string");
|
|
484
|
+
}
|
|
485
|
+
function assertSeverityFrontMatterField(record) {
|
|
446
486
|
const severity = record.severity;
|
|
447
|
-
if (severity
|
|
448
|
-
|
|
449
|
-
validationError("severity must be a string");
|
|
450
|
-
}
|
|
451
|
-
const normalizedSeverity = severity.trim().toLowerCase();
|
|
452
|
-
const isKnownSeverity = normalizedSeverity === "med" || ISSUE_SEVERITY_VALUES.includes(normalizedSeverity);
|
|
453
|
-
assertFrontMatterCondition(isKnownSeverity, `severity value must be one of: ${[...ISSUE_SEVERITY_VALUES, "med"].join(", ")}`);
|
|
454
|
-
}
|
|
455
|
-
const regression = record.regression;
|
|
456
|
-
if (regression !== void 0) {
|
|
457
|
-
if (typeof regression !== "boolean") {
|
|
458
|
-
validationError("regression must be a boolean");
|
|
459
|
-
}
|
|
487
|
+
if (severity === void 0) {
|
|
488
|
+
return;
|
|
460
489
|
}
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
if (record.deadline !== void 0) {
|
|
464
|
-
assertTimestampField(record, "deadline");
|
|
490
|
+
if (typeof severity !== "string") {
|
|
491
|
+
validationError("severity must be a string");
|
|
465
492
|
}
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
assertFrontMatterCondition(isTimestampLiteral(reminderRecord.at), "reminder.at must be a valid ISO timestamp");
|
|
474
|
-
assertFrontMatterCondition(typeof reminderRecord.text === "string", "reminder.text must be a string");
|
|
475
|
-
assertFrontMatterCondition(reminderRecord.text.trim().length > 0, "reminder.text must not be empty");
|
|
476
|
-
}
|
|
493
|
+
const normalizedSeverity = severity.trim().toLowerCase();
|
|
494
|
+
const isKnownSeverity = normalizedSeverity === "med" || ISSUE_SEVERITY_VALUES.includes(normalizedSeverity);
|
|
495
|
+
assertFrontMatterCondition(isKnownSeverity, `severity value must be one of: ${[...ISSUE_SEVERITY_VALUES, "med"].join(", ")}`);
|
|
496
|
+
}
|
|
497
|
+
function assertRegressionFrontMatterField(record) {
|
|
498
|
+
if (record.regression !== void 0 && typeof record.regression !== "boolean") {
|
|
499
|
+
validationError("regression must be a boolean");
|
|
477
500
|
}
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
}
|
|
500
|
-
if (eventRecord.recurrence !== void 0) {
|
|
501
|
-
assertValidRecurrenceRule(eventRecord.recurrence);
|
|
502
|
-
if (eventRecord.recurrence.until !== void 0) {
|
|
503
|
-
assertFrontMatterCondition(compareTimestampStrings(eventRecord.recurrence.until, eventRecord.start_at) >= 0, "event.recurrence.until must be at or after event.start_at");
|
|
504
|
-
}
|
|
505
|
-
}
|
|
501
|
+
}
|
|
502
|
+
function assertReminderEntries(record) {
|
|
503
|
+
const reminders = record.reminders;
|
|
504
|
+
if (reminders === void 0) {
|
|
505
|
+
return;
|
|
506
|
+
}
|
|
507
|
+
assertFrontMatterCondition(Array.isArray(reminders), "reminders must be an array");
|
|
508
|
+
for (const reminder of reminders) {
|
|
509
|
+
assertFrontMatterCondition(typeof reminder === "object" && reminder !== null && !Array.isArray(reminder), "reminders entries must be objects");
|
|
510
|
+
const reminderRecord = reminder;
|
|
511
|
+
assertFrontMatterCondition(typeof reminderRecord.at === "string", "reminder.at must be a string");
|
|
512
|
+
assertFrontMatterCondition(isTimestampLiteral(reminderRecord.at), "reminder.at must be a valid ISO timestamp");
|
|
513
|
+
assertFrontMatterCondition(typeof reminderRecord.text === "string", "reminder.text must be a string");
|
|
514
|
+
assertFrontMatterCondition(reminderRecord.text.trim().length > 0, "reminder.text must not be empty");
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
function assertEventStringFields(eventRecord) {
|
|
518
|
+
for (const stringField of ["title", "description", "location", "timezone"]) {
|
|
519
|
+
if (eventRecord[stringField] !== void 0) {
|
|
520
|
+
assertFrontMatterCondition(typeof eventRecord[stringField] === "string", `event.${stringField} must be a string`);
|
|
521
|
+
assertFrontMatterCondition(eventRecord[stringField].trim().length > 0, `event.${stringField} must not be empty`);
|
|
506
522
|
}
|
|
507
523
|
}
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
524
|
+
}
|
|
525
|
+
function assertEventRecurrence(eventRecord) {
|
|
526
|
+
if (eventRecord.recurrence === void 0) {
|
|
527
|
+
return;
|
|
528
|
+
}
|
|
529
|
+
assertValidRecurrenceRule(eventRecord.recurrence);
|
|
530
|
+
if (eventRecord.recurrence.until !== void 0) {
|
|
531
|
+
assertFrontMatterCondition(compareTimestampStrings(eventRecord.recurrence.until, eventRecord.start_at) >= 0, "event.recurrence.until must be at or after event.start_at");
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
function assertCalendarEventEntry(event) {
|
|
535
|
+
assertFrontMatterCondition(typeof event === "object" && event !== null && !Array.isArray(event), "events entries must be objects");
|
|
536
|
+
const eventRecord = event;
|
|
537
|
+
assertFrontMatterCondition(typeof eventRecord.start_at === "string", "event.start_at must be a string");
|
|
538
|
+
assertFrontMatterCondition(isTimestampLiteral(eventRecord.start_at), "event.start_at must be a valid ISO timestamp");
|
|
539
|
+
if (eventRecord.end_at !== void 0) {
|
|
540
|
+
assertFrontMatterCondition(typeof eventRecord.end_at === "string", "event.end_at must be a string");
|
|
541
|
+
assertFrontMatterCondition(isTimestampLiteral(eventRecord.end_at), "event.end_at must be a valid ISO timestamp");
|
|
542
|
+
assertFrontMatterCondition(compareTimestampStrings(eventRecord.end_at, eventRecord.start_at) > 0, "event.end_at must be after event.start_at");
|
|
543
|
+
}
|
|
544
|
+
assertEventStringFields(eventRecord);
|
|
545
|
+
if (eventRecord.all_day !== void 0) {
|
|
546
|
+
assertFrontMatterCondition(typeof eventRecord.all_day === "boolean", "event.all_day must be a boolean");
|
|
547
|
+
}
|
|
548
|
+
assertEventRecurrence(eventRecord);
|
|
549
|
+
}
|
|
550
|
+
function assertCalendarEvents(record) {
|
|
551
|
+
const events = record.events;
|
|
552
|
+
if (events === void 0) {
|
|
553
|
+
return;
|
|
512
554
|
}
|
|
555
|
+
assertFrontMatterCondition(Array.isArray(events), "events must be an array");
|
|
556
|
+
for (const event of events) {
|
|
557
|
+
assertCalendarEventEntry(event);
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
function assertOptionalStringFields(record) {
|
|
513
561
|
for (const fieldName of ["source_type", "source_owner", "design", "external_ref"]) {
|
|
514
562
|
const value = record[fieldName];
|
|
515
563
|
if (value !== void 0) {
|
|
516
564
|
assertFrontMatterCondition(typeof value === "string", `${fieldName} must be a string`);
|
|
517
565
|
}
|
|
518
566
|
}
|
|
567
|
+
}
|
|
568
|
+
function assertTypeOptionsField(record) {
|
|
519
569
|
const typeOptions = record.type_options;
|
|
520
|
-
if (typeOptions
|
|
521
|
-
|
|
522
|
-
for (const [optionKey, optionValue] of Object.entries(typeOptions)) {
|
|
523
|
-
assertFrontMatterCondition(optionKey.trim().length > 0, "type_options keys must be non-empty");
|
|
524
|
-
assertFrontMatterCondition(typeof optionValue === "string", "type_options values must be strings");
|
|
525
|
-
const optionText = optionValue;
|
|
526
|
-
assertFrontMatterCondition(optionText.trim().length > 0, "type_options values must be non-empty strings");
|
|
527
|
-
}
|
|
570
|
+
if (typeOptions === void 0) {
|
|
571
|
+
return;
|
|
528
572
|
}
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
}
|
|
536
|
-
continue;
|
|
537
|
-
}
|
|
538
|
-
try {
|
|
539
|
-
record[definition.metadata_key] = coerceRuntimeFieldValue(definition, fieldValue, `metadata field "${definition.metadata_key}"`);
|
|
540
|
-
} catch (error) {
|
|
541
|
-
validationError(String(error?.message).replace(/^Invalid\s+/u, ""));
|
|
542
|
-
}
|
|
543
|
-
}
|
|
573
|
+
assertFrontMatterCondition(typeof typeOptions === "object" && typeOptions !== null && !Array.isArray(typeOptions), "type_options must be an object");
|
|
574
|
+
for (const [optionKey, optionValue] of Object.entries(typeOptions)) {
|
|
575
|
+
assertFrontMatterCondition(optionKey.trim().length > 0, "type_options keys must be non-empty");
|
|
576
|
+
assertFrontMatterCondition(typeof optionValue === "string", "type_options values must be strings");
|
|
577
|
+
const optionText = optionValue;
|
|
578
|
+
assertFrontMatterCondition(optionText.trim().length > 0, "type_options values must be non-empty strings");
|
|
544
579
|
}
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
580
|
+
}
|
|
581
|
+
function coerceRuntimeFrontMatterFields(record, itemType, runtimeContext) {
|
|
582
|
+
if (!runtimeContext?.fieldRegistry) {
|
|
583
|
+
return;
|
|
584
|
+
}
|
|
585
|
+
for (const definition of runtimeContext.fieldRegistry.definitions) {
|
|
586
|
+
const fieldValue = record[definition.metadata_key];
|
|
587
|
+
if (fieldValue === void 0) {
|
|
588
|
+
if (runtimeFieldRequiredForType(definition, itemType)) {
|
|
589
|
+
validationError(`missing required schema field: ${definition.metadata_key}`);
|
|
553
590
|
}
|
|
591
|
+
continue;
|
|
592
|
+
}
|
|
593
|
+
try {
|
|
594
|
+
record[definition.metadata_key] = coerceRuntimeFieldValue(definition, fieldValue, `metadata field "${definition.metadata_key}"`);
|
|
595
|
+
} catch (error) {
|
|
596
|
+
validationError(String(error?.message).replace(/^Invalid\s+/u, ""));
|
|
554
597
|
}
|
|
555
598
|
}
|
|
556
599
|
}
|
|
600
|
+
function assertRuntimeUnknownFrontMatterFields(record, runtimeContext) {
|
|
601
|
+
if (!runtimeContext || runtimeContext.unknownFieldPolicy === "allow") {
|
|
602
|
+
return;
|
|
603
|
+
}
|
|
604
|
+
const knownKeys = buildKnownFrontMatterKeys(runtimeContext);
|
|
605
|
+
const unknownKeys = Object.keys(record).filter((key) => !knownKeys.has(key)).sort((left, right) => left.localeCompare(right));
|
|
606
|
+
if (unknownKeys.length === 0) {
|
|
607
|
+
return;
|
|
608
|
+
}
|
|
609
|
+
if (runtimeContext.unknownFieldPolicy === "reject") {
|
|
610
|
+
validationError(`unknown schema fields are not allowed: ${unknownKeys.join(", ")}`);
|
|
611
|
+
} else {
|
|
612
|
+
runtimeContext.onWarning?.(`item_unknown_schema_fields:${unknownKeys.join(",")}`);
|
|
613
|
+
}
|
|
614
|
+
}
|
|
615
|
+
function assertValidFrontMatter(frontMatter, runtimeContext) {
|
|
616
|
+
assertFrontMatterCondition(typeof frontMatter === "object" && frontMatter !== null && !Array.isArray(frontMatter), "front matter must be an object");
|
|
617
|
+
const record = frontMatter;
|
|
618
|
+
const itemType = assertRequiredFrontMatterFields(record);
|
|
619
|
+
assertStatusFrontMatterField(record, runtimeContext);
|
|
620
|
+
assertPriorityAndTags(record);
|
|
621
|
+
assertConfidenceFrontMatterField(record);
|
|
622
|
+
assertSeverityFrontMatterField(record);
|
|
623
|
+
assertRegressionFrontMatterField(record);
|
|
624
|
+
assertTimestampField(record, "created_at");
|
|
625
|
+
assertTimestampField(record, "updated_at");
|
|
626
|
+
if (record.deadline !== void 0) {
|
|
627
|
+
assertTimestampField(record, "deadline");
|
|
628
|
+
}
|
|
629
|
+
assertReminderEntries(record);
|
|
630
|
+
assertCalendarEvents(record);
|
|
631
|
+
assertOptionalTimestampString(record, "closed_at", "closed_at");
|
|
632
|
+
assertOptionalStringFields(record);
|
|
633
|
+
assertTypeOptionsField(record);
|
|
634
|
+
coerceRuntimeFrontMatterFields(record, itemType, runtimeContext);
|
|
635
|
+
assertRuntimeUnknownFrontMatterFields(record, runtimeContext);
|
|
636
|
+
}
|
|
557
637
|
function sortDependencies(values) {
|
|
558
638
|
if (!values || values.length === 0)
|
|
559
639
|
return void 0;
|
|
@@ -631,52 +711,38 @@ function normalizeRecurrenceRule(value) {
|
|
|
631
711
|
return normalized;
|
|
632
712
|
}
|
|
633
713
|
function sortEvents(values) {
|
|
634
|
-
if (!values || values.length === 0) {
|
|
714
|
+
if (!Array.isArray(values) || values.length === 0) {
|
|
635
715
|
return void 0;
|
|
636
716
|
}
|
|
637
|
-
const normalized = [...values].map((
|
|
638
|
-
const event = {
|
|
639
|
-
start_at: value.start_at,
|
|
640
|
-
end_at: value.end_at || void 0,
|
|
641
|
-
title: value.title?.trim() || void 0,
|
|
642
|
-
description: value.description?.trim() || void 0,
|
|
643
|
-
location: value.location?.trim() || void 0,
|
|
644
|
-
all_day: value.all_day,
|
|
645
|
-
timezone: value.timezone?.trim() || void 0,
|
|
646
|
-
recurrence: normalizeRecurrenceRule(value.recurrence)
|
|
647
|
-
};
|
|
648
|
-
for (const [key, fieldValue] of Object.entries(event)) {
|
|
649
|
-
if (fieldValue === void 0) {
|
|
650
|
-
delete event[key];
|
|
651
|
-
}
|
|
652
|
-
}
|
|
653
|
-
return event;
|
|
654
|
-
}).sort((a, b) => {
|
|
655
|
-
const byStart = compareTimestampStrings(a.start_at, b.start_at);
|
|
656
|
-
if (byStart !== 0)
|
|
657
|
-
return byStart;
|
|
658
|
-
const byEnd = (a.end_at ?? "").localeCompare(b.end_at ?? "");
|
|
659
|
-
if (byEnd !== 0)
|
|
660
|
-
return byEnd;
|
|
661
|
-
const byTitle = (a.title ?? "").localeCompare(b.title ?? "");
|
|
662
|
-
if (byTitle !== 0)
|
|
663
|
-
return byTitle;
|
|
664
|
-
const byAllDay = Number(Boolean(a.all_day)) - Number(Boolean(b.all_day));
|
|
665
|
-
if (byAllDay !== 0)
|
|
666
|
-
return byAllDay;
|
|
667
|
-
const byTimezone = (a.timezone ?? "").localeCompare(b.timezone ?? "");
|
|
668
|
-
if (byTimezone !== 0)
|
|
669
|
-
return byTimezone;
|
|
670
|
-
const byLocation = (a.location ?? "").localeCompare(b.location ?? "");
|
|
671
|
-
if (byLocation !== 0)
|
|
672
|
-
return byLocation;
|
|
673
|
-
const byDescription = (a.description ?? "").localeCompare(b.description ?? "");
|
|
674
|
-
if (byDescription !== 0)
|
|
675
|
-
return byDescription;
|
|
676
|
-
return JSON.stringify(a.recurrence ?? {}).localeCompare(JSON.stringify(b.recurrence ?? {}));
|
|
677
|
-
});
|
|
717
|
+
const normalized = [...values].map(normalizeCalendarEvent).sort(compareCalendarEvents);
|
|
678
718
|
return normalized;
|
|
679
719
|
}
|
|
720
|
+
function normalizeCalendarEvent(value) {
|
|
721
|
+
const event = {
|
|
722
|
+
start_at: value.start_at,
|
|
723
|
+
end_at: value.end_at || void 0,
|
|
724
|
+
title: value.title?.trim() || void 0,
|
|
725
|
+
description: value.description?.trim() || void 0,
|
|
726
|
+
location: value.location?.trim() || void 0,
|
|
727
|
+
all_day: value.all_day,
|
|
728
|
+
timezone: value.timezone?.trim() || void 0,
|
|
729
|
+
recurrence: normalizeRecurrenceRule(value.recurrence)
|
|
730
|
+
};
|
|
731
|
+
deleteUndefinedFields(event);
|
|
732
|
+
return event;
|
|
733
|
+
}
|
|
734
|
+
function compareCalendarEvents(a, b) {
|
|
735
|
+
return firstNonZeroComparison([
|
|
736
|
+
compareTimestampStrings(a.start_at, b.start_at),
|
|
737
|
+
(a.end_at ?? "").localeCompare(b.end_at ?? ""),
|
|
738
|
+
(a.title ?? "").localeCompare(b.title ?? ""),
|
|
739
|
+
Number(Boolean(a.all_day)) - Number(Boolean(b.all_day)),
|
|
740
|
+
(a.timezone ?? "").localeCompare(b.timezone ?? ""),
|
|
741
|
+
(a.location ?? "").localeCompare(b.location ?? ""),
|
|
742
|
+
(a.description ?? "").localeCompare(b.description ?? ""),
|
|
743
|
+
JSON.stringify(a.recurrence ?? {}).localeCompare(JSON.stringify(b.recurrence ?? {}))
|
|
744
|
+
]);
|
|
745
|
+
}
|
|
680
746
|
function normalizeFiles(values) {
|
|
681
747
|
if (!values || values.length === 0)
|
|
682
748
|
return void 0;
|
|
@@ -689,83 +755,140 @@ function normalizeFiles(values) {
|
|
|
689
755
|
function normalizeTestRunSummaries(values) {
|
|
690
756
|
if (!values || values.length === 0)
|
|
691
757
|
return void 0;
|
|
692
|
-
const normalized = values.map((value) =>
|
|
693
|
-
const runId = typeof value.run_id === "string" ? value.run_id.trim() : "";
|
|
694
|
-
const kind = value.kind === "test" || value.kind === "test-all" ? value.kind : "test";
|
|
695
|
-
const status = value.status === "passed" || value.status === "failed" || value.status === "stopped" || value.status === "canceled" ? value.status : "failed";
|
|
696
|
-
const startedAt = typeof value.started_at === "string" ? value.started_at : "";
|
|
697
|
-
const finishedAt = typeof value.finished_at === "string" ? value.finished_at : "";
|
|
698
|
-
const recordedAt = typeof value.recorded_at === "string" ? value.recorded_at : "";
|
|
699
|
-
const passed = typeof value.passed === "number" && Number.isFinite(value.passed) ? Math.max(0, Math.floor(value.passed)) : 0;
|
|
700
|
-
const failed = typeof value.failed === "number" && Number.isFinite(value.failed) ? Math.max(0, Math.floor(value.failed)) : 0;
|
|
701
|
-
const skipped = typeof value.skipped === "number" && Number.isFinite(value.skipped) ? Math.max(0, Math.floor(value.skipped)) : 0;
|
|
702
|
-
return {
|
|
703
|
-
run_id: runId,
|
|
704
|
-
kind,
|
|
705
|
-
status,
|
|
706
|
-
started_at: startedAt,
|
|
707
|
-
finished_at: finishedAt,
|
|
708
|
-
recorded_at: recordedAt,
|
|
709
|
-
attempt: typeof value.attempt === "number" && Number.isFinite(value.attempt) && value.attempt >= 1 ? Math.floor(value.attempt) : void 0,
|
|
710
|
-
resumed_from: value.resumed_from?.trim() || void 0,
|
|
711
|
-
passed,
|
|
712
|
-
failed,
|
|
713
|
-
skipped,
|
|
714
|
-
items: typeof value.items === "number" && Number.isFinite(value.items) && value.items >= 0 ? Math.floor(value.items) : void 0,
|
|
715
|
-
linked_tests: typeof value.linked_tests === "number" && Number.isFinite(value.linked_tests) && value.linked_tests >= 0 ? Math.floor(value.linked_tests) : void 0,
|
|
716
|
-
fail_on_skipped_triggered: value.fail_on_skipped_triggered === true ? true : void 0
|
|
717
|
-
};
|
|
718
|
-
}).filter((value) => value.run_id.length > 0 && value.started_at.length > 0 && value.finished_at.length > 0 && value.recorded_at.length > 0).sort((a, b) => firstNonZeroComparison([
|
|
758
|
+
const normalized = values.map(normalizeTestRunSummary).filter((value) => value.run_id.length > 0 && value.started_at.length > 0 && value.finished_at.length > 0 && value.recorded_at.length > 0).sort((a, b) => firstNonZeroComparison([
|
|
719
759
|
compareTimestampStrings(a.recorded_at, b.recorded_at),
|
|
720
760
|
a.run_id.localeCompare(b.run_id),
|
|
721
761
|
a.kind.localeCompare(b.kind)
|
|
722
762
|
]));
|
|
723
763
|
return normalized.length > 0 ? normalized : void 0;
|
|
724
764
|
}
|
|
765
|
+
function normalizeNonNegativeInteger(value) {
|
|
766
|
+
return typeof value === "number" && Number.isFinite(value) && value >= 0 ? Math.floor(value) : void 0;
|
|
767
|
+
}
|
|
768
|
+
function normalizePositiveInteger(value) {
|
|
769
|
+
return typeof value === "number" && Number.isFinite(value) && value >= 1 ? Math.floor(value) : void 0;
|
|
770
|
+
}
|
|
771
|
+
function stringOrEmpty(value) {
|
|
772
|
+
return typeof value === "string" ? value : "";
|
|
773
|
+
}
|
|
774
|
+
function normalizeTestRunSummary(value) {
|
|
775
|
+
const runId = typeof value.run_id === "string" ? value.run_id.trim() : "";
|
|
776
|
+
const kind = value.kind === "test" || value.kind === "test-all" ? value.kind : "test";
|
|
777
|
+
const status = ITEM_TEST_RUN_STATUS_VALUES.has(value.status) ? value.status : "failed";
|
|
778
|
+
const summary = {
|
|
779
|
+
run_id: runId,
|
|
780
|
+
kind,
|
|
781
|
+
status,
|
|
782
|
+
started_at: stringOrEmpty(value.started_at),
|
|
783
|
+
finished_at: stringOrEmpty(value.finished_at),
|
|
784
|
+
recorded_at: stringOrEmpty(value.recorded_at),
|
|
785
|
+
attempt: normalizePositiveInteger(value.attempt),
|
|
786
|
+
resumed_from: value.resumed_from?.trim() || void 0,
|
|
787
|
+
passed: normalizeNonNegativeInteger(value.passed) ?? 0,
|
|
788
|
+
failed: normalizeNonNegativeInteger(value.failed) ?? 0,
|
|
789
|
+
skipped: normalizeNonNegativeInteger(value.skipped) ?? 0,
|
|
790
|
+
items: normalizeNonNegativeInteger(value.items),
|
|
791
|
+
linked_tests: normalizeNonNegativeInteger(value.linked_tests),
|
|
792
|
+
fail_on_skipped_triggered: value.fail_on_skipped_triggered === true ? true : void 0
|
|
793
|
+
};
|
|
794
|
+
deleteUndefinedFields(summary);
|
|
795
|
+
return summary;
|
|
796
|
+
}
|
|
725
797
|
function sortTests(values) {
|
|
726
|
-
if (!values || values.length === 0)
|
|
798
|
+
if (!Array.isArray(values) || values.length === 0)
|
|
727
799
|
return void 0;
|
|
728
|
-
return [...values].map((
|
|
800
|
+
return [...values].map(normalizeLinkedTest).sort(compareLinkedTests);
|
|
801
|
+
}
|
|
802
|
+
function normalizeTrimmedStringList(value) {
|
|
803
|
+
if (!Array.isArray(value)) {
|
|
804
|
+
return void 0;
|
|
805
|
+
}
|
|
806
|
+
const normalized = [
|
|
807
|
+
...new Set(value.filter((entry) => typeof entry === "string").map((entry) => entry.trim()).filter((entry) => entry.length > 0))
|
|
808
|
+
].sort((a, b) => a.localeCompare(b));
|
|
809
|
+
return normalized.length > 0 ? normalized : void 0;
|
|
810
|
+
}
|
|
811
|
+
function isPlainObjectRecord(value) {
|
|
812
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
813
|
+
return false;
|
|
814
|
+
}
|
|
815
|
+
const prototype = Object.getPrototypeOf(value);
|
|
816
|
+
return prototype === Object.prototype || prototype === null;
|
|
817
|
+
}
|
|
818
|
+
function isUnsafeObjectKey(key) {
|
|
819
|
+
return key === "__proto__" || key === "constructor" || key === "prototype";
|
|
820
|
+
}
|
|
821
|
+
function normalizeStringRecord(value) {
|
|
822
|
+
if (!isPlainObjectRecord(value)) {
|
|
823
|
+
return void 0;
|
|
824
|
+
}
|
|
825
|
+
const entries = Object.entries(value).map(([key, recordValue]) => [key.trim(), String(recordValue).trim()]).filter(([key, recordValue]) => key.length > 0 && !isUnsafeObjectKey(key) && recordValue.length > 0).sort(([left], [right]) => left.localeCompare(right));
|
|
826
|
+
return entries.length > 0 ? Object.fromEntries(entries) : void 0;
|
|
827
|
+
}
|
|
828
|
+
function normalizeNumericRecord(value) {
|
|
829
|
+
if (!isPlainObjectRecord(value)) {
|
|
830
|
+
return void 0;
|
|
831
|
+
}
|
|
832
|
+
const entries = Object.entries(value).map(([key, recordValue]) => [key.trim(), Number(recordValue)]).filter(([key, recordValue]) => key.length > 0 && !isUnsafeObjectKey(key) && Number.isFinite(recordValue)).sort(([left], [right]) => left.localeCompare(right));
|
|
833
|
+
return entries.length > 0 ? Object.fromEntries(entries) : void 0;
|
|
834
|
+
}
|
|
835
|
+
function normalizeLinkedTestContextMode(value) {
|
|
836
|
+
const normalized = value?.trim().toLowerCase();
|
|
837
|
+
if (!normalized || !LINKED_TEST_PM_CONTEXT_MODE_VALUES.has(normalized)) {
|
|
838
|
+
return void 0;
|
|
839
|
+
}
|
|
840
|
+
return normalized;
|
|
841
|
+
}
|
|
842
|
+
function normalizeLinkedTest(value) {
|
|
843
|
+
const test = {
|
|
729
844
|
command: value.command?.trim() || void 0,
|
|
730
845
|
path: value.path ? normalizePathValue(value.path) : void 0,
|
|
731
846
|
scope: value.scope,
|
|
732
847
|
timeout_seconds: typeof value.timeout_seconds === "number" && Number.isFinite(value.timeout_seconds) && value.timeout_seconds > 0 ? value.timeout_seconds : void 0,
|
|
733
|
-
pm_context_mode: (
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
return void 0;
|
|
737
|
-
}
|
|
738
|
-
return normalized;
|
|
739
|
-
})(),
|
|
740
|
-
env_set: value.env_set ? Object.fromEntries(Object.entries(value.env_set).map(([key, envValue]) => [key.trim(), String(envValue).trim()]).filter(([key, envValue]) => key.length > 0 && envValue.length > 0).sort(([left], [right]) => left.localeCompare(right))) : void 0,
|
|
741
|
-
env_clear: value.env_clear ? [...new Set(value.env_clear.map((entry) => entry.trim()).filter((entry) => entry.length > 0))].sort((a, b) => a.localeCompare(b)) : void 0,
|
|
848
|
+
pm_context_mode: normalizeLinkedTestContextMode(value.pm_context_mode),
|
|
849
|
+
env_set: normalizeStringRecord(value.env_set),
|
|
850
|
+
env_clear: normalizeTrimmedStringList(value.env_clear),
|
|
742
851
|
shared_host_safe: value.shared_host_safe === true ? true : void 0,
|
|
743
|
-
assert_stdout_contains:
|
|
744
|
-
assert_stdout_regex:
|
|
745
|
-
assert_stderr_contains:
|
|
746
|
-
assert_stderr_regex:
|
|
747
|
-
assert_stdout_min_lines:
|
|
748
|
-
assert_json_field_equals:
|
|
749
|
-
assert_json_field_gte:
|
|
852
|
+
assert_stdout_contains: normalizeTrimmedStringList(value.assert_stdout_contains),
|
|
853
|
+
assert_stdout_regex: normalizeTrimmedStringList(value.assert_stdout_regex),
|
|
854
|
+
assert_stderr_contains: normalizeTrimmedStringList(value.assert_stderr_contains),
|
|
855
|
+
assert_stderr_regex: normalizeTrimmedStringList(value.assert_stderr_regex),
|
|
856
|
+
assert_stdout_min_lines: normalizeNonNegativeInteger(value.assert_stdout_min_lines),
|
|
857
|
+
assert_json_field_equals: normalizeStringRecord(value.assert_json_field_equals),
|
|
858
|
+
assert_json_field_gte: normalizeNumericRecord(value.assert_json_field_gte),
|
|
750
859
|
note: value.note?.trim() || void 0
|
|
751
|
-
}
|
|
860
|
+
};
|
|
861
|
+
deleteUndefinedFields(test);
|
|
862
|
+
return test;
|
|
863
|
+
}
|
|
864
|
+
function compareLinkedTests(a, b) {
|
|
865
|
+
return firstNonZeroComparison([
|
|
752
866
|
a.scope.localeCompare(b.scope),
|
|
753
|
-
(a.path
|
|
754
|
-
(a.command
|
|
755
|
-
(a.timeout_seconds
|
|
756
|
-
(a.pm_context_mode
|
|
867
|
+
compareOptionalStrings(a.path, b.path),
|
|
868
|
+
compareOptionalStrings(a.command, b.command),
|
|
869
|
+
compareOptionalNumbers(a.timeout_seconds, b.timeout_seconds),
|
|
870
|
+
compareOptionalStrings(a.pm_context_mode, b.pm_context_mode),
|
|
757
871
|
Number(Boolean(a.shared_host_safe)) - Number(Boolean(b.shared_host_safe)),
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
(a.assert_stdout_min_lines
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
(a.note
|
|
768
|
-
])
|
|
872
|
+
compareJsonValues(a.env_clear, b.env_clear, []),
|
|
873
|
+
compareJsonValues(a.env_set, b.env_set, {}),
|
|
874
|
+
compareJsonValues(a.assert_stdout_contains, b.assert_stdout_contains, []),
|
|
875
|
+
compareJsonValues(a.assert_stdout_regex, b.assert_stdout_regex, []),
|
|
876
|
+
compareJsonValues(a.assert_stderr_contains, b.assert_stderr_contains, []),
|
|
877
|
+
compareJsonValues(a.assert_stderr_regex, b.assert_stderr_regex, []),
|
|
878
|
+
compareOptionalNumbers(a.assert_stdout_min_lines, b.assert_stdout_min_lines),
|
|
879
|
+
compareJsonValues(a.assert_json_field_equals, b.assert_json_field_equals, {}),
|
|
880
|
+
compareJsonValues(a.assert_json_field_gte, b.assert_json_field_gte, {}),
|
|
881
|
+
compareOptionalStrings(a.note, b.note)
|
|
882
|
+
]);
|
|
883
|
+
}
|
|
884
|
+
function compareOptionalStrings(left, right) {
|
|
885
|
+
return (left ?? "").localeCompare(right ?? "");
|
|
886
|
+
}
|
|
887
|
+
function compareOptionalNumbers(left, right) {
|
|
888
|
+
return (left ?? 0) - (right ?? 0);
|
|
889
|
+
}
|
|
890
|
+
function compareJsonValues(left, right, fallback) {
|
|
891
|
+
return JSON.stringify(left ?? fallback).localeCompare(JSON.stringify(right ?? fallback));
|
|
769
892
|
}
|
|
770
893
|
function sortDocs(values) {
|
|
771
894
|
if (!values || values.length === 0)
|
|
@@ -878,65 +1001,71 @@ function normalizePlanStepDocs(value) {
|
|
|
878
1001
|
}
|
|
879
1002
|
return out.length > 0 ? out : void 0;
|
|
880
1003
|
}
|
|
1004
|
+
function normalizePlanStepEntry(entry) {
|
|
1005
|
+
if (entry === null || typeof entry !== "object") {
|
|
1006
|
+
return void 0;
|
|
1007
|
+
}
|
|
1008
|
+
const record = entry;
|
|
1009
|
+
const id = trimStringOrUndefined(record.id);
|
|
1010
|
+
const title = trimStringOrUndefined(record.title);
|
|
1011
|
+
const statusRaw = trimStringOrUndefined(record.status);
|
|
1012
|
+
const status = statusRaw && PLAN_STEP_STATUS_SET.has(statusRaw) ? statusRaw : void 0;
|
|
1013
|
+
const orderRaw = record.order;
|
|
1014
|
+
const order = typeof orderRaw === "number" && Number.isFinite(orderRaw) ? orderRaw : typeof orderRaw === "string" && orderRaw.trim().length > 0 ? Number(orderRaw) : Number.NaN;
|
|
1015
|
+
const created_at = typeof record.created_at === "string" ? record.created_at : "";
|
|
1016
|
+
const updated_at = typeof record.updated_at === "string" ? record.updated_at : "";
|
|
1017
|
+
if (!id || !title || !status || !Number.isFinite(order) || !created_at || !updated_at) {
|
|
1018
|
+
return void 0;
|
|
1019
|
+
}
|
|
1020
|
+
const step = {
|
|
1021
|
+
id,
|
|
1022
|
+
order,
|
|
1023
|
+
title,
|
|
1024
|
+
status,
|
|
1025
|
+
created_at,
|
|
1026
|
+
updated_at
|
|
1027
|
+
};
|
|
1028
|
+
applyPlanStepOptionalFields(step, record);
|
|
1029
|
+
return step;
|
|
1030
|
+
}
|
|
1031
|
+
function applyPlanStepOptionalFields(step, record) {
|
|
1032
|
+
const stringFields = [
|
|
1033
|
+
["body", "body"],
|
|
1034
|
+
["owner", "owner"],
|
|
1035
|
+
["evidence", "evidence"],
|
|
1036
|
+
["blocked_reason", "blocked_reason"],
|
|
1037
|
+
["superseded_by", "superseded_by"]
|
|
1038
|
+
];
|
|
1039
|
+
for (const [target, source] of stringFields) {
|
|
1040
|
+
const value = trimStringOrUndefined(record[source]);
|
|
1041
|
+
if (value) {
|
|
1042
|
+
step[target] = value;
|
|
1043
|
+
}
|
|
1044
|
+
}
|
|
1045
|
+
const completedAt = typeof record.completed_at === "string" ? record.completed_at : void 0;
|
|
1046
|
+
if (completedAt && completedAt.length > 0) {
|
|
1047
|
+
step.completed_at = completedAt;
|
|
1048
|
+
}
|
|
1049
|
+
const collectionFields = [
|
|
1050
|
+
["linked_items", "linked_items", normalizePlanStepLinks],
|
|
1051
|
+
["files", "files", normalizePlanStepFiles],
|
|
1052
|
+
["tests", "tests", normalizePlanStepTests],
|
|
1053
|
+
["docs", "docs", normalizePlanStepDocs]
|
|
1054
|
+
];
|
|
1055
|
+
for (const [target, source, normalize] of collectionFields) {
|
|
1056
|
+
const value = normalize(record[source]);
|
|
1057
|
+
if (value) {
|
|
1058
|
+
step[target] = value;
|
|
1059
|
+
}
|
|
1060
|
+
}
|
|
1061
|
+
}
|
|
881
1062
|
function normalizePlanSteps(value) {
|
|
882
1063
|
if (!Array.isArray(value))
|
|
883
1064
|
return void 0;
|
|
884
|
-
const out =
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
const record = entry;
|
|
889
|
-
const id = trimStringOrUndefined(record.id);
|
|
890
|
-
const title = trimStringOrUndefined(record.title);
|
|
891
|
-
const status = trimStringOrUndefined(record.status);
|
|
892
|
-
const orderRaw = record.order;
|
|
893
|
-
const order = typeof orderRaw === "number" && Number.isFinite(orderRaw) ? orderRaw : Number(orderRaw);
|
|
894
|
-
if (!id || !title || !status || !Number.isFinite(order))
|
|
895
|
-
continue;
|
|
896
|
-
const created_at = typeof record.created_at === "string" ? record.created_at : "";
|
|
897
|
-
const updated_at = typeof record.updated_at === "string" ? record.updated_at : "";
|
|
898
|
-
if (!created_at || !updated_at)
|
|
899
|
-
continue;
|
|
900
|
-
const step = {
|
|
901
|
-
id,
|
|
902
|
-
order,
|
|
903
|
-
title,
|
|
904
|
-
status,
|
|
905
|
-
created_at,
|
|
906
|
-
updated_at
|
|
907
|
-
};
|
|
908
|
-
const body = trimStringOrUndefined(record.body);
|
|
909
|
-
if (body)
|
|
910
|
-
step.body = body;
|
|
911
|
-
const owner = trimStringOrUndefined(record.owner);
|
|
912
|
-
if (owner)
|
|
913
|
-
step.owner = owner;
|
|
914
|
-
const evidence = trimStringOrUndefined(record.evidence);
|
|
915
|
-
if (evidence)
|
|
916
|
-
step.evidence = evidence;
|
|
917
|
-
const blockedReason = trimStringOrUndefined(record.blocked_reason);
|
|
918
|
-
if (blockedReason)
|
|
919
|
-
step.blocked_reason = blockedReason;
|
|
920
|
-
const supersededBy = trimStringOrUndefined(record.superseded_by);
|
|
921
|
-
if (supersededBy)
|
|
922
|
-
step.superseded_by = supersededBy;
|
|
923
|
-
const completedAt = typeof record.completed_at === "string" ? record.completed_at : void 0;
|
|
924
|
-
if (completedAt && completedAt.length > 0)
|
|
925
|
-
step.completed_at = completedAt;
|
|
926
|
-
const links = normalizePlanStepLinks(record.linked_items);
|
|
927
|
-
if (links)
|
|
928
|
-
step.linked_items = links;
|
|
929
|
-
const files = normalizePlanStepFiles(record.files);
|
|
930
|
-
if (files)
|
|
931
|
-
step.files = files;
|
|
932
|
-
const tests = normalizePlanStepTests(record.tests);
|
|
933
|
-
if (tests)
|
|
934
|
-
step.tests = tests;
|
|
935
|
-
const docs = normalizePlanStepDocs(record.docs);
|
|
936
|
-
if (docs)
|
|
937
|
-
step.docs = docs;
|
|
938
|
-
out.push(step);
|
|
939
|
-
}
|
|
1065
|
+
const out = value.flatMap((entry) => {
|
|
1066
|
+
const step = normalizePlanStepEntry(entry);
|
|
1067
|
+
return step ? [step] : [];
|
|
1068
|
+
});
|
|
940
1069
|
out.sort((left, right) => left.order - right.order);
|
|
941
1070
|
return out.length > 0 ? out : void 0;
|
|
942
1071
|
}
|
|
@@ -1056,6 +1185,46 @@ function normalizeSeverityValue(value) {
|
|
|
1056
1185
|
}
|
|
1057
1186
|
return void 0;
|
|
1058
1187
|
}
|
|
1188
|
+
function emptyStringToUndefined(value) {
|
|
1189
|
+
return value || void 0;
|
|
1190
|
+
}
|
|
1191
|
+
function copyExtensionFrontMatterFields(normalized, source) {
|
|
1192
|
+
const targetRecord = normalized;
|
|
1193
|
+
const sourceRecord = source;
|
|
1194
|
+
for (const [key, value] of Object.entries(sourceRecord)) {
|
|
1195
|
+
if (isUnsafeObjectKey(key) || Object.prototype.hasOwnProperty.call(targetRecord, key) || value === void 0) {
|
|
1196
|
+
continue;
|
|
1197
|
+
}
|
|
1198
|
+
targetRecord[key] = value;
|
|
1199
|
+
}
|
|
1200
|
+
}
|
|
1201
|
+
function coerceNormalizedRuntimeFields(normalized, runtimeContext) {
|
|
1202
|
+
if (!runtimeContext?.fieldRegistry) {
|
|
1203
|
+
return;
|
|
1204
|
+
}
|
|
1205
|
+
const record = normalized;
|
|
1206
|
+
for (const definition of runtimeContext.fieldRegistry.definitions) {
|
|
1207
|
+
const currentValue = record[definition.metadata_key];
|
|
1208
|
+
if (currentValue === void 0) {
|
|
1209
|
+
continue;
|
|
1210
|
+
}
|
|
1211
|
+
record[definition.metadata_key] = coerceRuntimeFieldValue(definition, currentValue, `metadata field "${definition.metadata_key}"`);
|
|
1212
|
+
}
|
|
1213
|
+
}
|
|
1214
|
+
function assertNormalizedUnknownFields(normalized, runtimeContext) {
|
|
1215
|
+
if (!runtimeContext || runtimeContext.unknownFieldPolicy === "allow") {
|
|
1216
|
+
return;
|
|
1217
|
+
}
|
|
1218
|
+
const knownKeys = buildKnownFrontMatterKeys(runtimeContext);
|
|
1219
|
+
const record = normalized;
|
|
1220
|
+
const unknownKeys = Object.keys(record).filter((key) => !knownKeys.has(key)).sort((left, right) => left.localeCompare(right));
|
|
1221
|
+
if (unknownKeys.length > 0 && runtimeContext.unknownFieldPolicy === "reject") {
|
|
1222
|
+
validationError(`unknown schema fields are not allowed: ${unknownKeys.join(", ")}`);
|
|
1223
|
+
}
|
|
1224
|
+
if (unknownKeys.length > 0) {
|
|
1225
|
+
runtimeContext.onWarning?.(`item_unknown_schema_fields:${unknownKeys.join(",")}`);
|
|
1226
|
+
}
|
|
1227
|
+
}
|
|
1059
1228
|
function normalizeFrontMatter(frontMatter, options = {}) {
|
|
1060
1229
|
const runtimeContext = resolveRuntimeSchemaValidationContext(options);
|
|
1061
1230
|
const normalizedStatus = normalizeStatusInput(frontMatter.status, runtimeContext?.statusRegistry) ?? frontMatter.status;
|
|
@@ -1066,7 +1235,7 @@ function normalizeFrontMatter(frontMatter, options = {}) {
|
|
|
1066
1235
|
description: frontMatter.description,
|
|
1067
1236
|
type: frontMatter.type,
|
|
1068
1237
|
pm_format_version: normalizeItemFormatVersion(frontMatter.pm_format_version),
|
|
1069
|
-
source_type: frontMatter.source_type
|
|
1238
|
+
source_type: trimStringOrUndefined(frontMatter.source_type),
|
|
1070
1239
|
type_options: normalizeTypeOptions(frontMatter.type_options),
|
|
1071
1240
|
status: normalizedStatus,
|
|
1072
1241
|
priority: frontMatter.priority,
|
|
@@ -1081,47 +1250,47 @@ function normalizeFrontMatter(frontMatter, options = {}) {
|
|
|
1081
1250
|
tests: sortTests(frontMatter.tests),
|
|
1082
1251
|
test_runs: normalizeTestRunSummaries(frontMatter.test_runs),
|
|
1083
1252
|
docs: sortDocs(frontMatter.docs),
|
|
1084
|
-
deadline: frontMatter.deadline
|
|
1253
|
+
deadline: emptyStringToUndefined(frontMatter.deadline),
|
|
1085
1254
|
reminders: sortReminders(frontMatter.reminders),
|
|
1086
1255
|
events: sortEvents(frontMatter.events),
|
|
1087
|
-
closed_at: frontMatter.closed_at
|
|
1088
|
-
assignee: frontMatter.assignee
|
|
1089
|
-
source_owner: frontMatter.source_owner
|
|
1090
|
-
author: frontMatter.author
|
|
1256
|
+
closed_at: emptyStringToUndefined(frontMatter.closed_at),
|
|
1257
|
+
assignee: trimStringOrUndefined(frontMatter.assignee),
|
|
1258
|
+
source_owner: trimStringOrUndefined(frontMatter.source_owner),
|
|
1259
|
+
author: emptyStringToUndefined(frontMatter.author),
|
|
1091
1260
|
estimated_minutes: frontMatter.estimated_minutes,
|
|
1092
1261
|
acceptance_criteria: frontMatter.acceptance_criteria ?? void 0,
|
|
1093
1262
|
design: frontMatter.design ?? void 0,
|
|
1094
1263
|
external_ref: frontMatter.external_ref ?? void 0,
|
|
1095
|
-
definition_of_ready: frontMatter.definition_of_ready
|
|
1264
|
+
definition_of_ready: trimStringOrUndefined(frontMatter.definition_of_ready),
|
|
1096
1265
|
order: frontMatter.order,
|
|
1097
|
-
goal: frontMatter.goal
|
|
1098
|
-
objective: frontMatter.objective
|
|
1099
|
-
value: frontMatter.value
|
|
1100
|
-
impact: frontMatter.impact
|
|
1101
|
-
outcome: frontMatter.outcome
|
|
1102
|
-
why_now: frontMatter.why_now
|
|
1103
|
-
parent: frontMatter.parent
|
|
1104
|
-
reviewer: frontMatter.reviewer
|
|
1266
|
+
goal: trimStringOrUndefined(frontMatter.goal),
|
|
1267
|
+
objective: trimStringOrUndefined(frontMatter.objective),
|
|
1268
|
+
value: trimStringOrUndefined(frontMatter.value),
|
|
1269
|
+
impact: trimStringOrUndefined(frontMatter.impact),
|
|
1270
|
+
outcome: trimStringOrUndefined(frontMatter.outcome),
|
|
1271
|
+
why_now: trimStringOrUndefined(frontMatter.why_now),
|
|
1272
|
+
parent: trimStringOrUndefined(frontMatter.parent),
|
|
1273
|
+
reviewer: trimStringOrUndefined(frontMatter.reviewer),
|
|
1105
1274
|
risk: frontMatter.risk ?? void 0,
|
|
1106
1275
|
confidence: normalizeConfidenceValue(frontMatter.confidence),
|
|
1107
|
-
sprint: frontMatter.sprint
|
|
1108
|
-
release: frontMatter.release
|
|
1109
|
-
blocked_by: frontMatter.blocked_by
|
|
1110
|
-
blocked_reason: frontMatter.blocked_reason
|
|
1111
|
-
unblock_note: frontMatter.unblock_note
|
|
1112
|
-
reporter: frontMatter.reporter
|
|
1276
|
+
sprint: trimStringOrUndefined(frontMatter.sprint),
|
|
1277
|
+
release: trimStringOrUndefined(frontMatter.release),
|
|
1278
|
+
blocked_by: trimStringOrUndefined(frontMatter.blocked_by),
|
|
1279
|
+
blocked_reason: trimStringOrUndefined(frontMatter.blocked_reason),
|
|
1280
|
+
unblock_note: trimStringOrUndefined(frontMatter.unblock_note),
|
|
1281
|
+
reporter: trimStringOrUndefined(frontMatter.reporter),
|
|
1113
1282
|
severity: normalizeSeverityValue(frontMatter.severity),
|
|
1114
|
-
environment: frontMatter.environment
|
|
1115
|
-
repro_steps: frontMatter.repro_steps
|
|
1116
|
-
resolution: frontMatter.resolution
|
|
1117
|
-
expected_result: frontMatter.expected_result
|
|
1118
|
-
actual_result: frontMatter.actual_result
|
|
1119
|
-
affected_version: frontMatter.affected_version
|
|
1120
|
-
fixed_version: frontMatter.fixed_version
|
|
1121
|
-
component: frontMatter.component
|
|
1283
|
+
environment: trimStringOrUndefined(frontMatter.environment),
|
|
1284
|
+
repro_steps: trimStringOrUndefined(frontMatter.repro_steps),
|
|
1285
|
+
resolution: trimStringOrUndefined(frontMatter.resolution),
|
|
1286
|
+
expected_result: trimStringOrUndefined(frontMatter.expected_result),
|
|
1287
|
+
actual_result: trimStringOrUndefined(frontMatter.actual_result),
|
|
1288
|
+
affected_version: trimStringOrUndefined(frontMatter.affected_version),
|
|
1289
|
+
fixed_version: trimStringOrUndefined(frontMatter.fixed_version),
|
|
1290
|
+
component: trimStringOrUndefined(frontMatter.component),
|
|
1122
1291
|
regression: frontMatter.regression,
|
|
1123
|
-
customer_impact: frontMatter.customer_impact
|
|
1124
|
-
close_reason: frontMatter.close_reason
|
|
1292
|
+
customer_impact: trimStringOrUndefined(frontMatter.customer_impact),
|
|
1293
|
+
close_reason: emptyStringToUndefined(frontMatter.close_reason),
|
|
1125
1294
|
plan_mode: trimStringOrUndefined(frontMatter.plan_mode),
|
|
1126
1295
|
plan_scope: trimStringOrUndefined(frontMatter.plan_scope),
|
|
1127
1296
|
plan_harness: trimStringOrUndefined(frontMatter.plan_harness),
|
|
@@ -1131,36 +1300,10 @@ function normalizeFrontMatter(frontMatter, options = {}) {
|
|
|
1131
1300
|
plan_discoveries: normalizePlanDiscoveries(frontMatter.plan_discoveries),
|
|
1132
1301
|
plan_validation: normalizePlanValidation(frontMatter.plan_validation)
|
|
1133
1302
|
};
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
}
|
|
1139
|
-
normalized[key] = value;
|
|
1140
|
-
}
|
|
1141
|
-
if (runtimeContext?.fieldRegistry) {
|
|
1142
|
-
for (const definition of runtimeContext.fieldRegistry.definitions) {
|
|
1143
|
-
const currentValue = normalized[definition.metadata_key];
|
|
1144
|
-
if (currentValue === void 0) {
|
|
1145
|
-
continue;
|
|
1146
|
-
}
|
|
1147
|
-
normalized[definition.metadata_key] = coerceRuntimeFieldValue(definition, currentValue, `metadata field "${definition.metadata_key}"`);
|
|
1148
|
-
}
|
|
1149
|
-
}
|
|
1150
|
-
if (runtimeContext && runtimeContext.unknownFieldPolicy !== "allow") {
|
|
1151
|
-
const knownKeys = buildKnownFrontMatterKeys(runtimeContext);
|
|
1152
|
-
const unknownKeys = Object.keys(normalized).filter((key) => !knownKeys.has(key)).sort((left, right) => left.localeCompare(right));
|
|
1153
|
-
if (unknownKeys.length > 0) {
|
|
1154
|
-
if (runtimeContext.unknownFieldPolicy === "reject") {
|
|
1155
|
-
validationError(`unknown schema fields are not allowed: ${unknownKeys.join(", ")}`);
|
|
1156
|
-
}
|
|
1157
|
-
}
|
|
1158
|
-
}
|
|
1159
|
-
for (const [key, value] of Object.entries(normalized)) {
|
|
1160
|
-
if (value === void 0) {
|
|
1161
|
-
delete normalized[key];
|
|
1162
|
-
}
|
|
1163
|
-
}
|
|
1303
|
+
copyExtensionFrontMatterFields(normalized, frontMatter);
|
|
1304
|
+
coerceNormalizedRuntimeFields(normalized, runtimeContext);
|
|
1305
|
+
assertNormalizedUnknownFields(normalized, runtimeContext);
|
|
1306
|
+
deleteUndefinedFields(normalized);
|
|
1164
1307
|
return normalized;
|
|
1165
1308
|
}
|
|
1166
1309
|
function orderFrontMatter(frontMatter) {
|
|
@@ -1234,6 +1377,9 @@ function stripLeadingYamlDocument(content) {
|
|
|
1234
1377
|
}
|
|
1235
1378
|
return { content: normalizedContent, stripped: false };
|
|
1236
1379
|
}
|
|
1380
|
+
function normalizeParsedFrontMatter(frontMatter, options) {
|
|
1381
|
+
return normalizeFrontMatter(frontMatter, { ...options, onWarning: void 0 });
|
|
1382
|
+
}
|
|
1237
1383
|
function parseJsonMarkdownItemDocument(content, runtimeContext, options = {}) {
|
|
1238
1384
|
const normalized = stripLeadingYamlDocument(content);
|
|
1239
1385
|
if (normalized.stripped) {
|
|
@@ -1255,7 +1401,7 @@ function parseJsonMarkdownItemDocument(content, runtimeContext, options = {}) {
|
|
|
1255
1401
|
}
|
|
1256
1402
|
assertValidFrontMatter(parsed, runtimeContext);
|
|
1257
1403
|
return {
|
|
1258
|
-
metadata:
|
|
1404
|
+
metadata: normalizeParsedFrontMatter(parsed, options),
|
|
1259
1405
|
body: normalizeBody(body)
|
|
1260
1406
|
};
|
|
1261
1407
|
}
|
|
@@ -1272,7 +1418,7 @@ function parseToonItemDocument(content, runtimeContext, options = {}) {
|
|
|
1272
1418
|
assertValidFrontMatter(record.front_matter, runtimeContext);
|
|
1273
1419
|
assertFrontMatterCondition(record.body === void 0 || typeof record.body === "string", "TOON item document body must be a string");
|
|
1274
1420
|
return {
|
|
1275
|
-
metadata:
|
|
1421
|
+
metadata: normalizeParsedFrontMatter(record.front_matter, options),
|
|
1276
1422
|
body: normalizeBody(typeof record.body === "string" ? record.body : "")
|
|
1277
1423
|
};
|
|
1278
1424
|
}
|
|
@@ -1280,7 +1426,7 @@ function parseToonItemDocument(content, runtimeContext, options = {}) {
|
|
|
1280
1426
|
assertFrontMatterCondition(body === void 0 || typeof body === "string", "TOON item document body must be a string");
|
|
1281
1427
|
assertValidFrontMatter(frontMatterRecord, runtimeContext);
|
|
1282
1428
|
return {
|
|
1283
|
-
metadata:
|
|
1429
|
+
metadata: normalizeParsedFrontMatter(frontMatterRecord, options),
|
|
1284
1430
|
body: normalizeBody(typeof body === "string" ? body : "")
|
|
1285
1431
|
};
|
|
1286
1432
|
}
|
|
@@ -1348,6 +1494,6 @@ export {
|
|
|
1348
1494
|
serializeItemDocument,
|
|
1349
1495
|
canonicalDocument
|
|
1350
1496
|
};
|
|
1351
|
-
//# sourceMappingURL=chunk-
|
|
1497
|
+
//# sourceMappingURL=chunk-KN3URLKS.js.map
|
|
1352
1498
|
|
|
1353
|
-
//# debugId=
|
|
1499
|
+
//# debugId=89ae7463-1314-574c-9158-0967e6d9c589
|