ex-workflow 0.6.0-stage → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/CHANGELOG.md +17 -2
  2. package/README.md +12 -6
  3. package/dist/chunk-3KFQPSRX.mjs +2 -0
  4. package/dist/chunk-3KFQPSRX.mjs.map +1 -0
  5. package/dist/{chunk-MH66G5KV.cjs → chunk-5PHK72VM.cjs} +2 -2
  6. package/dist/{chunk-MH66G5KV.cjs.map → chunk-5PHK72VM.cjs.map} +1 -1
  7. package/dist/chunk-CYXVGHQM.cjs +2 -0
  8. package/dist/chunk-CYXVGHQM.cjs.map +1 -0
  9. package/dist/chunk-FKTCGQYB.cjs +2 -0
  10. package/dist/chunk-FKTCGQYB.cjs.map +1 -0
  11. package/dist/chunk-HIHMBMB5.cjs +2 -0
  12. package/dist/chunk-HIHMBMB5.cjs.map +1 -0
  13. package/dist/{chunk-KF5VQH3M.mjs → chunk-MQWMQ4PD.mjs} +2 -2
  14. package/dist/{chunk-KF5VQH3M.mjs.map → chunk-MQWMQ4PD.mjs.map} +1 -1
  15. package/dist/chunk-QDMEM62U.mjs +2 -0
  16. package/dist/chunk-QDMEM62U.mjs.map +1 -0
  17. package/dist/chunk-U3OXAO67.mjs +2 -0
  18. package/dist/chunk-U3OXAO67.mjs.map +1 -0
  19. package/dist/chunk-UZQV73X7.mjs +2 -0
  20. package/dist/chunk-UZQV73X7.mjs.map +1 -0
  21. package/dist/chunk-VXH2FAKV.cjs +2 -0
  22. package/dist/chunk-VXH2FAKV.cjs.map +1 -0
  23. package/dist/chunk-XMO2RCXB.cjs +2 -0
  24. package/dist/chunk-XMO2RCXB.cjs.map +1 -0
  25. package/dist/chunk-YBHHICTZ.mjs +2 -0
  26. package/dist/chunk-YBHHICTZ.mjs.map +1 -0
  27. package/dist/{chunk-3CLDZCHN.cjs → chunk-YJN4JEJU.cjs} +2 -2
  28. package/dist/{chunk-3CLDZCHN.cjs.map → chunk-YJN4JEJU.cjs.map} +1 -1
  29. package/dist/chunk-Z2G7DGDF.mjs +2 -0
  30. package/dist/{chunk-TEPK5Y36.mjs.map → chunk-Z2G7DGDF.mjs.map} +1 -1
  31. package/dist/cli/bin.cjs +1 -1
  32. package/dist/cli/bin.mjs +1 -1
  33. package/dist/cli/index.cjs +1 -1
  34. package/dist/cli/index.mjs +1 -1
  35. package/dist/index.cjs +1 -1
  36. package/dist/index.cjs.map +1 -1
  37. package/dist/index.d.cts +1 -1
  38. package/dist/index.d.ts +1 -1
  39. package/dist/index.mjs +1 -1
  40. package/dist/index.mjs.map +1 -1
  41. package/dist/kanban/index.cjs +1 -1
  42. package/dist/kanban/index.mjs +1 -1
  43. package/dist/scrum/index.cjs +1 -1
  44. package/dist/scrum/index.mjs +1 -1
  45. package/dist/waterfall/index.cjs +1 -1
  46. package/dist/waterfall/index.d.cts +2 -1
  47. package/dist/waterfall/index.d.ts +2 -1
  48. package/dist/waterfall/index.mjs +1 -1
  49. package/package.json +1 -1
  50. package/dist/chunk-2OVYXXNV.cjs +0 -2
  51. package/dist/chunk-2OVYXXNV.cjs.map +0 -1
  52. package/dist/chunk-7CDGPTEJ.mjs +0 -2
  53. package/dist/chunk-7CDGPTEJ.mjs.map +0 -1
  54. package/dist/chunk-GT57PLUT.mjs +0 -2
  55. package/dist/chunk-GT57PLUT.mjs.map +0 -1
  56. package/dist/chunk-IHE5K4X3.mjs +0 -2
  57. package/dist/chunk-IHE5K4X3.mjs.map +0 -1
  58. package/dist/chunk-N3QB2S7R.cjs +0 -2
  59. package/dist/chunk-N3QB2S7R.cjs.map +0 -1
  60. package/dist/chunk-NA53TZE4.mjs +0 -2
  61. package/dist/chunk-NA53TZE4.mjs.map +0 -1
  62. package/dist/chunk-TEPK5Y36.mjs +0 -2
  63. package/dist/chunk-UBFIKDIP.cjs +0 -2
  64. package/dist/chunk-UBFIKDIP.cjs.map +0 -1
  65. package/dist/chunk-UUOMQMWT.cjs +0 -2
  66. package/dist/chunk-UUOMQMWT.cjs.map +0 -1
  67. package/dist/chunk-Z3PU6EBI.mjs +0 -2
  68. package/dist/chunk-Z3PU6EBI.mjs.map +0 -1
  69. package/dist/chunk-ZTE7LREB.cjs +0 -2
  70. package/dist/chunk-ZTE7LREB.cjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/scrum/ceremonies.ts","../src/scrum/config.ts","../src/scrum/metrics.ts","../src/scrum/roles.ts","../src/scrum/rules.ts","../src/scrum/stages.ts","../src/scrum/index.ts"],"names":["STATUSES","velocityOf","state","closed","e","sum","dailyReport","it","openIteration","byStatus","s","blockers","remainingWeight","id","item","b","spent","rem","remaining","velocity","forecast","share","raisedLessons","l","lastClosedIteration","i","closedSeq","backlogOrdered","carry","items","timSort","x","cx","cy","assertCommittable","getItem","fail","assertPolicies","stageOf","attachQuestions","parentIds","iterationId","by","now","q","moveItem","patchItem","setDod","policies","configOf","st","selectAuto","budget","cfg","ids","skipped","exit","tokens","unmet","evaluatePolicies","u","est","estimateTokens","scrumCeremonies","methodology","act","type","input","reduce","applyAction","nowOf","requireCap","split","reestimateRaw","reestimate","patch","editItem","appendEvent","sp","n","addItem","goal","auto","wanted","last","carryover","w","resumed","rs","resumeStageOf","committedWeight","seen","stripItemFields","c","approvers","approverIds","feedback","done","f","closeSprint","closedAt","newLessons","roleIds","retireRaw","retire","adopt","dismiss","dod","refs","a","dupe","r","ref","adopted","agreements","backlogAdded","dodChanged","applyChange","applyAgreement","cur","p","lesson","d","text","retireAgreement","ADD_MODES","validateScrumConfig","raw","add","wip","autoClose","mode","fallback","out","ratio","num","den","scrumMetrics","corrections","late","counted","doneWeight","increments","withTokens","tokensSpent","currentSprint","weight","list","spentTokens","budgetTokens","scrumRoles","v","rule","severity","message","fix","lastClosed","policyKey","scrumRules","seq","sev","missing","canDo","next","kept","removed","describe","scrumStages","config","inProgress","SCRUM_VOCABULARY","t","toBacklog","open","reason","committed","dropped","carriedQuestions","weightOf","_c","rest","scrum","po","left","_itemId","isExhausted"],"mappings":"oMAoCA,IAAMA,GAAyB,CAC7B,MAAA,CACA,aAAA,CACA,SAAA,CACA,QAAA,CACA,gBAAA,CACA,MAAA,CACA,SACF,EAeO,SAASC,EAAAA,CAAWC,CAAAA,CAAqC,CAC9D,IAAMC,CAAAA,CAASD,CAAAA,CAAM,MAAA,CAAO,OACzBE,CAAAA,EAAMA,CAAAA,CAAE,IAAA,GAAS,eAAA,EAAoBA,CAAAA,CAAE,OAAA,CAA+B,MAAA,GAAW,QACpF,EACA,OAAID,CAAAA,CAAO,MAAA,GAAW,CAAA,CAAU,IAAA,CAE9BA,CAAAA,CAAO,MAAA,CAAO,CAACE,EAAKD,CAAAA,GAAMC,CAAAA,CAAOD,CAAAA,CAAE,OAAA,CAAmC,UAAA,CAAY,CAAC,CAAA,CACnFD,CAAAA,CAAO,MAEX,CAEO,SAASG,EAAAA,CAAYJ,CAAAA,CAAmC,CAC7D,IAAMK,CAAAA,CAAKC,mBAAAA,CAAcN,CAAK,CAAA,CACxBO,CAAAA,CAAW,MAAA,CAAO,WAAA,CAAYT,EAAAA,CAAS,GAAA,CAAKU,CAAAA,EAAM,CAACA,EAAG,CAAC,CAAC,CAAC,CAAA,CACzDC,CAAAA,CAAoC,EAAC,CACvCC,CAAAA,CAAkB,EACtB,IAAA,IAAWC,CAAAA,IAAMN,CAAAA,EAAI,SAAA,EAAa,EAAC,CAAG,CACpC,IAAMO,EAAOZ,CAAAA,CAAM,KAAA,CAAMW,CAAE,CAAA,CAC3B,GAAKC,CAAAA,CACL,CAAAL,CAAAA,CAASK,EAAK,MAAM,CAAA,EAAK,CAAA,CACrBA,CAAAA,CAAK,MAAA,GAAW,MAAA,GAAQF,CAAAA,EAAmBE,CAAAA,CAAK,QAAU,CAAA,CAAA,CAC9D,IAAA,IAAWC,CAAAA,IAAKD,CAAAA,CAAK,QAAA,CACdC,CAAAA,CAAE,SAAA,EACLJ,CAAAA,CAAS,KAAK,CAAE,IAAA,CAAME,CAAAA,CAAI,OAAA,CAASE,CAAAA,CAAE,EAAA,CAAI,KAAA,CAAOA,CAAAA,CAAE,MAAO,MAAA,CAAQA,CAAAA,CAAE,MAAO,CAAC,EAAA,CACjF,CACA,IAAMC,CAAAA,CAAQT,GAAI,KAAA,EAAS,CAAE,MAAA,CAAQ,CAAA,CAAG,KAAA,CAAO,CAAA,CAAG,WAAA,CAAa,CAAE,EAC3DU,CAAAA,CAAMV,CAAAA,CAAKW,mBAAAA,CAAUX,CAAAA,CAAG,MAAA,CAAQA,CAAAA,CAAG,KAAK,CAAA,CAAI,EAAC,CAC7CY,CAAAA,CAAWlB,EAAAA,CAAWC,CAAK,CAAA,CAC7BkB,CAAAA,CAAoC,SAAA,CACxC,GAAIb,GAAMY,CAAAA,GAAa,IAAA,EAAQZ,CAAAA,CAAG,MAAA,CAAO,MAAA,CAAQ,CAC/C,IAAMc,CAAAA,CAAAA,CAASJ,EAAI,MAAA,EAAU,CAAA,EAAKV,CAAAA,CAAG,MAAA,CAAO,MAAA,CAC5Ca,CAAAA,CAAWR,CAAAA,EAAmBO,CAAAA,CAAWE,EAAQ,UAAA,CAAa,UAChE,CACA,IAAMC,CAAAA,CAAgBpB,CAAAA,CAAM,OAAA,CAAQ,MAAA,CAAQqB,GAAMA,CAAAA,CAAE,MAAA,GAAW,QAAQ,CAAA,CAAE,MAAA,CACzE,OAAO,CACL,MAAA,CAAQhB,GAAI,EAAA,EAAM,IAAA,CAClB,IAAA,CAAMA,CAAAA,EAAI,IAAA,EAAQ,IAAA,CAClB,QAAA,CAAAE,CAAAA,CACA,SAAAE,CAAAA,CACA,KAAA,CAAAK,CAAAA,CACA,SAAA,CAAWC,CAAAA,CACX,eAAA,CAAAL,CAAAA,CACA,aAAA,CAAAU,EACA,QAAA,CAAAH,CAAAA,CACA,QAAA,CAAAC,CACF,CACF,CAEA,SAASI,CAAAA,CAAoBtB,EAA6C,CACxE,IAAA,IAASuB,CAAAA,CAAIvB,CAAAA,CAAM,UAAA,CAAW,MAAA,CAAS,CAAA,CAAGuB,CAAAA,EAAK,EAAGA,CAAAA,EAAAA,CAAK,CACrD,IAAMlB,CAAAA,CAAKL,CAAAA,CAAM,UAAA,CAAWuB,CAAC,CAAA,CAC7B,GAAIlB,CAAAA,CAAG,OAAA,GAAY,MAAA,CAAW,OAAOA,CACvC,CAEF,CAGO,SAASmB,EAAUxB,CAAAA,CAAsBW,CAAAA,CAAoB,CAClE,OACEX,CAAAA,CAAM,MAAA,CAAO,IAAA,CAAME,CAAAA,EAAMA,EAAE,IAAA,GAAS,eAAA,EAAoBA,CAAAA,CAAE,OAAA,CAA2B,EAAA,GAAOS,CAAE,CAAA,EAC1F,GAAA,EAAO,OAAO,iBAEtB,CAEA,SAASc,EAAAA,CAAezB,CAAAA,CAAkC,CACxD,IAAM0B,CAAAA,CAAQ,IAAI,GAAA,CAAIJ,CAAAA,CAAoBtB,CAAK,CAAA,EAAG,SAAA,EAAa,EAAE,CAAA,CAC3D2B,EAAQ,MAAA,CAAO,MAAA,CAAO3B,CAAAA,CAAM,KAAK,CAAA,CAAE,MAAA,CACtCuB,CAAAA,EAAMA,CAAAA,CAAE,QAAU,SAAA,EAAaA,CAAAA,CAAE,MAAA,GAAW,MAAA,EAAUA,CAAAA,CAAE,IAAA,GAAS,UACpE,CAAA,CACA,OAAOK,gBAAAA,CAAQ,CAAC,GAAGD,CAAK,CAAA,CAAG,CAACE,CAAAA,CAAG,CAAA,GAAM,CACnC,IAAMC,CAAAA,CAAKJ,CAAAA,CAAM,GAAA,CAAIG,CAAAA,CAAE,EAAE,CAAA,CAAI,CAAA,CAAI,EAC3BE,CAAAA,CAAKL,CAAAA,CAAM,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA,CAAI,CAAA,CAAI,CAAA,CACjC,OAAII,CAAAA,GAAOC,CAAAA,CAAWA,CAAAA,CAAKD,CAAAA,CAAAA,CACnB,CAAA,CAAE,QAAA,EAAY,CAAA,GAAMD,CAAAA,CAAE,UAAY,CAAA,CAC5C,CAAC,CACH,CAGA,SAASG,EAAAA,CAAkBhC,CAAAA,CAAsBW,CAAAA,CAAkB,CACjE,IAAMC,CAAAA,CAAOqB,mBAAAA,CAAQjC,CAAAA,CAAOW,CAAE,CAAA,CAAA,CAC1BC,CAAAA,CAAK,KAAA,GAAU,WAAaA,CAAAA,CAAK,MAAA,GAAW,MAAA,GAC9CsB,mBAAAA,CACE,eAAA,CACA,CAAA,MAAA,EAASvB,CAAE,CAAA,iCAAA,EAAoCC,EAAK,KAAK,CAAA,CAAA,EAAIA,CAAAA,CAAK,MAAM,CAAA,CAAA,CAAA,CACxE,qCAAA,CACA,CAAE,KAAA,CAAO,CAACD,CAAE,CAAE,CAChB,CAAA,CACFwB,mBAAAA,CAAenC,CAAAA,CAAOY,CAAAA,CAAMwB,mBAAAA,CAAQpC,EAAO,SAAS,CAAA,CAAE,UAAA,CAAY,0BAA0B,EAC9F,CAGA,SAASqC,EAAAA,CACPrC,EACAsC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACe,CACf,IAAIjC,CAAAA,CAAIR,CAAAA,CACR,QAAW0C,CAAAA,IAAK,MAAA,CAAO,MAAA,CAAO1C,CAAAA,CAAM,KAAK,CAAA,CAErC0C,CAAAA,CAAE,IAAA,GAAS,YACXA,CAAAA,CAAE,MAAA,GAAW,MAAA,EACb,CAACJ,CAAAA,CAAU,QAAA,CAASI,CAAAA,CAAE,MAAM,GAC5BA,CAAAA,CAAE,MAAA,GAAW,MAAA,EACbA,CAAAA,CAAE,MAAA,GAAW,SAAA,GAAA,CAGXA,CAAAA,CAAE,KAAA,GAAU,UAAYA,CAAAA,CAAE,MAAA,GAAW,MAAA,IACvClC,CAAAA,CAAImC,mBAAAA,CAASnC,CAAAA,CAAGkC,CAAAA,CAAE,EAAA,CAAI,CAAE,KAAA,CAAO,QAAA,CAAU,MAAA,CAAQ,MAAO,CAAA,CAAGF,CAAAA,CAAIC,CAAG,CAAA,CAAA,CACpEjC,EAAIoC,mBAAAA,CAAUpC,CAAAA,CAAGkC,CAAAA,CAAE,EAAA,CAAKrC,CAAAA,GAAQ,CAAE,GAAGA,CAAAA,CAAI,UAAWkC,CAAY,CAAA,CAAE,CAAA,CAAA,CAEpE,OAAO/B,CACT,CAGO,SAASqC,CAAAA,CAAO7C,EAAsB8C,CAAAA,CAAmC,CAC9E,OAAO,CACL,GAAG9C,CAAAA,CACH,MAAA,CAAQ,CAAE,GAAG+C,CAAAA,CAAS/C,CAAK,CAAA,CAAG,gBAAA,CAAkB8C,CAAS,CAAA,CACzD,MAAA,CAAQ9C,CAAAA,CAAM,OAAO,GAAA,CAAKgD,CAAAA,EAAQA,CAAAA,CAAG,EAAA,GAAO,QAAA,CAAW,CAAE,GAAGA,CAAAA,CAAI,WAAYF,CAAS,CAAA,CAAIE,CAAG,CAC9F,CACF,CAQA,SAASC,EAAAA,CAAWjD,EAAsBkD,CAAAA,CAAuD,CAC/F,IAAMC,CAAAA,CAAMJ,CAAAA,CAAS/C,CAAK,CAAA,CACpBoD,CAAAA,CAAgB,EAAC,CACjBC,CAAAA,CAAqB,EAAC,CACtBC,CAAAA,CAAOlB,mBAAAA,CAAQpC,CAAAA,CAAO,SAAS,EAAE,UAAA,CACnCuD,CAAAA,CAAS,CAAA,CACb,IAAA,IAAW3C,CAAAA,IAAQa,EAAAA,CAAezB,CAAK,CAAA,CAAG,CACxC,IAAMwD,CAAAA,CAAQC,mBAAAA,CAAiBzD,CAAAA,CAAOY,CAAAA,CAAM0C,CAAI,CAAA,CAChD,GAAIE,EAAM,MAAA,CAAS,CAAA,CAAG,CACpBH,CAAAA,CAAQ,IAAA,CAAK,CACX,EAAA,CAAIzC,CAAAA,CAAK,GACT,MAAA,CAAQ,QAAA,CACR,MAAA,CAAQ4C,CAAAA,CAAM,GAAA,CAAKE,CAAAA,EAAMA,CAAAA,CAAE,OAAO,EAAE,IAAA,CAAK,IAAI,CAC/C,CAAC,CAAA,CACD,QACF,CACA,GAAIR,EAAO,KAAA,GAAU,MAAA,EAAaE,CAAAA,CAAI,MAAA,EAAUF,EAAO,KAAA,CAAO,CAC5DG,CAAAA,CAAQ,IAAA,CAAK,CAAE,EAAA,CAAIzC,CAAAA,CAAK,EAAA,CAAI,MAAA,CAAQ,QAAA,CAAU,MAAA,CAAQ,mBAAoB,CAAC,EAC3E,QACF,CACA,GAAIsC,CAAAA,CAAO,MAAA,GAAW,MAAA,CAAW,CAC/B,IAAMS,EAAMC,mBAAAA,CAAe5D,CAAAA,CAAOY,CAAAA,CAAK,MAAA,CAAQuC,CAAAA,CAAI,uBAAA,CAAyBA,CAAAA,CAAI,YAAY,EAC5F,GAAII,CAAAA,CAASI,CAAAA,CAAMT,CAAAA,CAAO,MAAA,CAAQ,CAChCG,CAAAA,CAAQ,IAAA,CAAK,CACX,EAAA,CAAIzC,CAAAA,CAAK,EAAA,CACT,MAAA,CAAQ,QAAA,CACR,MAAA,CAAQ,CAAA,YAAA,EAAe+C,CAAG,YAAYT,CAAAA,CAAO,MAAA,CAASK,CAAM,CAAA,KAAA,CAC9D,CAAC,CAAA,CACD,QACF,CACAA,GAAUI,EACZ,CACAP,CAAAA,CAAI,IAAA,CAAKxC,CAAAA,CAAK,EAAE,EAClB,CACA,OAAO,CAAE,GAAA,CAAAwC,CAAAA,CAAK,OAAA,CAAAC,CAAQ,CACxB,CAEO,SAASQ,EAAgBC,CAAAA,CAA0D,CACxF,IAAMC,CAAAA,CAAM,CACV/D,CAAAA,CACAgE,CAAAA,CACAC,CAAAA,CACAC,IAEAC,mBAAAA,CAAYnE,CAAAA,CAAO8D,CAAAA,EAAY,CAAG,CAAE,IAAA,CAAAE,CAAAA,CAAM,EAAA,CAAIC,EAAM,EAAA,CAAI,OAAA,CAASA,CAAM,CAAA,CAAIzD,CAAAA,EACzE0D,CAAAA,CAAO1D,CAAAA,CAAG4D,mBAAAA,CAAMH,EAAM,GAAG,CAAC,CAC5B,CAAA,CAycF,OAAO,CAAE,MAAA,CAvcgB,CAACjE,EAAOiE,CAAAA,GAAU,CACzCI,mBAAAA,CAAWrE,CAAAA,CAAOiE,CAAAA,CAAM,EAAA,CAAI,mBAAA,CAAqB,SAAS,EAC1D,IAAMtC,CAAAA,CAASsC,CAAAA,CAAM,KAAA,EAAY,EAAC,CAC5BK,CAAAA,CAASL,CAAAA,CAAM,OAAY,EAAC,CAC5BM,CAAAA,CAAyBN,CAAAA,CAAM,UAAA,EAAiB,EAAC,CAAA,CACnD,CAAC,MAAM,OAAA,CAAQM,CAAa,CAAA,EAAK,CAACA,CAAAA,CAAc,KAAA,CAAO1C,CAAAA,EAAM,OAAOA,GAAM,QAAQ,CAAA,GACpFK,mBAAAA,CACE,eAAA,CACA,8CAAA,CACA,wBACF,CAAA,CACF,IAAMsC,EAAaD,CAAAA,CACf5C,CAAAA,CAAM,MAAA,GAAW,CAAA,EAAK2C,CAAAA,CAAM,MAAA,GAAW,CAAA,EAAKE,CAAAA,CAAW,SAAW,CAAA,EACpEtC,mBAAAA,CACE,eAAA,CACA,+CAAA,CACA,8CACF,CAAA,CACF,IAAA,IAAWvB,CAAAA,IAAM6D,EAAY,CAC3B,IAAMnE,CAAAA,CAAK4B,mBAAAA,CAAQjC,CAAAA,CAAOW,CAAE,CAAA,CAAA,CACxBN,CAAAA,CAAG,QAAU,SAAA,EAAaA,CAAAA,CAAG,MAAA,GAAW,MAAA,EAAUA,CAAAA,CAAG,MAAA,GAAW,MAAA,GAClE6B,mBAAAA,CACE,gBACA,CAAA,MAAA,EAASvB,CAAE,CAAA,iDAAA,CAAA,CACX,2CAAA,CACA,CAAE,KAAA,CAAO,CAACA,CAAE,CAAE,CAChB,EACJ,CACA,OAAOoD,CAAAA,CAAI/D,CAAAA,CAAO,iBAAA,CAAmBiE,CAAAA,CAAO,CAACzD,CAAAA,CAAGiC,CAAAA,GAAQ,CACtD,IAAA,GAAW,CAAE,EAAA,CAAA9B,CAAAA,CAAI,KAAA,CAAA8D,CAAM,CAAA,GAAK9C,CAAAA,CAAOnB,CAAAA,CAAIkE,mBAAAA,CAASlE,CAAAA,CAAGG,CAAAA,CAAI8D,CAAAA,CAAOR,CAAAA,CAAM,GAAIxB,CAAG,CAAA,CAC3E,IAAA,IAAW9B,CAAAA,IAAM6D,CAAAA,CACfhE,CAAAA,CAAImE,mBAAAA,CACFnE,CAAAA,CACA,mBACAyD,CAAAA,CAAM,EAAA,CACN,CAAE,EAAA,CAAAtD,CAAAA,CAAI,MAAA,CAAQsB,mBAAAA,CAAQzB,CAAAA,CAAGG,CAAE,CAAA,CAAE,MAAO,CAAA,CACpC8B,CACF,CAAA,CACF,IAAA,IAAWmC,CAAAA,IAAMN,CAAAA,CAAO,CACtBrC,mBAAAA,CAAQzB,CAAAA,CAAGoE,CAAAA,CAAG,IAAI,CAAA,CAClB,IAAA,IAAWC,CAAAA,IAAKD,CAAAA,CAAG,KAAMpE,CAAAA,CAAIsE,mBAAAA,CAAQtE,CAAAA,CAAG,CAAE,GAAGqE,CAAAA,CAAG,MAAA,CAAQD,CAAAA,CAAG,IAAK,CAAA,CAAGX,CAAAA,CAAM,EAAA,CAAIxB,CAAG,CAAA,CAChFjC,CAAAA,CAAImC,mBAAAA,CAASnC,CAAAA,CAAGoE,EAAG,IAAA,CAAM,CAAE,MAAA,CAAQ,SAAU,EAAGX,CAAAA,CAAM,EAAA,CAAIxB,CAAG,EAC/D,CACA,OAAOkC,mBAAAA,CACLnE,CAAAA,CACA,iBAAA,CACAyD,CAAAA,CAAM,EAAA,CACN,CACE,MAAA,CAAQtC,EAAM,GAAA,CAAKJ,CAAAA,EAAMA,CAAAA,CAAE,EAAE,CAAA,CAC7B,KAAA,CAAO+C,CAAAA,CAAM,GAAA,CAAKzC,IAAO,CAAE,IAAA,CAAMA,CAAAA,CAAE,IAAA,CAAM,IAAA,CAAMA,CAAAA,CAAE,IAAA,CAAK,GAAA,CAAKgD,GAAMA,CAAAA,CAAE,EAAE,CAAE,CAAA,CAAE,CAAA,CACzE,WAAA,CAAaL,CACf,CAAA,CACA/B,CACF,CACF,CAAC,CACH,CAAA,CAgZiB,IAAA,CA9YM,CAACzC,CAAAA,CAAOiE,CAAAA,GAAU,CACvCI,mBAAAA,CAAWrE,CAAAA,CAAOiE,CAAAA,CAAM,EAAA,CAAI,YAAY,CAAA,CACxC,IAAMc,CAAAA,CAAOd,EAAM,IAAA,CAAA,CACf,OAAOc,CAAAA,EAAS,QAAA,EAAYA,CAAAA,CAAK,IAAA,EAAK,GAAM,EAAA,GAC9C7C,oBACE,eAAA,CACA,wCAAA,CACA,uCACF,CAAA,CACF,IAAMiB,CAAAA,CAAMJ,CAAAA,CAAS/C,CAAK,EACpBkD,CAAAA,CAAUe,CAAAA,CAAM,MAAA,EAAoCd,CAAAA,CAAI,YAAA,CACxD6B,CAAAA,CAAOf,CAAAA,CAAM,KAAA,GAAa,OAAShB,EAAAA,CAAWjD,CAAAA,CAAOkD,CAAM,CAAA,CAAI,MAAA,CAC/DG,CAAAA,CAAU2B,CAAAA,EAAM,OAAA,EAAW,EAAC,CAC5BC,CAAAA,CAASD,CAAAA,CAAOA,CAAAA,CAAK,GAAA,CAAOf,CAAAA,CAAM,KAAA,CACnC,KAAA,CAAM,QAAQgB,CAAM,CAAA,EACvB/C,mBAAAA,CACE,eAAA,CACA,iDAAA,CACA,0BACF,CAAA,CACE+C,CAAAA,CAAO,SAAW,CAAA,EACpB/C,mBAAAA,CACE,eAAA,CACA,CAAA,+BAAA,EACEmB,CAAAA,CAAQ,MAAA,CACJ,CAAA,WAAA,EAAcA,CAAAA,CAAQ,IAAKxB,CAAAA,EAAM,CAAA,EAAGA,CAAAA,CAAE,EAAE,CAAA,EAAA,EAAKA,CAAAA,CAAE,MAAM,CAAA,EAAA,EAAKA,EAAE,MAAM,CAAA,CAAA,CAAG,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CACjF,EACN,GACA,sFACF,CAAA,CACF,IAAA,IAAWlB,CAAAA,IAAMsE,CAAAA,CAAQjD,EAAAA,CAAkBhC,CAAAA,CAAOW,CAAE,EACpD,OAAOoD,CAAAA,CAAI/D,CAAAA,CAAO,eAAA,CAAiBiE,CAAAA,CAAO,CAACzD,CAAAA,CAAGiC,CAAAA,GAAQ,CACpD,IAAM9B,CAAAA,CAAK,CAAA,CAAA,EAAIH,CAAAA,CAAE,UAAA,CAAW,MAAA,CAAS,CAAC,CAAA,CAAA,CAChC0E,EAAO5D,CAAAA,CAAoBd,CAAC,CAAA,CAC5B2E,CAAAA,CAAYF,CAAAA,CAAO,MAAA,CAAQG,CAAAA,EAAMF,CAAAA,EAAM,UAAU,QAAA,CAASE,CAAC,CAAC,CAAA,CAC5DC,CAAAA,CAAoB,EAAC,CAC3B,IAAA,IAAWD,KAAKH,CAAAA,CAAQ,CACtB,IAAMK,CAAAA,CAAKC,CAAAA,CAActD,mBAAAA,CAAQzB,CAAAA,CAAG4E,CAAC,EAAG5E,CAAC,CAAA,CACrC8E,CAAAA,EAAID,CAAAA,CAAQ,IAAA,CAAKD,CAAC,CAAA,CACtB5E,CAAAA,CAAImC,oBACFnC,CAAAA,CACA4E,CAAAA,CACAE,CAAAA,CAAK,CAAE,KAAA,CAAOA,CAAAA,CAAI,MAAA,CAAQ,QAAS,EAAI,CAAE,KAAA,CAAO,QAAA,CAAU,MAAA,CAAQ,MAAO,CAAA,CACzErB,CAAAA,CAAM,EAAA,CACNxB,CACF,CAAA,CACAjC,CAAAA,CAAIoC,mBAAAA,CAAUpC,CAAAA,CAAG4E,CAAAA,CAAI/E,CAAAA,GAAQ,CAAE,GAAGA,EAAI,SAAA,CAAWM,CAAG,CAAA,CAAE,EACxD,CACAH,CAAAA,CAAI6B,EAAAA,CAAgB7B,CAAAA,CAAGyE,EAAQtE,CAAAA,CAAIsD,CAAAA,CAAM,EAAA,CAAIxB,CAAG,CAAA,CAChD,IAAM+C,CAAAA,CAAkBP,CAAAA,CAAO,OAAO,CAAC9E,CAAAA,CAAKiF,CAAAA,GAAMjF,CAAAA,EAAOK,CAAAA,CAAE,KAAA,CAAM4E,CAAC,CAAA,EAAG,QAAU,CAAA,CAAA,CAAI,CAAC,CAAA,CACpF,OAAA5E,CAAAA,CAAI,CACF,GAAGA,CAAAA,CACH,WAAY,CACV,GAAGA,CAAAA,CAAE,UAAA,CACL,CACE,EAAA,CAAAG,CAAAA,CACA,IAAA,CAAAoE,EACA,MAAA,CAAA7B,CAAAA,CACA,KAAA,CAAO,CAAE,MAAA,CAAQ,CAAA,CAAG,KAAA,CAAO,CAAA,CAAG,YAAa,CAAE,CAAA,CAC7C,SAAA,CAAWT,CAAAA,CACX,UAAW,CAAC,GAAGwC,CAAM,CAAA,CACrB,UAAAE,CACF,CACF,CACF,CAAA,CACOR,mBAAAA,CACLnE,CAAAA,CACA,eAAA,CACAyD,CAAAA,CAAM,GACN,CAAE,EAAA,CAAAtD,CAAAA,CAAI,IAAA,CAAAoE,CAAAA,CAAM,SAAA,CAAWE,CAAAA,CAAQ,eAAA,CAAAO,EAAiB,MAAA,CAAAtC,CAAAA,CAAQ,OAAA,CAAAG,CAAAA,CAAS,OAAA,CAAAgC,CAAQ,CAAA,CACzE5C,CACF,CACF,CAAC,CACH,CAAA,CAqUuB,MAAA,CAnUE,CAACzC,CAAAA,CAAOiE,CAAAA,GAAU,CACzC,IAAM5D,CAAAA,CAAKC,mBAAAA,CAAcN,CAAK,CAAA,CACzBK,CAAAA,EAAI6B,mBAAAA,CAAK,eAAA,CAAiB,+BAAA,CAAiC,6BAA6B,CAAA,CAC7F,IAAMP,CAAAA,CAAQsC,CAAAA,CAAM,KAAA,CAAA,CAChB,CAAC,KAAA,CAAM,OAAA,CAAQtC,CAAK,CAAA,EAAKA,CAAAA,CAAM,MAAA,GAAW,CAAA,GAC5CO,mBAAAA,CAAK,eAAA,CAAiB,sBAAA,CAAwB,YAAY,EAC5D,IAAMuD,CAAAA,CAAO,IAAI,GAAA,CACjB,IAAA,IAAW9E,CAAAA,IAAMgB,CAAAA,CACX8D,CAAAA,CAAK,IAAI9E,CAAE,CAAA,EACbuB,mBAAAA,CAAK,eAAA,CAAiB,CAAA,MAAA,EAASvB,CAAE,CAAA,0BAAA,CAAA,CAA8B,qBAAA,CAAuB,CACpF,KAAA,CAAO,CAACA,CAAE,CACZ,CAAC,CAAA,CACH8E,CAAAA,CAAK,GAAA,CAAI9E,CAAE,CAAA,CACXsB,mBAAAA,CAAQjC,CAAAA,CAAOW,CAAE,CAAA,CACbN,CAAAA,CAAG,SAAA,CAAU,QAAA,CAASM,CAAE,CAAA,EAC1BuB,mBAAAA,CAAK,eAAA,CAAiB,CAAA,MAAA,EAASvB,CAAE,CAAA,0BAAA,EAA6BN,CAAAA,CAAG,EAAE,GAAI,eAAA,CAAiB,CACtF,KAAA,CAAO,CAACM,CAAE,CACZ,CAAC,CAAA,CACHqB,GAAkBhC,CAAAA,CAAOW,CAAE,CAAA,CAE7B,OAAOoD,CAAAA,CAAI/D,CAAAA,CAAO,iBAAA,CAAmBiE,CAAAA,CAAO,CAACzD,CAAAA,CAAGiC,CAAAA,GAAQ,CACtD,IAAM4C,CAAAA,CAAoB,EAAC,CAC3B,IAAA,IAAW1E,KAAMgB,CAAAA,CAAO,CACtB,IAAM2D,CAAAA,CAAKC,CAAAA,CAActD,mBAAAA,CAAQzB,CAAAA,CAAGG,CAAE,EAAGH,CAAC,CAAA,CACtC8E,CAAAA,EAAID,CAAAA,CAAQ,IAAA,CAAK1E,CAAE,CAAA,CACvBH,CAAAA,CAAImC,oBACFnC,CAAAA,CACAG,CAAAA,CACA2E,CAAAA,CAAK,CAAE,KAAA,CAAOA,CAAAA,CAAI,MAAA,CAAQ,QAAS,EAAI,CAAE,KAAA,CAAO,QAAA,CAAU,MAAA,CAAQ,MAAO,CAAA,CACzErB,CAAAA,CAAM,EAAA,CACNxB,CACF,CAAA,CACAjC,CAAAA,CAAIoC,mBAAAA,CAAUpC,CAAAA,CAAGG,CAAAA,CAAKkB,CAAAA,GAAO,CAAE,GAAGA,EAAG,SAAA,CAAWxB,CAAAA,CAAG,EAAG,CAAA,CAAE,EAC1D,CACA,OAAAG,CAAAA,CAAI6B,GAAgB7B,CAAAA,CAAGmB,CAAAA,CAAOtB,CAAAA,CAAG,EAAA,CAAI4D,CAAAA,CAAM,EAAA,CAAIxB,CAAG,CAAA,CAClDjC,EAAI,CACF,GAAGA,CAAAA,CACH,UAAA,CAAYA,CAAAA,CAAE,UAAA,CAAW,GAAA,CAAKqB,CAAAA,EAC5BA,EAAE,EAAA,GAAOxB,CAAAA,CAAG,EAAA,CAAK,CAAE,GAAGwB,CAAAA,CAAG,SAAA,CAAW,CAAC,GAAGA,CAAAA,CAAE,SAAA,CAAW,GAAGF,CAAK,CAAE,CAAA,CAAIE,CACrE,CACF,EACO8C,mBAAAA,CACLnE,CAAAA,CACA,kBAAA,CACAyD,CAAAA,CAAM,EAAA,CACN,CAAE,EAAA,CAAI5D,CAAAA,CAAG,GAAI,KAAA,CAAAsB,CAAAA,CAAO,UAAA,CAAYsC,CAAAA,CAAM,UAAA,EAAiB,IAAA,CAAM,OAAA,CAAAoB,CAAQ,EACrE5C,CACF,CACF,CAAC,CACH,CAAA,CAkR+B,QAAA,CAhRJ,CAACzC,CAAAA,CAAOiE,IAAU,CAC3CI,mBAAAA,CAAWrE,CAAAA,CAAOiE,CAAAA,CAAM,EAAA,CAAI,eAAe,CAAA,CAC3C,IAAM5D,EAAKC,mBAAAA,CAAcN,CAAK,CAAA,CACzBK,CAAAA,EAAI6B,mBAAAA,CAAK,eAAA,CAAiB,gBAAA,CAAkB,0BAA0B,EAC3E,IAAMP,CAAAA,CAAQsC,CAAAA,CAAM,KAAA,CAAA,CAChB,CAAC,KAAA,CAAM,OAAA,CAAQtC,CAAK,GAAKA,CAAAA,CAAM,MAAA,GAAW,CAAA,GAC5CO,mBAAAA,CAAK,gBAAiB,wBAAA,CAA0B,YAAY,CAAA,CAC9D,IAAA,IAAWvB,KAAMgB,CAAAA,CACXM,mBAAAA,CAAQjC,CAAAA,CAAOW,CAAE,CAAA,CAAE,MAAA,GAAW,MAAA,EAChCuB,mBAAAA,CAAK,gBAAiB,CAAA,MAAA,EAASvB,CAAE,CAAA,SAAA,CAAA,CAAa,qCAAA,CAAuC,CACnF,KAAA,CAAO,CAACA,CAAE,CACZ,CAAC,CAAA,CAEL,IAAA,IAAWA,CAAAA,IAAMgB,CAAAA,CACVtB,CAAAA,CAAG,SAAA,CAAU,QAAA,CAASM,CAAE,CAAA,EAC3BuB,mBAAAA,CACE,eAAA,CACA,CAAA,MAAA,EAASvB,CAAE,CAAA,sBAAA,EAAyBN,CAAAA,CAAG,EAAE,GACzC,CAAA,WAAA,EAAcA,CAAAA,CAAG,SAAA,CAAU,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CACrC,CAAE,MAAO,CAACM,CAAE,CAAE,CAChB,CAAA,CACJ,OAAOoD,CAAAA,CAAI/D,CAAAA,CAAO,oBAAqBiE,CAAAA,CAAO,CAACzD,CAAAA,CAAGiC,CAAAA,GAAQ,CACxD,IAAA,IAAW9B,CAAAA,IAAMgB,CAAAA,CACfnB,EAAImC,mBAAAA,CAASnC,CAAAA,CAAGG,CAAAA,CAAI,CAAE,KAAA,CAAO,SAAA,CAAW,MAAA,CAAQ,MAAO,EAAGsD,CAAAA,CAAM,EAAA,CAAIxB,CAAG,CAAA,CACvEjC,CAAAA,CAAIkF,mBAAAA,CAAgBlF,CAAAA,CAAGG,CAAAA,CAAI,CAAC,WAAA,CAAa,MAAM,CAAC,CAAA,CAElD,OAAAH,CAAAA,CAAI,CACF,GAAGA,EACH,UAAA,CAAYA,CAAAA,CAAE,UAAA,CAAW,GAAA,CAAKqB,CAAAA,EAC5BA,CAAAA,CAAE,EAAA,GAAOxB,CAAAA,CAAG,GAAK,CAAE,GAAGwB,CAAAA,CAAG,SAAA,CAAWA,CAAAA,CAAE,SAAA,CAAU,MAAA,CAAQ8D,CAAAA,EAAM,CAAChE,CAAAA,CAAM,QAAA,CAASgE,CAAC,CAAC,CAAE,CAAA,CAAI9D,CACxF,CACF,EACO8C,mBAAAA,CACLnE,CAAAA,CACA,oBAAA,CACAyD,CAAAA,CAAM,EAAA,CACN,CAAE,EAAA,CAAI5D,CAAAA,CAAG,GAAI,KAAA,CAAAsB,CAAAA,CAAO,MAAA,CAAQsC,CAAAA,CAAM,MAAA,EAAa,EAAG,CAAA,CAClDxB,CACF,CACF,CAAC,CACH,CAAA,CAwOyC,KAAA,CAtOjB,CAACzC,CAAAA,CAAOiE,CAAAA,GAC9BF,CAAAA,CAAI/D,EAAO,gBAAA,CAAkBiE,CAAAA,CAAO,CAAC,CAAA,CAAGxB,CAAAA,GACtCkC,mBAAAA,CAAY,CAAA,CAAG,OAAA,CAASV,EAAM,EAAA,CAAI7D,EAAAA,CAAY,CAAC,CAAA,CAAGqC,CAAG,CACvD,CAAA,CAmO8C,MAAA,CAjOvB,CAACzC,CAAAA,CAAOiE,CAAAA,GAAU,CACzC,IAAM5D,CAAAA,CAAKC,mBAAAA,CAAcN,CAAK,CAAA,CACzBK,GAAI6B,mBAAAA,CAAK,eAAA,CAAiB,0BAAA,CAA4B,6BAA6B,CAAA,CACxF,IAAM0D,CAAAA,CAAYC,mBAAAA,CAAY7F,EAAO,eAAe,CAAA,CAChDiE,CAAAA,CAAM,EAAA,GAAO,OAAA,EAAW,CAAC2B,CAAAA,CAAU,QAAA,CAAS3B,EAAM,EAAE,CAAA,EACtD/B,mBAAAA,CACE,YAAA,CACA,CAAA,CAAA,EAAI+B,CAAAA,CAAM,EAAE,CAAA,kCAAA,CAAA,CACZ,+BAA+B2B,CAAAA,CAAU,IAAA,CAAK,IAAI,CAAA,EAAK,sCAAsC,CAAA,CAAA,CAC7F,CAAE,IAAA,CAAM,eAAgB,CAC1B,CAAA,CAEF,IAAME,CAAAA,CAAY7B,CAAAA,CAAM,QAAA,EAAe,EAAC,CACxC,OAAOF,CAAAA,CAAI/D,CAAAA,CAAO,iBAAA,CAAmBiE,CAAAA,CAAO,CAACzD,CAAAA,CAAGiC,CAAAA,GAAQ,CACtD,QAAWoC,CAAAA,IAAKiB,CAAAA,CAAUtF,CAAAA,CAAIsE,mBAAAA,CAAQtE,CAAAA,CAAG,CAAE,GAAGqE,CAAAA,CAAG,MAAO,SAAU,CAAA,CAAGZ,CAAAA,CAAM,EAAA,CAAIxB,CAAG,CAAA,CAClF,IAAMsD,CAAAA,CAAO1F,EAAG,SAAA,CAAU,MAAA,CAAQM,CAAAA,EAAOH,CAAAA,CAAE,KAAA,CAAMG,CAAE,CAAA,EAAG,MAAA,GAAW,MAAM,CAAA,CACvE,OAAAH,CAAAA,CAAImE,mBAAAA,CACFnE,CAAAA,CACA,WAAA,CACAyD,CAAAA,CAAM,EAAA,CACN,CACE,MAAA,CAAQ5D,CAAAA,CAAG,EAAA,CACX,IAAA,CAAA0F,CAAAA,CACA,OAAA,CAAS9B,CAAAA,CAAM,OAAA,GAAe,KAC9B,QAAA,CAAUA,CAAAA,CAAM,QAAA,GAAgB,IAAA,CAChC,QAAA,CAAU6B,CAAAA,CAAS,GAAA,CAAKE,CAAAA,EAAMA,EAAE,EAAE,CACpC,CAAA,CACAvD,CACF,EACOwD,CAAAA,CAAYzF,CAAAA,CAAG,QAAA,CAAUiC,CAAG,CACrC,CAAC,CACH,CAAA,CAkMwD,KAAA,CAhMhC,CAACzC,CAAAA,CAAOiE,CAAAA,GAAU,CACxCI,oBAAWrE,CAAAA,CAAOiE,CAAAA,CAAM,EAAA,CAAI,YAAY,CAAA,CACxC,IAAMiB,CAAAA,CAAO5D,CAAAA,CAAoBtB,CAAK,CAAA,CACjCkF,CAAAA,EACHhD,mBAAAA,CACE,eAAA,CACA,gCAAA,CACA,2CACF,CAAA,CACE5B,mBAAAA,CAAcN,CAAK,CAAA,EACrBkC,mBAAAA,CACE,eAAA,CACA,wBAAA,CACA,2DACF,CAAA,CACF,IAAMgE,CAAAA,CAAW1E,EAAUxB,CAAAA,CAAOkF,CAAAA,CAAK,EAAE,CAAA,CACrClF,CAAAA,CAAM,MAAA,CAAO,IAAA,CAAME,CAAAA,EAAMA,EAAE,IAAA,GAAS,OAAA,EAAWA,CAAAA,CAAE,GAAA,CAAMgG,CAAQ,CAAA,EACjEhE,mBAAAA,CACE,eAAA,CACA,UAAUgD,CAAAA,CAAK,EAAE,CAAA,4BAAA,CAAA,CACjB,sBACF,CAAA,CACF,IAAMiB,CAAAA,CAAclC,CAAAA,CAAM,SAAc,EAAC,CAOnCmC,CAAAA,CAAU,CAAC,OAAA,CAAS,GAAG,MAAA,CAAO,IAAA,CAAKpG,EAAM,KAAK,CAAC,CAAA,CACrD,IAAA,IAAWqB,CAAAA,IAAK8E,CAAAA,CACV9E,CAAAA,CAAE,IAAA,GAAS,SAAc,OAAOA,CAAAA,CAAE,IAAA,EAAS,QAAA,EAAY,CAAC+E,CAAAA,CAAQ,QAAA,CAAS/E,CAAAA,CAAE,IAAI,CAAA,CAAA,EACjFa,mBAAAA,CACE,eAAA,CACA,CAAA,YAAA,EAAe,IAAA,CAAK,SAAA,CAAUb,CAAAA,CAAE,IAAI,CAAC,CAAA,cAAA,CAAA,CACrC,CAAA,qCAAA,EAAwC,MAAA,CAAO,IAAA,CAAKrB,CAAAA,CAAM,KAAK,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,EAAK,QAAQ,CAAA,CACzF,CAAA,CACEqB,CAAAA,CAAE,IAAA,GAAS,MAAA,GACT,OAAOA,EAAE,IAAA,EAAS,QAAA,EACpBa,mBAAAA,CACE,eAAA,CACA,gCAAA,CACA,iCACF,CAAA,CACFD,mBAAAA,CAAQjC,EAAOqB,CAAAA,CAAE,IAAI,CAAA,CAAA,CAGzB,IAAMgF,CAAAA,CAAqBpC,CAAAA,CAAM,MAAA,EAAa,IAE5C,CAAC,KAAA,CAAM,OAAA,CAAQoC,CAAS,CAAA,EACxB,CAACA,CAAAA,CAAU,KAAA,CAAOxE,GAAM,OAAOA,CAAAA,EAAM,QAAQ,CAAA,EAC7CwE,CAAAA,CAAU,IAAA,CAAK,CAACxE,CAAAA,CAAGN,IAAM8E,CAAAA,CAAU,OAAA,CAAQxE,CAAC,CAAA,GAAMN,CAAC,CAAA,GAEnDW,mBAAAA,CACE,eAAA,CACA,0DACA,sEACF,CAAA,CACF,IAAMoE,CAAAA,CAASD,CAAAA,CACTE,CAAAA,CAAStC,CAAAA,CAAM,KAAA,EAAY,EAAC,CAC5BuC,CAAAA,CAAWvC,CAAAA,CAAM,OAAA,EAAc,EAAC,CAChCwC,CAAAA,CAAMxC,CAAAA,CAAM,WACZyC,CAAAA,CAAO,CAAC,GAAGH,CAAAA,CAAM,GAAA,CAAKI,CAAAA,EAAMA,CAAAA,CAAE,EAAE,EAAG,GAAGH,CAAO,CAAA,CAC7CI,CAAAA,CAAOF,CAAAA,CAAK,IAAA,CAAK,CAACG,CAAAA,CAAGtF,IAAMmF,CAAAA,CAAK,OAAA,CAAQG,CAAC,CAAA,GAAMtF,CAAC,CAAA,CAClDqF,CAAAA,EACF1E,mBAAAA,CACE,gBACA,CAAA,QAAA,EAAW0E,CAAI,CAAA,8BAAA,CAAA,CACf,mCACF,CAAA,CACF,IAAA,IAAWE,CAAAA,IAAOJ,CAAAA,CAAM,CACtB,IAAMrF,CAAAA,CAAIrB,CAAAA,CAAM,OAAA,CAAQ,IAAA,CAAM6B,CAAAA,EAAMA,CAAAA,CAAE,EAAA,GAAOiF,CAAG,CAAA,CAC3CzF,CAAAA,EACHa,mBAAAA,CACE,eAAA,CACA,CAAA,WAAA,EAAc4E,CAAG,CAAA,CAAA,CAAA,CACjB,CAAA,gBAAA,EACE9G,EAAM,OAAA,CACH,MAAA,CAAQ6B,CAAAA,EAAMA,CAAAA,CAAE,MAAA,GAAW,QAAQ,CAAA,CACnC,GAAA,CAAKA,GAAMA,CAAAA,CAAE,EAAE,CAAA,CACf,IAAA,CAAK,IAAI,CAAA,EAAK,QACnB,CAAA,CACF,EACER,CAAAA,CAAE,MAAA,GAAW,QAAA,EACfa,mBAAAA,CACE,eAAA,CACA,CAAA,QAAA,EAAW4E,CAAG,CAAA,aAAA,EAAgBzF,EAAE,MAAM,CAAA,CAAA,CACtC,iDACF,EACJ,CACA,OAAO0C,CAAAA,CAAI/D,CAAAA,CAAO,iBAAkBiE,CAAAA,CAAO,CAACzD,CAAAA,CAAGiC,CAAAA,GAAQ,CACrD,IAAMsE,CAAAA,CAAoB,GACpBC,CAAAA,CAAuB,EAAC,CACxBC,CAAAA,CAAyB,EAAC,CAC5BC,CAAAA,CAAa,KAAA,CACXC,EAAAA,CAAexB,GAAgC,CACnD,GAAKA,CAAAA,CACL,GAAIA,CAAAA,CAAE,IAAA,GAAS,WAAA,CACbnF,CAAAA,CAAI4G,oBAAe5G,CAAAA,CAAGmF,CAAAA,CAAG1B,CAAAA,CAAM,EAAA,CAAIxB,CAAG,CAAA,CACtCuE,CAAAA,CAAW,IAAA,CAAKrB,EAAE,IAAI,CAAA,CAAA,KAAA,GACbA,CAAAA,CAAE,IAAA,GAAS,KAAA,CAAO,CAC3B,IAAM0B,CAAAA,CAAMtE,EAASvC,CAAC,CAAA,CAAE,gBAAA,CACnB6G,CAAAA,CAAI,IAAA,CAAMC,CAAAA,EAAM,IAAA,CAAK,SAAA,CAAUA,CAAC,CAAA,GAAM,IAAA,CAAK,SAAA,CAAU3B,CAAAA,CAAE,MAAM,CAAC,CAAA,GACjEuB,CAAAA,CAAa,KACb1G,CAAAA,CAAIqC,CAAAA,CAAOrC,CAAAA,CAAG,CAAC,GAAG6G,CAAAA,CAAK1B,CAAAA,CAAE,MAAM,CAAC,CAAA,EAEpC,CAAA,KAAWA,CAAAA,CAAE,IAAA,GAAS,SAAA,GACpBnF,CAAAA,CAAIsE,mBAAAA,CACFtE,CAAAA,CACA,CAAE,GAAGmF,CAAAA,CAAE,IAAA,CAAM,KAAA,CAAO,SAAA,CAAW,IAAA,CAAM,CAAC,GAAIA,EAAE,IAAA,CAAK,IAAA,EAAQ,EAAC,CAAI,OAAO,CAAE,CAAA,CACvE1B,CAAAA,CAAM,GACNxB,CACF,CAAA,CACAwE,CAAAA,CAAa,IAAA,CAAKtB,CAAAA,CAAE,IAAA,CAAK,EAAE,CAAA,EAE/B,EACA,IAAA,IAAWtE,CAAAA,IAAK8E,CAAAA,CAAY,CAC1B,IAAMxF,CAAAA,CAAK,CAAA,CAAA,EAAIH,CAAAA,CAAE,QAAQ,MAAA,CAAS,CAAC,CAAA,CAAA,CAC7B+G,CAAAA,CAAiB,CACrB,EAAA,CAAA5G,CAAAA,CACA,EAAA,CAAI8B,EACJ,IAAA,CAAMpB,CAAAA,CAAE,IAAA,CACR,KAAA,CAAOA,CAAAA,CAAE,KAAA,CACT,MAAA,CAAQ,SAAA,CACR,KAAMA,CAAAA,CAAE,IAAA,EAAQ4C,CAAAA,CAAM,EACxB,CAAA,CACI5C,CAAAA,CAAE,IAAA,GAAS,MAAA,GAAWkG,EAAO,IAAA,CAAOlG,CAAAA,CAAE,IAAA,CAAA,CACtCA,CAAAA,CAAE,eAAA,GAAiBkG,CAAAA,CAAO,eAAA,CAAkBlG,CAAAA,CAAE,iBAClDb,CAAAA,CAAI,CAAE,GAAGA,CAAAA,CAAG,OAAA,CAAS,CAAC,GAAGA,CAAAA,CAAE,QAAS+G,CAAM,CAAE,CAAA,CAC5CR,CAAAA,CAAQ,IAAA,CAAKpG,CAAE,CAAA,CACfwG,EAAAA,CAAY9F,EAAE,eAAe,EAC/B,CACA,IAAA,IAAWsF,CAAAA,IAAKJ,CAAAA,CACd/F,CAAAA,CAAI,CACF,GAAGA,CAAAA,CACH,OAAA,CAASA,CAAAA,CAAE,OAAA,CAAQ,GAAA,CAAKqB,CAAAA,EACtBA,CAAAA,CAAE,EAAA,GAAO8E,EAAE,EAAA,CACP,CACE,GAAG9E,CAAAA,CACH,MAAA,CAAQ,SAAA,CACR,GAAI8E,CAAAA,CAAE,gBAAkB,CAAE,eAAA,CAAiBA,CAAAA,CAAE,eAAgB,CAAA,CAAI,EACnE,CAAA,CACA9E,CACN,CACF,CAAA,CACAkF,CAAAA,CAAQ,IAAA,CAAKJ,CAAAA,CAAE,EAAE,CAAA,CACjBQ,EAAAA,CAAYR,EAAE,eAAA,EAAmBnG,CAAAA,CAAE,OAAA,CAAQ,IAAA,CAAMqB,CAAAA,EAAMA,CAAAA,CAAE,EAAA,GAAO8E,CAAAA,CAAE,EAAE,CAAA,EAAG,eAAe,CAAA,CAExF,IAAA,IAAWa,CAAAA,IAAKhB,CAAAA,CACdhG,CAAAA,CAAI,CACF,GAAGA,CAAAA,CACH,OAAA,CAASA,CAAAA,CAAE,OAAA,CAAQ,GAAA,CAAKqB,CAAAA,EAAOA,CAAAA,CAAE,EAAA,GAAO2F,EAAI,CAAE,GAAG3F,CAAAA,CAAG,MAAA,CAAQ,WAAqB,CAAA,CAAIA,CAAE,CACzF,EACF,IAAA,IAAW4F,CAAAA,IAAQnB,CAAAA,CAAQ9F,CAAAA,CAAIkH,mBAAAA,CAAgBlH,CAAAA,CAAGiH,CAAAA,CAAMxD,CAAAA,CAAM,GAAIxB,CAAG,CAAA,CACrE,OAAIgE,CAAAA,GACFS,CAAAA,CAAa,IAAA,CACb1G,CAAAA,CAAIqC,CAAAA,CAAOrC,EAAGiG,CAAG,CAAA,CAAA,CAEZ9B,mBAAAA,CACLnE,CAAAA,CACA,OAAA,CACAyD,CAAAA,CAAM,EAAA,CACN,CACE,OAAQiB,CAAAA,CAAK,EAAA,CACb,OAAA,CAAA6B,CAAAA,CACA,SAAA,CAAWP,CAAAA,CACX,UAAA,CAAAQ,CAAAA,CACA,QAASV,CAAAA,CACT,UAAA,CAAAY,CAAAA,CACA,YAAA,CAAAD,CACF,CAAA,CACAxE,CACF,CACF,CAAC,CACH,CAAA,CAkB+D,MAAA,CAhBtC,CAACzC,EAAOiE,CAAAA,GAAU,CACzCI,mBAAAA,CAAWrE,CAAAA,CAAOiE,EAAM,EAAA,CAAI,eAAe,CAAA,CAC3C,IAAM5D,CAAAA,CAAKC,mBAAAA,CAAcN,CAAK,CAAA,CAC9B,OAAKK,CAAAA,EAAI6B,mBAAAA,CAAK,eAAA,CAAiB,0BAAA,CAA4B,eAAe,CAAA,CACnE6B,CAAAA,CAAI/D,CAAAA,CAAO,kBAAmBiE,CAAAA,CAAO,CAACzD,CAAAA,CAAGiC,CAAAA,IAC9CjC,CAAAA,CAAImE,mBAAAA,CACFnE,CAAAA,CACA,kBAAA,CACAyD,EAAM,EAAA,CACN,CAAE,EAAA,CAAI5D,CAAAA,CAAG,EAAA,CAAI,MAAA,CAAQ4D,CAAAA,CAAM,MAAA,EAAa,EAAG,CAAA,CAC3CxB,CACF,CAAA,CACOwD,CAAAA,CAAYzF,CAAAA,CAAG,QAAA,CAAUiC,CAAG,CAAA,CACpC,CACH,CAEsE,CACxE,CClqBA,IAAMkF,EAAAA,CAAY,IAAI,GAAA,CAAI,CAAC,QAAS,SAAA,CAAW,KAAK,CAAC,CAAA,CAE9C,SAASC,EAAAA,CAAoBC,CAAAA,CAA2B,CAC7D,IAAMlC,CAAAA,CAAKkC,CAAAA,EAAO,EAAC,CACb3E,CAAAA,CAASyC,CAAAA,CAAE,YAAA,CAAA,CAEf,CAACzC,GACD,OAAOA,CAAAA,EAAW,QAAA,EACjBA,CAAAA,CAAO,MAAA,GAAW,MAAA,EAAaA,CAAAA,CAAO,KAAA,GAAU,QAAaA,CAAAA,CAAO,WAAA,GAAgB,MAAA,GAErFhB,mBAAAA,CACE,gBAAA,CACA,oEAAA,CACA,4DACF,CAAA,CAAA,CAEE,OAAOyD,CAAAA,CAAE,WAAA,EAAmB,QAAA,EAAYA,CAAAA,CAAE,WAAA,CAAe,IAAA,EAAK,GAAM,EAAA,GACtEzD,oBACE,gBAAA,CACA,qDAAA,CACA,wCACF,CAAA,CACG,KAAA,CAAM,OAAA,CAAQyD,CAAAA,CAAE,gBAAmB,GACtCzD,mBAAAA,CACE,gBAAA,CACA,kDAAA,CACA,8DACF,CAAA,CACF,IAAMf,CAAAA,CAAQwE,CAAAA,CAAE,oBAAyB,EAAA,CAAA,CACrC,OAAOxE,CAAAA,EAAU,QAAA,EAAYA,CAAAA,CAAQ,CAAA,EAAKA,CAAAA,CAAQ,GAAA,GACpDe,oBACE,gBAAA,CACA,gDAAA,CACA,4BACF,CAAA,CACF,IAAM4F,CAAAA,CAAMnC,CAAAA,CAAE,iBAAA,EAAwB,WAClC,OAAOmC,CAAAA,EAAQ,QAAA,EAAY,CAACH,EAAAA,CAAU,GAAA,CAAIG,CAAG,CAAA,GAC/C5F,oBACE,gBAAA,CACA,CAAA,kEAAA,EAAqE,IAAA,CAAK,SAAA,CAAU4F,CAAG,CAAC,CAAA,CAAA,CAAA,CACxF,wCACF,EACF,IAAMC,CAAAA,CAAMpC,CAAAA,CAAE,kBAAA,CACVoC,CAAAA,GAAQ,MAAA,GAAc,OAAOA,CAAAA,EAAQ,UAAYA,CAAAA,CAAM,CAAA,CAAA,EACzD7F,mBAAAA,CACE,gBAAA,CACA,2DAAA,CACA,sBACF,CAAA,CACF,IAAM8F,EAAYrC,CAAAA,CAAE,SAAA,CAChBqC,CAAAA,GAAc,MAAA,EAAa,OAAOA,CAAAA,EAAc,SAAA,EAClD9F,mBAAAA,CACE,iBACA,8CAAA,CACA,8BACF,CAAA,CACF,IAAM+F,CAAAA,CAAOtC,CAAAA,CAAE,YAAA,CACXsC,CAAAA,GAAS,QAAaA,CAAAA,GAAS,YAAA,EAAgBA,CAAAA,GAAS,UAAA,EAC1D/F,mBAAAA,CACE,gBAAA,CACA,CAAA,6DAAA,EAAgE,IAAA,CAAK,UAAU+F,CAAI,CAAC,CAAA,CAAA,CAAA,CACpF,8CACF,CAAA,CACF,IAAMC,CAAAA,CAAWvC,CAAAA,CAAE,wBAEjBuC,CAAAA,GAAa,MAAA,GACZ,OAAOA,CAAAA,EAAa,QAAA,EAAY,CAAC,MAAA,CAAO,QAAA,CAASA,CAAQ,CAAA,EAAKA,CAAAA,EAAY,CAAA,CAAA,EAE3EhG,mBAAAA,CACE,gBAAA,CACA,uEAAA,CACA,+BACF,CAAA,CACF,IAAMiG,CAAAA,CAAmB,CACvB,YAAA,CAAcjF,CAAAA,CACd,WAAA,CAAayC,CAAAA,CAAE,WAAA,CACf,gBAAA,CAAkBA,EAAE,gBAAA,CACpB,kBAAA,CAAoBxE,CAAAA,CACpB,iBAAA,CAAmB2G,CACrB,CAAA,CACA,OAAIC,CAAAA,GAAQ,SAAWI,CAAAA,CAAI,kBAAA,CAAqBJ,CAAAA,CAAAA,CAC5CC,CAAAA,GAAc,MAAA,GAAWG,CAAAA,CAAI,SAAA,CAAYH,CAAAA,CAAAA,CACzCC,IAAS,MAAA,GAAWE,CAAAA,CAAI,YAAA,CAAeF,CAAAA,CAAAA,CACvCC,CAAAA,GAAa,MAAA,GAAWC,CAAAA,CAAI,uBAAA,CAA0BD,GACnDC,CACT,CC7EA,IAAMC,CAAAA,CAAQ,CAACC,CAAAA,CAAaC,CAAAA,GAAiBA,CAAAA,GAAQ,EAAI,CAAA,CAAID,CAAAA,CAAMC,CAAAA,CAE5D,SAASC,EAAAA,CAAavI,CAAAA,CAAoC,CAC/D,IAAMwI,EAAcxI,CAAAA,CAAM,MAAA,CAAO,MAAA,CAAQE,CAAAA,EAAMA,EAAE,IAAA,GAAS,sBAAsB,CAAA,CAC1ED,CAAAA,CAASD,EAAM,MAAA,CAClB,MAAA,CAAQE,CAAAA,EAAMA,CAAAA,CAAE,IAAA,GAAS,eAAe,CAAA,CACxC,GAAA,CAAKA,GAAM,CACV,IAAMyF,CAAAA,CAAIzF,CAAAA,CAAE,OAAA,CAENuI,CAAAA,CAAOD,CAAAA,CACV,MAAA,CACE3G,GACCA,CAAAA,CAAE,GAAA,CAAM3B,CAAAA,CAAE,GAAA,EACVyF,CAAAA,CAAE,EAAA,GAAO,MAAA,EACR9D,CAAAA,CAAE,QAAyC,SAAA,GAAc8D,CAAAA,CAAE,EAChE,CAAA,CACC,MAAA,CAAO,CAACxF,CAAAA,CAAK0B,CAAAA,GAAM1B,EAAO0B,CAAAA,CAAE,OAAA,CAA0C,KAAA,CAAM,MAAA,CAAQ,CAAC,CAAA,CACxF,OAAO4G,CAAAA,GAAS,EAAI9C,CAAAA,CAAI,CAAE,GAAGA,CAAAA,CAAG,KAAA,CAAO,CAAE,GAAGA,CAAAA,CAAE,MAAO,MAAA,CAAQA,CAAAA,CAAE,KAAA,CAAM,MAAA,CAAS8C,CAAK,CAAE,CACvF,CAAC,EACGC,CAAAA,CAAUzI,CAAAA,CAAO,MAAA,CAAQ0F,CAAAA,EAAMA,CAAAA,CAAE,MAAA,GAAW,QAAQ,CAAA,CACpD1E,EAAWyH,CAAAA,CAAQ,GAAA,CAAK/C,CAAAA,EAAMA,CAAAA,CAAE,UAAU,CAAA,CAC1CgD,CAAAA,CAAaD,CAAAA,CAAQ,OAAO,CAAClI,CAAAA,CAAGmF,CAAAA,GAAMnF,CAAAA,CAAImF,CAAAA,CAAE,UAAA,CAAY,CAAC,CAAA,CACzDH,EAAkBkD,CAAAA,CAAQ,MAAA,CAAO,CAAClI,CAAAA,CAAGmF,CAAAA,GAAMnF,CAAAA,CAAImF,CAAAA,CAAE,eAAA,CAAiB,CAAC,CAAA,CACnEiD,CAAAA,CAAa5I,CAAAA,CAAM,MAAA,CACtB,MAAA,CAAQE,CAAAA,EAAMA,CAAAA,CAAE,IAAA,GAAS,WAAW,CAAA,CACpC,GAAA,CAAKA,CAAAA,EAAMA,CAAAA,CAAE,OAA+B,CAAA,CACzC2I,CAAAA,CAAa5I,CAAAA,CAAO,OAAQ0F,CAAAA,EAAMA,CAAAA,CAAE,MAAA,CAAO,MAAA,GAAW,MAAS,CAAA,CAC/DmD,CAAAA,CAAcJ,CAAAA,CAAQ,OAAO,CAAClI,CAAAA,CAAGmF,CAAAA,GAAMnF,CAAAA,CAAImF,CAAAA,CAAE,KAAA,CAAM,MAAA,CAAQ,CAAC,EAClE,OAAO,CACL,QAAA,CAAA1E,CAAAA,CACA,YAAA,CAAcmH,CAAAA,CACZnH,CAAAA,CAAS,MAAA,CAAO,CAACT,CAAAA,CAAGqB,CAAAA,GAAMrB,CAAAA,CAAIqB,CAAAA,CAAG,CAAC,CAAA,CAClCZ,CAAAA,CAAS,MACX,EACA,QAAA,CAAUjB,CAAAA,CAAM,MAAA,CACb,MAAA,CAAQE,CAAAA,EAAMA,CAAAA,CAAE,IAAA,GAAS,OAAO,EAChC,GAAA,CAAKA,CAAAA,EAAOA,CAAAA,CAAE,OAAA,CAAwC,eAAe,CAAA,CACxE,qBAAA,CAAuBkI,CAAAA,CAAMO,EAAYnD,CAAe,CAAA,CACxD,iBAAA,CAAmB4C,CAAAA,CAAMQ,CAAAA,CAAW,MAAA,CAAQrH,CAAAA,EAAMA,CAAAA,CAAE,OAAO,CAAA,CAAE,MAAA,CAAQqH,CAAAA,CAAW,MAAM,CAAA,CACtF,cAAA,CAAgBR,CAAAA,CACdnI,CAAAA,CAAO,OAAO,CAACO,CAAAA,CAAGmF,CAAAA,GAAMnF,CAAAA,CAAImF,CAAAA,CAAE,SAAA,CAAU,MAAA,CAAQ,CAAC,EACjD1F,CAAAA,CAAO,MAAA,CAAO,CAACO,CAAAA,CAAGmF,CAAAA,GAAMnF,CAAAA,CAAImF,CAAAA,CAAE,IAAA,CAAK,OAASA,CAAAA,CAAE,SAAA,CAAU,MAAA,CAAQ,CAAC,CACnE,CAAA,CACA,iBAAA,CAAmByC,CAAAA,CACjBS,EAAW,MAAA,CAAO,CAACrI,CAAAA,CAAGmF,CAAAA,GAAMnF,CAAAA,CAAImF,CAAAA,CAAE,KAAA,CAAM,MAAA,CAAQ,CAAC,CAAA,CACjDkD,CAAAA,CAAW,MAAA,CAAO,CAACrI,CAAAA,CAAGmF,CAAAA,GAAMnF,CAAAA,EAAKmF,CAAAA,CAAE,OAAO,MAAA,EAAU,CAAA,CAAA,CAAI,CAAC,CAC3D,CAAA,CACA,YAAA,CAAcyC,CAAAA,CAAMU,CAAAA,CAAaH,CAAU,CAAA,CAC3C,OAAA,CAASI,EAAAA,CAAc/I,CAAK,CAC9B,CACF,CAEA,SAAS+I,GAAc/I,CAAAA,CAA8C,CACnE,IAAMK,CAAAA,CAAKC,mBAAAA,CAAcN,CAAK,CAAA,CACxB2B,CAAAA,CAAAA,CAAStB,GAAI,SAAA,EAAa,EAAC,EAAG,GAAA,CAAKM,CAAAA,EAAOX,CAAAA,CAAM,KAAA,CAAMW,CAAE,CAAC,CAAA,CAAE,MAAA,CAAQY,CAAAA,EAAMA,CAAAA,GAAM,MAAS,CAAA,CACxFyH,CAAAA,CAAUC,CAAAA,EAAuBA,EAAK,MAAA,CAAO,CAAC9I,CAAAA,CAAKoB,CAAAA,GAAMpB,GAAOoB,CAAAA,CAAE,MAAA,EAAU,CAAA,CAAA,CAAI,CAAC,EACjFiE,CAAAA,CAAkBwD,CAAAA,CAAOrH,CAAK,CAAA,CAC9BgH,CAAAA,CAAaK,CAAAA,CAAOrH,CAAAA,CAAM,MAAA,CAAQJ,GAAMA,CAAAA,CAAE,MAAA,GAAW,MAAM,CAAC,CAAA,CAC5D2H,CAAAA,CAAc7I,CAAAA,EAAI,KAAA,CAAM,QAAU,CAAA,CAClC8I,CAAAA,CAAe9I,CAAAA,EAAI,MAAA,CAAO,MAAA,EAAU,CAAA,CAC1C,OAAO,CACL,YAAA6I,CAAAA,CACA,UAAA,CAAY7I,CAAAA,EAAI,KAAA,CAAM,KAAA,EAAS,CAAA,CAC/B,YAAA,CAAA8I,CAAAA,CACA,gBAAA3D,CAAAA,CACA,UAAA,CAAAmD,CAAAA,CACA,eAAA,CAAiBnD,CAAAA,CAAkBmD,CAAAA,CACnC,YAAA,CAAcP,CAAAA,CAAMc,EAAaP,CAAU,CAAA,CAC3C,iBAAA,CAAmBP,CAAAA,CAAMc,CAAAA,CAAaC,CAAY,CACpD,CACF,CC/FO,SAASC,EAAAA,EAAqB,CACnC,OAAO,CACL,CACE,EAAA,CAAI,eAAA,CACJ,KAAM,eAAA,CACN,SAAA,CAAW,OAAA,CACX,YAAA,CAAc,CAAC,eAAA,CAAiB,mBAAA,CAAqB,UAAU,EAC/D,UAAA,CAAY,CAAC,eAAe,CAAA,CAC5B,MAAA,CAAQ,CAAC,mBAAA,CAAqB,cAAc,EAC5C,OAAA,CAAS,CAAC,iBAAA,CAAmB,qBAAqB,CAAA,CAClD,MAAA,CAAQ,CAAC,iCAAiC,CAC5C,CAAA,CACA,CACE,EAAA,CAAI,cAAA,CACJ,IAAA,CAAM,cAAA,CACN,SAAA,CAAW,OAAA,CACX,aAAc,CAAC,YAAA,CAAc,UAAU,CAAA,CACvC,UAAA,CAAY,EAAC,CACb,MAAA,CAAQ,CAAC,OAAA,CAAS,UAAU,CAAA,CAC5B,OAAA,CAAS,CAAC,kBAAA,CAAoB,SAAS,CAAA,CACvC,OAAQ,CAAC,oCAAA,CAAsC,uCAAuC,CACxF,CAAA,CACA,CACE,EAAA,CAAI,WAAA,CACJ,KAAM,WAAA,CACN,SAAA,CAAW,OAAA,CACX,YAAA,CAAc,CAAC,SAAA,CAAW,QAAA,CAAU,QAAQ,EAC5C,UAAA,CAAY,EAAC,CACb,MAAA,CAAQ,CAAC,OAAO,CAAA,CAChB,OAAA,CAAS,CAAC,MAAA,CAAQ,aAAa,CAAA,CAC/B,MAAA,CAAQ,CAAC,mCAAA,CAAqC,uCAAuC,CACvF,CACF,CACF,CC5BA,IAAMC,CAAAA,CAAI,CACRC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,EACA7I,CAAAA,GACeA,CAAAA,CAAO,CAAE,IAAA,CAAA0I,CAAAA,CAAM,QAAA,CAAAC,CAAAA,CAAU,IAAA,CAAA3I,EAAM,OAAA,CAAA4I,CAAAA,CAAS,GAAA,CAAAC,CAAI,CAAA,CAAI,CAAE,IAAA,CAAAH,CAAAA,CAAM,SAAAC,CAAAA,CAAU,OAAA,CAAAC,CAAAA,CAAS,GAAA,CAAAC,CAAI,CAAA,CAEhG,SAASC,EAAAA,CAAW1J,EAA6C,CAC/D,IAAA,IAASuB,CAAAA,CAAIvB,CAAAA,CAAM,UAAA,CAAW,MAAA,CAAS,CAAA,CAAGuB,CAAAA,EAAK,EAAGA,CAAAA,EAAAA,CAAK,CACrD,IAAMlB,CAAAA,CAAKL,CAAAA,CAAM,UAAA,CAAWuB,CAAC,CAAA,CAC7B,GAAIlB,CAAAA,CAAG,OAAA,GAAY,MAAA,CAAW,OAAOA,CACvC,CAEF,CAEA,IAAMsJ,EAAarC,CAAAA,EACjBA,CAAAA,CAAE,IAAA,GAAS,UAAA,CACP,CAAA,SAAA,EAAYA,CAAAA,CAAE,YAAY,CAAA,CAAA,CAC1BA,EAAE,IAAA,GAAS,QAAA,CACT,CAAA,OAAA,EAAUA,CAAAA,CAAE,EAAE,CAAA,CAAA,CACdA,CAAAA,CAAE,IAAA,CAEH,SAASsC,EAAAA,EAAqB,CA6NnC,OAAO,CA5Ne,CACpB,EAAA,CAAI,iBAAA,CACJ,QAAA,CAAU,QACV,KAAA,CAAO,CAACpJ,CAAAA,CAAGmG,CAAAA,GACTA,CAAAA,CAAE,IAAA,GAAS,eAAA,EAAmBrG,mBAAAA,CAAcE,CAAC,CAAA,CACzC,CACE6I,CAAAA,CACE,iBAAA,CACA,OAAA,CACA,CAAA,OAAA,EAAU/I,mBAAAA,CAAcE,CAAC,EAAG,EAAE,CAAA,cAAA,CAAA,CAC9B,qDACF,CACF,CAAA,CACA,EACR,CAAA,CAEyB,CACvB,EAAA,CAAI,mBAAA,CACJ,QAAA,CAAU,OAAA,CACV,KAAA,CAAO,CAACA,CAAAA,CAAGmG,CAAAA,GAAM,CACf,GAAIA,CAAAA,CAAE,IAAA,GAAS,eAAA,CAAiB,OAAO,EAAC,CACxC,IAAMzB,CAAAA,CAAOwE,GAAWlJ,CAAC,CAAA,CACzB,GAAI,CAAC0E,CAAAA,CAAM,OAAO,EAAC,CACnB,IAAM2E,CAAAA,CAAMrI,CAAAA,CAAUhB,CAAAA,CAAG0E,CAAAA,CAAK,EAAE,CAAA,CAChC,GAAI1E,CAAAA,CAAE,OAAO,IAAA,CAAMN,CAAAA,EAAMA,CAAAA,CAAE,IAAA,GAAS,OAAA,EAAWA,CAAAA,CAAE,GAAA,CAAM2J,CAAG,EAAG,OAAO,EAAC,CACrE,IAAMC,CAAAA,CAAM5E,CAAAA,CAAK,OAAA,GAAY,WAAA,CAAc,UAAY,OAAA,CACvD,OAAO,CACLmE,CAAAA,CACE,mBAAA,CACAS,CAAAA,CACA,CAAA,OAAA,EAAU5E,CAAAA,CAAK,EAAE,CAAA,yBAAA,CAAA,CACjB,qDACF,CACF,CACF,CACF,CAAA,CAE0B,CACxB,EAAA,CAAI,sBACJ,QAAA,CAAU,OAAA,CACV,KAAA,CAAO,CAAC1E,CAAAA,CAAGmG,CAAAA,GAAM,CACf,GAAIA,EAAE,IAAA,GAAS,eAAA,CAAiB,OAAO,EAAC,CACxC,IAAM9F,CAAAA,CAAK8F,CAAAA,CAAE,SAA6C,MAAA,CAC1D,OAAI9F,CAAAA,GAAM,MAAA,EAAa,IAAA,CAAK,SAAA,CAAUA,CAAC,CAAA,GAAM,KAAK,SAAA,CAAUkC,CAAAA,CAASvC,CAAC,CAAA,CAAE,YAAY,CAAA,CAC3E,EAAC,CACH,CACL6I,CAAAA,CACE,qBAAA,CACA,OAAA,CACA,+CAAA,CACA,uFACF,CACF,CACF,CACF,EAwCsB,CACpB,EAAA,CAAI,gBAAA,CACJ,QAAA,CAAU,OAAA,CACV,KAAA,CAAO,CAAC7I,CAAAA,CAAGmG,IAAM,CACf,IAAMtG,CAAAA,CAAKC,mBAAAA,CAAcE,CAAC,CAAA,CAC1B,OAAOmG,CAAAA,CAAE,OAAS,iBAAA,EAAqBtG,CAAAA,EAAI,OAAA,CACvC,CACEgJ,CAAAA,CACE,gBAAA,CACA,OAAA,CACA,CAAA,OAAA,EAAUhJ,EAAG,EAAE,CAAA,0DAAA,CAAA,CACf,gEACF,CACF,CAAA,CACA,EACN,CACF,EAEuB,CACrB,EAAA,CAAI,iBAAA,CACJ,QAAA,CAAU,OAAA,CACV,KAAA,CAAO,CAACG,CAAAA,CAAGmG,IAAM,CACf,GAAIA,CAAAA,CAAE,IAAA,GAAS,MAAA,CAAQ,OAAO,EAAC,CAC/B,IAAMoD,CAAAA,CAAU,CAAC,SAAA,CAAW,QAAA,CAAU,QAAQ,CAAA,CAAE,MAAA,CAC7CpJ,CAAAA,EAAO,CAACH,CAAAA,CAAE,MAAA,CAAO,IAAA,CAAMwC,CAAAA,EAAOA,CAAAA,CAAG,EAAA,GAAOrC,CAAE,CAC7C,EACA,OAAIoJ,CAAAA,CAAQ,MAAA,EACV7H,mBAAAA,CACE,gBAAA,CACA,CAAA,sCAAA,EAAyC6H,CAAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAC3D,8GACF,CAAA,CACK,EACT,CACF,CAAA,CAxEoB,CAClB,EAAA,CAAI,qBAAA,CACJ,QAAA,CAAU,OAAA,CACV,KAAA,CAAO,CAACvJ,CAAAA,CAAGmG,CAAAA,GAAM,CACf,GAAIA,CAAAA,CAAE,IAAA,GAAS,iBAAA,CAAmB,OAAO,EAAC,CAC1C,IAAMxD,EAAMJ,CAAAA,CAASvC,CAAC,CAAA,CAChB8G,CAAAA,CAAKX,CAAAA,CAAE,OAAA,EAAW,EAAC,CACzB,OAAIxD,CAAAA,CAAI,iBAAA,GAAsB,OAAA,CACrB,CACLkG,CAAAA,CACE,qBAAA,CACA,OAAA,CACA,mCAAA,CACA,gEACF,CACF,CAAA,CACElG,CAAAA,CAAI,iBAAA,GAAsB,SAAA,EAAa,CAAC6G,mBAAAA,CAAMxJ,CAAAA,CAAGmG,EAAE,EAAA,CAAI,eAAe,CAAA,CACjE,CACL0C,CAAAA,CACE,qBAAA,CACA,OAAA,CACA,CAAA,CAAA,EAAI1C,EAAE,EAAE,CAAA,6BAAA,CAAA,CACR,oDACF,CACF,CAAA,CACEW,CAAAA,CAAE,UAAA,GAAe,MAAA,CACZ,CACL+B,CAAAA,CACE,qBAAA,CACA,OAAA,CACA,CAAA,6BAAA,EAAgC/B,CAAAA,CAAE,UAAA,EAAc,OAAO,CAAA,2BAAA,CAAA,CACvD,yEACF,CACF,CAAA,CACK,EACT,CACF,CAAA,CAsCuB,CACrB,EAAA,CAAI,oBACJ,QAAA,CAAU,OAAA,CACV,KAAA,CAAO,CAAC9G,CAAAA,CAAGmG,CAAAA,GACLA,CAAAA,CAAE,IAAA,GAAS,mBAAqBqD,mBAAAA,CAAMxJ,CAAAA,CAAGmG,CAAAA,CAAE,EAAA,CAAI,eAAe,CAAA,CAAU,EAAC,CAAA,CAAA,CAEzEA,CAAAA,CAAE,SAAW,EAAC,EAA2D,KAAA,EAAS,EAAC,EAEpF,MAAA,CAAQpF,CAAAA,EAAMA,CAAAA,CAAE,MAAM,QAAA,GAAa,MAAS,CAAA,CAC5C,GAAA,CAAKA,CAAAA,EACJ8H,CAAAA,CACE,mBAAA,CACA,OAAA,CACA,IAAI1C,CAAAA,CAAE,EAAE,CAAA,kCAAA,EAAqCpF,CAAAA,CAAE,EAAE,CAAA,CAAA,CAAA,CACjD,yEAAA,CACAA,CAAAA,CAAE,EACJ,CACF,CAEN,CAAA,CAEkB,CAChB,EAAA,CAAI,kBAAA,CACJ,QAAA,CAAU,OAAA,CACV,MAAO,CAACf,CAAAA,CAAGmG,CAAAA,GAAM,CACf,GAAIA,CAAAA,CAAE,IAAA,GAAS,gBAAA,CAAkB,OAAO,EAAC,CACzC,IAAMW,CAAAA,CAAKX,CAAAA,CAAE,OAAA,EAAW,EAAC,CACzB,GAAIW,CAAAA,CAAE,UAAA,GAAe,MAAA,CAAW,OAAO,EAAC,CACxC,GAAIhH,mBAAAA,CAAcE,CAAC,CAAA,CACjB,OAAO,CACL6I,CAAAA,CACE,kBAAA,CACA,OAAA,CACA,yDAAA,CACA,8DACF,CACF,CAAA,CACF,GAAI,CAAC,KAAA,CAAM,OAAA,CAAQ/B,CAAAA,CAAE,UAAU,CAAA,EAAKA,EAAE,WAAA,GAAgB,IAAA,CAAM,OAAO,EAAC,CACpE,IAAM2C,CAAAA,CAAO3C,CAAAA,CAAE,WACT4C,CAAAA,CAAO,IAAI,GAAA,CAAID,CAAAA,CAAK,GAAA,CAAIN,CAAS,CAAC,CAAA,CAClCQ,EAAUpH,CAAAA,CAASvC,CAAC,CAAA,CAAE,gBAAA,CAAiB,MAAA,CAAQkC,CAAAA,EAAM,CAACwH,CAAAA,CAAK,IAAIP,CAAAA,CAAUjH,CAAC,CAAC,CAAC,CAAA,CAClF,GAAIyH,CAAAA,CAAQ,MAAA,GAAW,EAAG,OAAO,EAAC,CAClC,IAAMC,CAAAA,CAAWD,CAAAA,CAAQ,GAAA,CAAKzH,CAAAA,EAAMiH,EAAUjH,CAAC,CAAA,CAAE,OAAA,CAAQ,GAAA,CAAK,GAAG,CAAC,CAAA,CAClE,OAAO,CACL2G,CAAAA,CACE,kBAAA,CACA,OAAA,CACA,CAAA,uBAAA,EAA0Bc,CAAAA,CAAQ,MAAM,CAAA,iCAAA,EAAoCC,CAAAA,CAAS,KAAK,IAAI,CAAC,CAAA,CAAA,CAC/F,yKACF,CACF,CACF,CACF,CAAA,CAEoB,CAClB,EAAA,CAAI,uBAAA,CACJ,QAAA,CAAU,OAAA,CACV,KAAA,CAAO,CAAC5J,CAAAA,CAAGmG,CAAAA,GAAM,CACf,GAAIA,CAAAA,CAAE,IAAA,GAAS,eAAA,CAAiB,OAAO,EAAC,CACxC,IAAMhF,EAASgF,CAAAA,CAAE,OAAA,EAAuD,KAAA,CACxE,GAAI,CAAC,KAAA,CAAM,OAAA,CAAQhF,CAAK,EAAG,OAAO,EAAC,CACnC,IAAMuD,CAAAA,CAAOwE,EAAAA,CAAWlJ,CAAC,CAAA,CACzB,GAAI,CAAC0E,CAAAA,CAAM,OAAO,EAAC,CACnB,IAAM2E,CAAAA,CAAMrI,CAAAA,CAAUhB,EAAG0E,CAAAA,CAAK,EAAE,CAAA,CAChC,OAAOvD,CAAAA,CACJ,MAAA,CACEhB,CAAAA,EACCuE,CAAAA,CAAK,UAAU,QAAA,CAASvE,CAAE,CAAA,EAC1B,EAAEH,CAAAA,CAAE,KAAA,CAAMG,CAAE,CAAA,EAAK4E,EAAc/E,CAAAA,CAAE,KAAA,CAAMG,CAAE,CAAA,CAAGH,CAAC,CAAA,GAAM,MAAA,CAAA,EACnD,CAACA,EAAE,MAAA,CAAO,IAAA,CACPN,CAAAA,EACCA,CAAAA,CAAE,GAAA,CAAM2J,CAAAA,EACP3J,CAAAA,CAAE,OAAA,CAA2B,KAAOS,CAAAA,GACnCT,CAAAA,CAAE,IAAA,GAAS,aAAA,EACVA,CAAAA,CAAE,OAAA,CAAkC,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA,EAC9DA,CAAAA,CAAE,IAAA,GAAS,kBAAA,CACjB,CACJ,CAAA,CACC,GAAA,CAAKS,CAAAA,EACJ0I,EACE,uBAAA,CACA,OAAA,CACA,CAAA,mBAAA,EAAsB1I,CAAE,CAAA,6BAAA,EAAgCuE,CAAAA,CAAK,EAAE,CAAA,CAAA,CAC/D,gDACAvE,CACF,CACF,CACJ,CACF,CAEwF,CAC1F,CCzPO,SAAS0J,GAAYC,CAAAA,CAA8B,CACxD,IAAMC,CAAAA,CAAoB,CACxB,EAAA,CAAI,aAAA,CACJ,IAAA,CAAM,cACN,WAAA,CAAa,CAAC,CAAE,IAAA,CAAM,mBAAoB,CAAC,CAAA,CAC3C,UAAA,CAAY,EACd,CAAA,CACA,OAAID,CAAAA,CAAO,kBAAA,GAAuB,MAAA,GAAWC,CAAAA,CAAW,QAAA,CAAWD,CAAAA,CAAO,oBACnE,CACL,CACE,EAAA,CAAI,SAAA,CACJ,IAAA,CAAM,iBAAA,CACN,WAAA,CAAa,GACb,UAAA,CAAY,CAAC,CAAE,IAAA,CAAM,oBAAqB,CAAA,CAAG,CAAE,IAAA,CAAM,kBAAmB,CAAC,CAC3E,CAAA,CACA,CAAE,EAAA,CAAI,QAAA,CAAU,IAAA,CAAM,gBAAA,CAAkB,YAAa,EAAC,CAAG,UAAA,CAAY,EAAG,CAAA,CACxEC,CAAAA,CACA,CACE,GAAI,QAAA,CACJ,IAAA,CAAM,QAAA,CACN,WAAA,CAAa,EAAC,CACd,UAAA,CAAYD,CAAAA,CAAO,iBACnB,MAAA,CAAQ,IACV,CAAA,CACA,CAAE,EAAA,CAAI,MAAA,CAAQ,IAAA,CAAM,WAAA,CAAa,YAAa,EAAC,CAAG,UAAA,CAAY,EAAG,CACnE,CACF,KCXaE,EAAAA,CAA6C,CACxD,OAAA,CAAS,iBAAA,CACT,IAAA,CAAM,sBAAA,CACN,KAAA,CAAO,QAAA,CACP,UAAW,QAAA,CACX,SAAA,CAAW,WAAA,CACX,QAAA,CAAU,aAAA,CACV,IAAA,CAAM,eACR,EAGO,SAASzH,CAAAA,CAAS/C,CAAAA,CAAmC,CAC1D,OAAOA,CAAAA,CAAM,MACf,CAOO,SAASuF,EAAc3E,CAAAA,CAAgBZ,CAAAA,CAA2C,CACvF,IAAMyK,CAAAA,CAAI7J,CAAAA,CAAK,WAAA,CAAY,EAAA,CAAG,EAAE,CAAA,CAChC,OAAI,CAAC6J,CAAAA,EAAKA,CAAAA,CAAE,EAAA,GAAO,QAAA,EAAYA,CAAAA,CAAE,GAAG,KAAA,GAAU,SAAA,EAAaA,CAAAA,CAAE,EAAA,CAAG,MAAA,GAAW,MAAA,CACzE,MAAA,CACGzK,CAAAA,CACMA,EAAM,MAAA,CAAO,IAAA,CAAM6B,CAAAA,EAAMA,CAAAA,CAAE,EAAA,GAAO4I,CAAAA,CAAE,IAAA,CAAK,KAAK,GAC9C,MAAA,EAAUA,CAAAA,CAAE,IAAA,CAAK,MAAA,GAAW,QAAA,CAAWA,CAAAA,CAAE,IAAA,CAAK,KAAA,CAAQ,OAF9CA,CAAAA,CAAE,IAAA,CAAK,MAAA,GAAW,QAAA,CAAWA,CAAAA,CAAE,IAAA,CAAK,KAAA,CAAQ,MAGjE,CAGA,SAASC,EAAAA,CAAU1K,CAAAA,CAAsBW,CAAAA,CAAY8B,CAAAA,CAA4B,CAC/E,IAAIjC,CAAAA,CAAIR,EACF2K,CAAAA,CAAO1I,mBAAAA,CAAQzB,CAAAA,CAAGG,CAAE,CAAA,CAAE,QAAA,CAAS,MAAA,CAAQE,CAAAA,EAAM,CAACA,CAAAA,CAAE,SAAS,CAAA,CAC/D,GAAI8J,CAAAA,CAAK,MAAA,CAAQ,CACfnK,CAAAA,CAAIoC,oBAAUpC,CAAAA,CAAGG,CAAAA,CAAKN,CAAAA,GAAQ,CAC5B,GAAGA,CAAAA,CACH,QAAA,CAAUA,CAAAA,CAAG,SAAS,GAAA,CAAKQ,CAAAA,EAAOA,CAAAA,CAAE,SAAA,CAAYA,CAAAA,CAAI,CAAE,GAAGA,CAAAA,CAAG,UAAW4B,CAAI,CAAE,CAC/E,CAAA,CAAE,CAAA,CACF,IAAA,IAAW5B,CAAAA,IAAK8J,CAAAA,CACdnK,EAAImE,mBAAAA,CACFnE,CAAAA,CACA,iBAAA,CACA,QAAA,CACA,CAAE,EAAA,CAAAG,CAAAA,CAAI,OAAA,CAASE,EAAE,EAAA,CAAI,MAAA,CAAQ,eAAgB,CAAA,CAC7C4B,CACF,EACJ,CACA,IAAA,IAAW6E,KAAK9G,CAAAA,CAAE,OAAA,CAAQ,MAAA,CAAQqB,CAAAA,EAAMA,CAAAA,CAAE,IAAA,GAASlB,CAAE,CAAA,CACnDH,EAAI,CAAE,GAAGA,CAAAA,CAAG,OAAA,CAASA,CAAAA,CAAE,OAAA,CAAQ,MAAA,CAAQqB,CAAAA,EAAMA,EAAE,EAAA,GAAOyF,CAAAA,CAAE,EAAE,CAAE,CAAA,CAC5D9G,CAAAA,CAAImE,mBAAAA,CACFnE,CAAAA,CACA,kBACA,QAAA,CACA,CAAE,EAAA,CAAI8G,CAAAA,CAAE,EAAA,CAAI,IAAA,CAAM3G,CAAAA,CAAI,MAAA,CAAQ,eAAgB,CAAA,CAC9C8B,CACF,CAAA,CAEF,IAAM4E,CAAAA,CAAMpF,mBAAAA,CAAQzB,CAAAA,CAAGG,CAAE,EACzB,OAAA,CAAI0G,CAAAA,CAAI,KAAA,GAAU,SAAA,EAAaA,CAAAA,CAAI,MAAA,GAAW,MAAA,IAC5C7G,CAAAA,CAAImC,oBAASnC,CAAAA,CAAGG,CAAAA,CAAI,CAAE,KAAA,CAAO,UAAW,MAAA,CAAQ,MAAO,CAAA,CAAG,QAAA,CAAU8B,CAAG,CAAA,CAAA,CAElEiD,mBAAAA,CAAgBlF,CAAAA,CAAGG,CAAAA,CAAI0G,CAAAA,CAAI,IAAA,GAAS,UAAA,CAAa,CAAC,WAAW,CAAA,CAAI,CAAC,WAAA,CAAa,MAAM,CAAC,CAC/F,CAGO,SAASpB,EACdjG,CAAAA,CACA4K,CAAAA,CACAnI,CAAAA,CACe,CACf,IAAMpC,CAAAA,CAAKC,mBAAAA,CAAcN,CAAK,EAC9B,GAAI,CAACK,CAAAA,CAAI,OAAOL,CAAAA,CAChB,IAAM6K,CAAAA,CAAYxK,CAAAA,CAAG,UAAU,GAAA,CAAKM,CAAAA,EAAOsB,mBAAAA,CAAQjC,CAAAA,CAAOW,CAAE,CAAC,CAAA,CACvDoF,CAAAA,CAAO8E,EAAU,MAAA,CAAQtJ,CAAAA,EAAMA,CAAAA,CAAE,MAAA,GAAW,MAAM,CAAA,CAAE,GAAA,CAAKA,CAAAA,EAAMA,EAAE,EAAE,CAAA,CACnEuJ,CAAAA,CAAUD,CAAAA,CAAU,MAAA,CAAQtJ,CAAAA,EAAMA,CAAAA,CAAE,MAAA,GAAW,SAAS,CAAA,CAAE,GAAA,CAAKA,CAAAA,EAAMA,CAAAA,CAAE,EAAE,CAAA,CACzE4D,CAAAA,CAAY0F,CAAAA,CACf,OAAQtJ,CAAAA,EAAMA,CAAAA,CAAE,MAAA,GAAW,MAAA,EAAUA,CAAAA,CAAE,MAAA,GAAW,SAAS,CAAA,CAC3D,IAAKA,CAAAA,EAAMA,CAAAA,CAAE,EAAE,CAAA,CACZwJ,CAAAA,CAAmB,MAAA,CAAO,MAAA,CAAO/K,CAAAA,CAAM,KAAK,CAAA,CAC/C,MAAA,CACEuB,CAAAA,EACCA,CAAAA,CAAE,IAAA,GAAS,UAAA,EACXA,CAAAA,CAAE,MAAA,GAAW,QACb4D,CAAAA,CAAU,QAAA,CAAS5D,CAAAA,CAAE,MAAM,CAAA,EAC3BA,CAAAA,CAAE,MAAA,GAAW,MAAA,EACbA,EAAE,MAAA,GAAW,SACjB,CAAA,CACC,GAAA,CAAKA,CAAAA,EAAMA,CAAAA,CAAE,EAAE,CAAA,CACdf,EAAmBR,CAAAA,CACvB,IAAA,IAAWW,CAAAA,IAAM,CAAC,GAAGwE,CAAAA,CAAW,GAAG4F,CAAgB,EAAGvK,CAAAA,CAAIkK,EAAAA,CAAUlK,CAAAA,CAAGG,CAAAA,CAAI8B,CAAG,CAAA,CAC9E,IAAMuI,CAAAA,CAAY5H,GAChBA,CAAAA,CAAI,MAAA,CAAO,CAACjD,CAAAA,CAAKQ,CAAAA,GAAOR,CAAAA,EAAOH,CAAAA,CAAM,KAAA,CAAMW,CAAE,CAAA,EAAG,MAAA,EAAU,CAAA,CAAA,CAAI,CAAC,CAAA,CACjE,OAAAH,CAAAA,CAAI,CACF,GAAGA,CAAAA,CACH,UAAA,CAAYA,CAAAA,CAAE,UAAA,CAAW,GAAA,CAAKqB,CAAAA,EAAM,CAClC,GAAIA,EAAE,EAAA,GAAOxB,CAAAA,CAAG,EAAA,CAAI,OAAOwB,CAAAA,CAC3B,GAAM,CAAE,OAAA,CAASoJ,EAAI,GAAGC,CAAK,CAAA,CAAIrJ,CAAAA,CACjC,OAAO,CACL,GAAGqJ,CAAAA,CACH,QAASzI,CAAAA,CACT,OAAA,CAASmI,CAAAA,GAAW,QAAA,CAAW,WAAA,CAAc,WAAA,CAC7C,SAAA,CAAAzF,CACF,CACF,CAAC,CACH,CAAA,CACOR,mBAAAA,CACLnE,CAAAA,CACA,eAAA,CACA,QAAA,CACA,CACE,GAAIH,CAAAA,CAAG,EAAA,CACP,MAAA,CAAAuK,CAAAA,CACA,IAAA,CAAA7E,CAAAA,CACA,SAAA,CAAAZ,CAAAA,CACA,iBAAA4F,CAAAA,CACA,OAAA,CAAAD,CAAAA,CACA,UAAA,CAAYE,CAAAA,CAASjF,CAAI,CAAA,CACzB,eAAA,CAAiBiF,EAAS3K,CAAAA,CAAG,SAAS,CAAA,CACtC,KAAA,CAAOA,CAAAA,CAAG,KAAA,CACV,MAAA,CAAQA,CAAAA,CAAG,MACb,CAAA,CACAoC,CACF,CACF,CAEO,SAAS0I,EAAAA,EAAkC,CAChD,OAAO,CACL,IAAA,CAAM,OAAA,CACN,UAAA,CAAYX,EAAAA,CACZ,cAAA,CAAgB5C,EAAAA,CAChB,aAAA,CAAeyC,EAAAA,CACf,aAAcjB,EAAAA,CACd,oBAAA,CAAsB,CAAC,eAAA,CAAiB,YAAA,CAAc,SAAS,CAAA,CAC/D,qBAAA,CAAuB,CAAC,eAAe,CAAA,CACvC,cAAA,CAAepJ,CAAAA,CAAuB,CACpC,IAAMmD,CAAAA,CAAMJ,CAAAA,CAAS/C,CAAK,CAAA,CACpBoL,CAAAA,CAAqB,CAAE,aAAA,CAAe,OAAA,CAAS,aAAA,CAAe,aAAc,CAAA,CAClF,OAAIjI,CAAAA,CAAI,kBAAA,GAAuB,MAAA,GAAWiI,CAAAA,CAAG,cAAA,CAAiBjI,CAAAA,CAAI,kBAAA,CAAA,CAC9DA,CAAAA,CAAI,eAAiB,MAAA,GAAWiI,CAAAA,CAAG,YAAA,CAAejI,CAAAA,CAAI,cACtDA,CAAAA,CAAI,uBAAA,GAA4B,MAAA,GAClCiI,CAAAA,CAAG,wBAA0BjI,CAAAA,CAAI,uBAAA,CAAA,CAC5BiI,CACT,CAAA,CACA,UAAA,CAAWpL,CAAAA,CAAmB,CAC5B,IAAMK,EAAKC,mBAAAA,CAAcN,CAAK,CAAA,CAC9B,OAAI,CAACK,CAAAA,EAAMA,CAAAA,CAAG,OAAA,CAAgB,EAAC,CACxB,MAAA,CAAO,MAAA,CAAOL,CAAAA,CAAM,KAAK,CAAA,CAAE,MAAA,CAC/BuB,CAAAA,EACCA,EAAE,SAAA,GAAclB,CAAAA,CAAG,EAAA,GAClBkB,CAAAA,CAAE,MAAA,GAAW,MAAA,EAAUA,CAAAA,CAAE,MAAA,GAAW,YACpCA,CAAAA,CAAE,KAAA,GAAU,QAAA,EAAYA,CAAAA,CAAE,KAAA,GAAU,QAAA,CACzC,CACF,CAAA,CACA,WAAWvB,CAAAA,CAAOY,CAAAA,CAAgB,CAChC,IAAMP,CAAAA,CAAKC,mBAAAA,CAAcN,CAAK,CAAA,CACxBmD,EAAMJ,CAAAA,CAAS/C,CAAK,CAAA,CACpBqL,CAAAA,CAAOhL,CAAAA,CAAKW,mBAAAA,CAAUX,CAAAA,CAAG,MAAA,CAAQA,EAAG,KAAK,CAAA,CAAI,EAAC,CACpD,OAAO,CACL,CAAA,aAAA,EAAgBA,CAAAA,EAAI,MAAQ,kBAAkB,CAAA,gBAAA,EAAmB8C,CAAAA,CAAI,WAAW,CAAA,CAAA,CAChF,CAAA,kBAAA,EAAqB,IAAA,CAAK,SAAA,CAAUkI,CAAI,CAAC,CAAA,mCAAA,CAAA,CACzC,CAAA,oBAAA,EAAuBlI,CAAAA,CAAI,gBAAA,CAAiB,GAAA,CAAK,CAAA,EAAO,CAAA,CAAE,OAAS,UAAA,CAAa,CAAA,SAAA,EAAY,CAAA,CAAE,YAAY,CAAA,CAAA,CAAK,CAAA,CAAE,IAAK,CAAA,CAAE,KAAK,IAAI,CAAA,EAAK,QAAQ,CAAA,CAAA,CAC9I,CAAA,4BAAA,EAA+BvC,CAAAA,CAAK,EAAE,CAAA,0DAAA,CACxC,CACF,CAAA,CACA,UAAA,CAAYiD,CAAAA,CAAgBsH,EAAK,CAAA,CACjC,KAAA,CAAOvB,EAAAA,EAAW,CAClB,QAAU5J,CAAAA,GAAW,CAAE,GAAGuI,EAAAA,CAAavI,CAAK,CAAE,CAAA,CAAA,CAC9C,MAAA,CAAOA,EAAO,CACZ,IAAMK,CAAAA,CAAKC,mBAAAA,CAAcN,CAAK,CAAA,CAC9B,OAAO,CACL,QAASK,CAAAA,EAAI,OAAA,GAAY,IAAA,CACzB,MAAA,CAAQA,CAAAA,EAAI,EAAA,EAAM,IAAA,CAClB,MAAA,CAAQA,GAAI,OAAA,CAAU,QAAA,CAAW,IAAA,CACjC,QAAA,CAAUA,CAAAA,CACN,MAAA,CAAO,MAAA,CAAOL,CAAAA,CAAM,KAAK,CAAA,CACtB,MAAA,CACEuB,CAAAA,EAAAA,CACEA,CAAAA,CAAE,SAAA,GAAclB,CAAAA,CAAG,EAAA,EAAMA,CAAAA,CAAG,UAAU,QAAA,CAASkB,CAAAA,CAAE,EAAE,CAAA,GACpDA,CAAAA,CAAE,MAAA,GAAW,aACjB,CAAA,CACC,IAAKA,CAAAA,EAAMA,CAAAA,CAAE,EAAE,CAAA,CAClB,EACN,CACF,CAAA,CACA,cAAe,CAAE,KAAA,CAAO,CAAC,eAAe,CAAE,CAAA,CAC1C,iBAAA,CAAkBvB,CAAAA,CAAO,CACvB,OAAO6C,CAAAA,CAAO7C,CAAAA,CAAO+C,CAAAA,CAAS/C,CAAK,CAAA,CAAE,gBAAgB,CACvD,EACA,aAAA,CAAcA,CAAAA,CAAOsL,CAAAA,CAAS7I,CAAAA,CAAK,CACjC,IAAMpC,CAAAA,CAAKC,mBAAAA,CAAcN,CAAK,CAAA,CAC9B,OAAI,CAACK,CAAAA,EAAO,CAACA,CAAAA,CAAG,OAAA,EAAW,CAACkL,oBAAYlL,CAAAA,CAAG,MAAA,CAAQA,CAAAA,CAAG,KAAK,CAAA,CAAWL,CAAAA,CAIlE,CAHa,MAAA,CAAO,OAAOA,CAAAA,CAAM,KAAK,CAAA,CAAE,IAAA,CACzCuB,CAAAA,EAAAA,CAAOA,CAAAA,CAAE,SAAA,GAAclB,CAAAA,CAAG,IAAMA,CAAAA,CAAG,SAAA,CAAU,QAAA,CAASkB,CAAAA,CAAE,EAAE,CAAA,GAAMA,CAAAA,CAAE,MAAA,GAAW,aAChF,CAAA,EACiBwB,CAAAA,CAAS/C,CAAK,CAAA,CAAE,SAAA,GAAc,KAAA,CACtCiG,CAAAA,CAAYjG,CAAAA,CAAO,SAAUyC,CAAG,CAAA,CACrCpC,CAAAA,CAAG,OAAA,CAAgBL,CAAAA,CAChB2E,mBAAAA,CACL,CACE,GAAG3E,EACH,UAAA,CAAYA,CAAAA,CAAM,UAAA,CAAW,GAAA,CAAK6B,CAAAA,EAAOA,CAAAA,CAAE,EAAA,GAAOxB,CAAAA,CAAG,GAAK,CAAE,GAAGwB,CAAAA,CAAG,OAAA,CAAS,IAAK,CAAA,CAAIA,CAAE,CACxF,EACA,gBAAA,CACA,QAAA,CACA,CAAE,EAAA,CAAIxB,EAAG,EAAG,CAAA,CACZoC,CACF,CACF,CACF,CACF","file":"chunk-UUOMQMWT.cjs","sourcesContent":["import { timSort } from \"exsorted\";\nimport { estimateTokens, remaining } from \"../budget.ts\";\nimport { applyAgreement, retireAgreement } from \"../agreements.ts\";\nimport { fail } from \"../errors.ts\";\nimport {\n addItem,\n editItem,\n getItem,\n moveItem,\n patchItem,\n stageOf,\n stripItemFields,\n type ItemPatch,\n} from \"../items.ts\";\nimport { applyAction } from \"../methodology.ts\";\nimport { assertPolicies, evaluatePolicies } from \"../policies.ts\";\nimport { openIteration } from \"../planner.ts\";\nimport { approverIds, canDo, requireCap } from \"../roles.ts\";\nexport { canDo };\nimport { appendEvent, nowOf } from \"../state.ts\";\nimport type {\n Budget,\n Ceremony,\n CeremonyInput,\n ItemStatus,\n Iteration,\n Lesson,\n LessonChange,\n Methodology,\n NewItem,\n Policy,\n WorkItem,\n WorkflowState,\n} from \"../types.ts\";\nimport { closeSprint, configOf, resumeStageOf } from \"./index.ts\";\n\nconst STATUSES: ItemStatus[] = [\n \"todo\",\n \"in_progress\",\n \"blocked\",\n \"review\",\n \"awaiting_human\",\n \"done\",\n \"dropped\",\n];\n\nexport interface DailyReport {\n sprint: string | null;\n goal: string | null;\n byStatus: Record<ItemStatus, number>;\n blockers: Array<{ item: string; blocker: string; owner: string; reason: string }>;\n spent: Required<Budget>;\n remaining: Budget;\n remainingWeight: number;\n raisedLessons: number;\n velocity: number | null;\n forecast: \"on-track\" | \"at-risk\" | \"unknown\";\n}\n\nexport function velocityOf(state: WorkflowState): number | null {\n const closed = state.events.filter(\n (e) => e.type === \"sprint.closed\" && (e.payload as { reason: string }).reason !== \"cancel\",\n );\n if (closed.length === 0) return null;\n return (\n closed.reduce((sum, e) => sum + (e.payload as { doneWeight: number }).doneWeight, 0) /\n closed.length\n );\n}\n\nexport function dailyReport(state: WorkflowState): DailyReport {\n const it = openIteration(state);\n const byStatus = Object.fromEntries(STATUSES.map((s) => [s, 0])) as Record<ItemStatus, number>;\n const blockers: DailyReport[\"blockers\"] = [];\n let remainingWeight = 0;\n for (const id of it?.committed ?? []) {\n const item = state.items[id];\n if (!item) continue;\n byStatus[item.status] += 1;\n if (item.status !== \"done\") remainingWeight += item.weight ?? 0;\n for (const b of item.blockers)\n if (!b.clearedAt)\n blockers.push({ item: id, blocker: b.id, owner: b.owner, reason: b.reason });\n }\n const spent = it?.spent ?? { tokens: 0, turns: 0, wallclockMs: 0 };\n const rem = it ? remaining(it.budget, it.spent) : {};\n const velocity = velocityOf(state);\n let forecast: DailyReport[\"forecast\"] = \"unknown\";\n if (it && velocity !== null && it.budget.tokens) {\n const share = (rem.tokens ?? 0) / it.budget.tokens;\n forecast = remainingWeight <= velocity * share ? \"on-track\" : \"at-risk\";\n }\n const raisedLessons = state.lessons.filter((l) => l.status === \"raised\").length;\n return {\n sprint: it?.id ?? null,\n goal: it?.goal ?? null,\n byStatus,\n blockers,\n spent,\n remaining: rem,\n remainingWeight,\n raisedLessons,\n velocity,\n forecast,\n };\n}\n\nfunction lastClosedIteration(state: WorkflowState): Iteration | undefined {\n for (let i = state.iterations.length - 1; i >= 0; i--) {\n const it = state.iterations[i]!;\n if (it.endedAt !== undefined) return it;\n }\n return undefined;\n}\n\n/** Event seq of the sprint.closed event of `id`; infinity when it is missing, so nothing counts as \"after\" it. */\nexport function closedSeq(state: WorkflowState, id: string): number {\n return (\n state.events.find((e) => e.type === \"sprint.closed\" && (e.payload as { id: string }).id === id)\n ?.seq ?? Number.POSITIVE_INFINITY\n );\n}\n\nfunction backlogOrdered(state: WorkflowState): WorkItem[] {\n const carry = new Set(lastClosedIteration(state)?.carryover ?? []);\n const items = Object.values(state.items).filter(\n (i) => i.stage === \"backlog\" && i.status === \"todo\" && i.type !== \"question\",\n );\n return timSort([...items], (x, y) => {\n const cx = carry.has(x.id) ? 1 : 0;\n const cy = carry.has(y.id) ? 1 : 0;\n if (cx !== cy) return cy - cx;\n return (y.priority ?? 0) - (x.priority ?? 0);\n });\n}\n\n/** Throw unless the item sits in the Product Backlog and meets the backlog exit policy. */\nfunction assertCommittable(state: WorkflowState, id: string): void {\n const item = getItem(state, id);\n if (item.stage !== \"backlog\" || item.status !== \"todo\")\n fail(\n \"invalid-input\",\n `item \"${id}\" is not in the Product Backlog (${item.stage}/${item.status})`,\n \"only backlog items can be committed\",\n { items: [id] },\n );\n assertPolicies(state, item, stageOf(state, \"backlog\").exitPolicy, \"enter the Sprint Backlog\");\n}\n\n/** Open questions raised by the given parents travel with them into the sprint (they carry no weight). */\nfunction attachQuestions(\n state: WorkflowState,\n parentIds: string[],\n iterationId: string,\n by: string,\n now: string,\n): WorkflowState {\n let s = state;\n for (const q of Object.values(state.items)) {\n if (\n q.type !== \"question\" ||\n q.parent === undefined ||\n !parentIds.includes(q.parent) ||\n q.status === \"done\" ||\n q.status === \"dropped\"\n )\n continue;\n if (q.stage !== \"sprint\" || q.status !== \"todo\")\n s = moveItem(s, q.id, { stage: \"sprint\", status: \"todo\" }, by, now);\n s = patchItem(s, q.id, (it) => ({ ...it, iteration: iterationId }));\n }\n return s;\n}\n\n/** Set the Definition of Done in the config and on the review stage. */\nexport function setDod(state: WorkflowState, policies: Policy[]): WorkflowState {\n return {\n ...state,\n config: { ...configOf(state), definitionOfDone: policies },\n stages: state.stages.map((st) => (st.id === \"review\" ? { ...st, exitPolicy: policies } : st)),\n };\n}\n\ninterface Skipped {\n id: string;\n reason: \"policy\" | \"budget\";\n detail: string;\n}\n\nfunction selectAuto(state: WorkflowState, budget: Budget): { ids: string[]; skipped: Skipped[] } {\n const cfg = configOf(state);\n const ids: string[] = [];\n const skipped: Skipped[] = [];\n const exit = stageOf(state, \"backlog\").exitPolicy;\n let tokens = 0;\n for (const item of backlogOrdered(state)) {\n const unmet = evaluatePolicies(state, item, exit);\n if (unmet.length > 0) {\n skipped.push({\n id: item.id,\n reason: \"policy\",\n detail: unmet.map((u) => u.message).join(\"; \"),\n });\n continue;\n }\n if (budget.turns !== undefined && ids.length >= budget.turns) {\n skipped.push({ id: item.id, reason: \"budget\", detail: \"turns budget full\" });\n continue;\n }\n if (budget.tokens !== undefined) {\n const est = estimateTokens(state, item.weight, cfg.fallbackTokensPerWeight, cfg.estimateMode);\n if (tokens + est > budget.tokens) {\n skipped.push({\n id: item.id,\n reason: \"budget\",\n detail: `needs about ${est} tokens, ${budget.tokens - tokens} left`,\n });\n continue;\n }\n tokens += est;\n }\n ids.push(item.id);\n }\n return { ids, skipped };\n}\n\nexport function scrumCeremonies(methodology: () => Methodology): Record<string, Ceremony> {\n const act = (\n state: WorkflowState,\n type: string,\n input: CeremonyInput,\n reduce: (s: WorkflowState, now: string) => WorkflowState,\n ) =>\n applyAction(state, methodology(), { type, by: input.by, payload: input }, (s) =>\n reduce(s, nowOf(input.now)),\n );\n\n const refine: Ceremony = (state, input) => {\n requireCap(state, input.by, \"define-acceptance\", \"deliver\");\n const items = (input[\"items\"] ?? []) as Array<{ id: string; patch: ItemPatch }>;\n const split = (input[\"split\"] ?? []) as Array<{ from: string; into: NewItem[] }>;\n const reestimateRaw: unknown = input[\"reestimate\"] ?? [];\n if (!Array.isArray(reestimateRaw) || !reestimateRaw.every((x) => typeof x === \"string\"))\n fail(\n \"invalid-input\",\n \"refine.reestimate must be a list of item ids\",\n 'pass reestimate: [\"A\"]',\n );\n const reestimate = reestimateRaw as string[];\n if (items.length === 0 && split.length === 0 && reestimate.length === 0)\n fail(\n \"invalid-input\",\n \"refine needs items[], split[] or reestimate[]\",\n \"pass at least one patch, split or reestimate\",\n );\n for (const id of reestimate) {\n const it = getItem(state, id);\n if (it.stage !== \"backlog\" || it.status !== \"todo\" || it.weight === undefined)\n fail(\n \"invalid-input\",\n `item \"${id}\" has no weight to confirm in the Product Backlog`,\n \"refine it with a patch { weight } instead\",\n { items: [id] },\n );\n }\n return act(state, \"ceremony.refine\", input, (s, now) => {\n for (const { id, patch } of items) s = editItem(s, id, patch, input.by, now);\n for (const id of reestimate)\n s = appendEvent(\n s,\n \"item.reestimated\",\n input.by,\n { id, weight: getItem(s, id).weight },\n now,\n );\n for (const sp of split) {\n getItem(s, sp.from);\n for (const n of sp.into) s = addItem(s, { ...n, parent: sp.from }, input.by, now);\n s = moveItem(s, sp.from, { status: \"dropped\" }, input.by, now);\n }\n return appendEvent(\n s,\n \"ceremony.refine\",\n input.by,\n {\n edited: items.map((i) => i.id),\n split: split.map((x) => ({ from: x.from, into: x.into.map((n) => n.id) })),\n reestimated: reestimate,\n },\n now,\n );\n });\n };\n\n const plan: Ceremony = (state, input) => {\n requireCap(state, input.by, \"facilitate\");\n const goal = input[\"goal\"];\n if (typeof goal !== \"string\" || goal.trim() === \"\")\n fail(\n \"invalid-input\",\n \"sprint planning needs a non-empty goal\",\n \"state the Sprint Goal in one sentence\",\n );\n const cfg = configOf(state);\n const budget = (input[\"budget\"] as Budget | undefined) ?? cfg.sprintBudget;\n const auto = input[\"items\"] === \"auto\" ? selectAuto(state, budget) : undefined;\n const skipped = auto?.skipped ?? [];\n const wanted = auto ? auto.ids : (input[\"items\"] as string[] | undefined);\n if (!Array.isArray(wanted))\n fail(\n \"invalid-input\",\n 'sprint planning needs items: string[] or \"auto\"',\n 'pass [\"A\",\"B\"] or \"auto\"',\n );\n if (wanted.length === 0)\n fail(\n \"invalid-input\",\n `no backlog items fit the sprint${\n skipped.length\n ? `; skipped: ${skipped.map((x) => `${x.id} (${x.reason}: ${x.detail})`).join(\", \")}`\n : \"\"\n }`,\n \"refine the backlog (acceptance + estimates) or raise the budget with exwf config set\",\n );\n for (const id of wanted) assertCommittable(state, id);\n return act(state, \"ceremony.plan\", input, (s, now) => {\n const id = `S${s.iterations.length + 1}`;\n const last = lastClosedIteration(s);\n const carryover = wanted.filter((w) => last?.carryover.includes(w));\n const resumed: string[] = [];\n for (const w of wanted) {\n const rs = resumeStageOf(getItem(s, w), s);\n if (rs) resumed.push(w);\n s = moveItem(\n s,\n w,\n rs ? { stage: rs, status: \"review\" } : { stage: \"sprint\", status: \"todo\" },\n input.by,\n now,\n );\n s = patchItem(s, w, (it) => ({ ...it, iteration: id }));\n }\n s = attachQuestions(s, wanted, id, input.by, now);\n const committedWeight = wanted.reduce((sum, w) => sum + (s.items[w]?.weight ?? 0), 0);\n s = {\n ...s,\n iterations: [\n ...s.iterations,\n {\n id,\n goal,\n budget,\n spent: { tokens: 0, turns: 0, wallclockMs: 0 },\n startedAt: now,\n committed: [...wanted],\n carryover,\n },\n ],\n };\n return appendEvent(\n s,\n \"sprint.opened\",\n input.by,\n { id, goal, committed: wanted, committedWeight, budget, skipped, resumed },\n now,\n );\n });\n };\n\n const commit: Ceremony = (state, input) => {\n const it = openIteration(state);\n if (!it) fail(\"invalid-input\", \"no open sprint to commit into\", \"run the plan ceremony first\");\n const items = input[\"items\"] as string[] | undefined;\n if (!Array.isArray(items) || items.length === 0)\n fail(\"invalid-input\", \"commit needs items[]\", 'pass [\"A\"]');\n const seen = new Set<string>();\n for (const id of items) {\n if (seen.has(id))\n fail(\"invalid-input\", `item \"${id}\" appears twice in items[]`, \"list each item once\", {\n items: [id],\n });\n seen.add(id);\n getItem(state, id);\n if (it.committed.includes(id))\n fail(\"invalid-input\", `item \"${id}\" is already committed to ${it.id}`, \"nothing to do\", {\n items: [id],\n });\n assertCommittable(state, id);\n }\n return act(state, \"ceremony.commit\", input, (s, now) => {\n const resumed: string[] = [];\n for (const id of items) {\n const rs = resumeStageOf(getItem(s, id), s);\n if (rs) resumed.push(id);\n s = moveItem(\n s,\n id,\n rs ? { stage: rs, status: \"review\" } : { stage: \"sprint\", status: \"todo\" },\n input.by,\n now,\n );\n s = patchItem(s, id, (x) => ({ ...x, iteration: it.id }));\n }\n s = attachQuestions(s, items, it.id, input.by, now);\n s = {\n ...s,\n iterations: s.iterations.map((x) =>\n x.id === it.id ? { ...x, committed: [...x.committed, ...items] } : x,\n ),\n };\n return appendEvent(\n s,\n \"sprint.committed\",\n input.by,\n { id: it.id, items, goalImpact: input[\"goalImpact\"] ?? null, resumed },\n now,\n );\n });\n };\n\n const uncommit: Ceremony = (state, input) => {\n requireCap(state, input.by, \"order-backlog\");\n const it = openIteration(state);\n if (!it) fail(\"invalid-input\", \"no open sprint\", \"nothing to uncommit from\");\n const items = input[\"items\"] as string[] | undefined;\n if (!Array.isArray(items) || items.length === 0)\n fail(\"invalid-input\", \"uncommit needs items[]\", 'pass [\"A\"]');\n for (const id of items) {\n if (getItem(state, id).status === \"done\")\n fail(\"invalid-input\", `item \"${id}\" is done`, \"finished work cannot be uncommitted\", {\n items: [id],\n });\n }\n for (const id of items)\n if (!it.committed.includes(id))\n fail(\n \"invalid-input\",\n `item \"${id}\" is not committed to ${it.id}`,\n `committed: ${it.committed.join(\", \")}`,\n { items: [id] },\n );\n return act(state, \"ceremony.uncommit\", input, (s, now) => {\n for (const id of items) {\n s = moveItem(s, id, { stage: \"backlog\", status: \"todo\" }, input.by, now);\n s = stripItemFields(s, id, [\"iteration\", \"role\"]);\n }\n s = {\n ...s,\n iterations: s.iterations.map((x) =>\n x.id === it.id ? { ...x, committed: x.committed.filter((c) => !items.includes(c)) } : x,\n ),\n };\n return appendEvent(\n s,\n \"sprint.uncommitted\",\n input.by,\n { id: it.id, items, reason: input[\"reason\"] ?? \"\" },\n now,\n );\n });\n };\n\n const daily: Ceremony = (state, input) =>\n act(state, \"ceremony.daily\", input, (s, now) =>\n appendEvent(s, \"daily\", input.by, dailyReport(s), now),\n );\n\n const review: Ceremony = (state, input) => {\n const it = openIteration(state);\n if (!it) fail(\"invalid-input\", \"no open sprint to review\", \"run the plan ceremony first\");\n const approvers = approverIds(state, \"sprint-review\");\n if (input.by !== \"human\" && !approvers.includes(input.by)) {\n fail(\n \"gate-unmet\",\n `\"${input.by}\" may not accept the Sprint Review`,\n `run review as \"human\" or as ${approvers.join(\", \") || \"a role with canApprove sprint-review\"}`,\n { rule: \"sprint-review\" },\n );\n }\n const feedback = (input[\"feedback\"] ?? []) as NewItem[];\n return act(state, \"ceremony.review\", input, (s, now) => {\n for (const n of feedback) s = addItem(s, { ...n, stage: \"backlog\" }, input.by, now);\n const done = it.committed.filter((id) => s.items[id]?.status === \"done\");\n s = appendEvent(\n s,\n \"increment\",\n input.by,\n {\n sprint: it.id,\n done,\n goalMet: input[\"goalMet\"] === true,\n accepted: input[\"accepted\"] === true,\n feedback: feedback.map((f) => f.id),\n },\n now,\n );\n return closeSprint(s, \"review\", now);\n });\n };\n\n const retro: Ceremony = (state, input) => {\n requireCap(state, input.by, \"facilitate\");\n const last = lastClosedIteration(state);\n if (!last)\n fail(\n \"invalid-input\",\n \"no closed sprint to retrospect\",\n \"close the sprint (review or cancel) first\",\n );\n if (openIteration(state))\n fail(\n \"invalid-input\",\n \"a sprint is still open\",\n \"retro runs between sprints; review or cancel the open one\",\n );\n const closedAt = closedSeq(state, last.id);\n if (state.events.some((e) => e.type === \"retro\" && e.seq > closedAt))\n fail(\n \"invalid-input\",\n `sprint ${last.id} already has a retrospective`,\n \"plan the next sprint\",\n );\n const newLessons = (input[\"lessons\"] ?? []) as Array<{\n text: string;\n scope: Lesson[\"scope\"];\n from?: string;\n item?: string;\n suggestedChange?: LessonChange;\n }>;\n const roleIds = [\"human\", ...Object.keys(state.roles)];\n for (const l of newLessons) {\n if (l.from !== undefined && (typeof l.from !== \"string\" || !roleIds.includes(l.from)))\n fail(\n \"invalid-input\",\n `lesson from ${JSON.stringify(l.from)} is not a role`,\n `from is \"human\" or one of the roles: ${Object.keys(state.roles).join(\", \") || \"(none)\"}`,\n );\n if (l.item !== undefined) {\n if (typeof l.item !== \"string\")\n fail(\n \"invalid-input\",\n \"lesson item must be an item id\",\n \"name an item with addItem first\",\n );\n getItem(state, l.item);\n }\n }\n const retireRaw: unknown = input[\"retire\"] ?? [];\n if (\n !Array.isArray(retireRaw) ||\n !retireRaw.every((x) => typeof x === \"string\") ||\n retireRaw.some((x, i) => retireRaw.indexOf(x) !== i)\n )\n fail(\n \"invalid-input\",\n \"retro.retire must be a list of distinct agreement texts\",\n 'e.g. { \"retire\": [\"review in a fresh worker\"] }; each agreement once',\n );\n const retire = retireRaw as string[];\n const adopt = (input[\"adopt\"] ?? []) as Array<{ id: string; suggestedChange?: LessonChange }>;\n const dismiss = (input[\"dismiss\"] ?? []) as string[];\n const dod = input[\"dodChanges\"] as Policy[] | undefined;\n const refs = [...adopt.map((a) => a.id), ...dismiss];\n const dupe = refs.find((r, i) => refs.indexOf(r) !== i);\n if (dupe)\n fail(\n \"invalid-input\",\n `lesson \"${dupe}\" is referenced more than once`,\n \"adopt or dismiss each lesson once\",\n );\n for (const ref of refs) {\n const l = state.lessons.find((x) => x.id === ref);\n if (!l)\n fail(\n \"invalid-input\",\n `no lesson \"${ref}\"`,\n `raised lessons: ${\n state.lessons\n .filter((x) => x.status === \"raised\")\n .map((x) => x.id)\n .join(\", \") || \"(none)\"\n }`,\n );\n if (l.status !== \"raised\")\n fail(\n \"invalid-input\",\n `lesson \"${ref}\" is already ${l.status}`,\n \"only raised lessons can be adopted or dismissed\",\n );\n }\n return act(state, \"ceremony.retro\", input, (s, now) => {\n const adopted: string[] = [];\n const agreements: string[] = [];\n const backlogAdded: string[] = [];\n let dodChanged = false;\n const applyChange = (c: LessonChange | undefined) => {\n if (!c) return;\n if (c.kind === \"agreement\") {\n s = applyAgreement(s, c, input.by, now);\n agreements.push(c.text);\n } else if (c.kind === \"dod\") {\n const cur = configOf(s).definitionOfDone;\n if (!cur.some((p) => JSON.stringify(p) === JSON.stringify(c.policy))) {\n dodChanged = true;\n s = setDod(s, [...cur, c.policy]);\n }\n } else if (c.kind === \"backlog\") {\n s = addItem(\n s,\n { ...c.item, stage: \"backlog\", tags: [...(c.item.tags ?? []), \"retro\"] },\n input.by,\n now,\n );\n backlogAdded.push(c.item.id);\n }\n };\n for (const l of newLessons) {\n const id = `L${s.lessons.length + 1}`;\n const lesson: Lesson = {\n id,\n at: now,\n text: l.text,\n scope: l.scope,\n status: \"adopted\",\n from: l.from ?? input.by,\n };\n if (l.item !== undefined) lesson.item = l.item;\n if (l.suggestedChange) lesson.suggestedChange = l.suggestedChange;\n s = { ...s, lessons: [...s.lessons, lesson] };\n adopted.push(id);\n applyChange(l.suggestedChange);\n }\n for (const a of adopt) {\n s = {\n ...s,\n lessons: s.lessons.map((x) =>\n x.id === a.id\n ? {\n ...x,\n status: \"adopted\" as const,\n ...(a.suggestedChange ? { suggestedChange: a.suggestedChange } : {}),\n }\n : x,\n ),\n };\n adopted.push(a.id);\n applyChange(a.suggestedChange ?? s.lessons.find((x) => x.id === a.id)?.suggestedChange);\n }\n for (const d of dismiss)\n s = {\n ...s,\n lessons: s.lessons.map((x) => (x.id === d ? { ...x, status: \"dismissed\" as const } : x)),\n };\n for (const text of retire) s = retireAgreement(s, text, input.by, now);\n if (dod) {\n dodChanged = true;\n s = setDod(s, dod);\n }\n return appendEvent(\n s,\n \"retro\",\n input.by,\n {\n sprint: last.id,\n adopted,\n dismissed: dismiss,\n agreements,\n retired: retire,\n dodChanged,\n backlogAdded,\n },\n now,\n );\n });\n };\n\n const cancel: Ceremony = (state, input) => {\n requireCap(state, input.by, \"order-backlog\");\n const it = openIteration(state);\n if (!it) fail(\"invalid-input\", \"no open sprint to cancel\", \"nothing to do\");\n return act(state, \"ceremony.cancel\", input, (s, now) => {\n s = appendEvent(\n s,\n \"sprint.cancelled\",\n input.by,\n { id: it.id, reason: input[\"reason\"] ?? \"\" },\n now,\n );\n return closeSprint(s, \"cancel\", now);\n });\n };\n\n return { refine, plan, commit, uncommit, daily, review, retro, cancel };\n}\n","import type { EstimateMode } from \"../budget.ts\";\nimport { fail } from \"../errors.ts\";\nimport type { Budget, Policy } from \"../types.ts\";\n\nexport interface ScrumConfig {\n sprintBudget: Budget;\n productGoal: string;\n definitionOfDone: Policy[];\n refinementSharePct: number;\n allowMidSprintAdd: \"never\" | \"po-only\" | \"any\";\n inProgressWipLimit?: number;\n /** Close the sprint automatically when its budget is spent and nothing is in flight; default true. */\n autoClose?: boolean;\n /** How the planner and sprint planning price a candidate; default \"per-weight\". */\n estimateMode?: EstimateMode;\n /** Tokens per weight unit when no accounting history exists; default 20000. */\n fallbackTokensPerWeight?: number;\n}\n\nconst ADD_MODES = new Set([\"never\", \"po-only\", \"any\"]);\n\nexport function validateScrumConfig(raw: unknown): ScrumConfig {\n const c = (raw ?? {}) as Record<string, unknown>;\n const budget = c[\"sprintBudget\"] as Budget | undefined;\n if (\n !budget ||\n typeof budget !== \"object\" ||\n (budget.tokens === undefined && budget.turns === undefined && budget.wallclockMs === undefined)\n ) {\n fail(\n \"config-invalid\",\n \"scrum config.sprintBudget must define tokens, turns or wallclockMs\",\n 'e.g. { \"sprintBudget\": { \"tokens\": 400000, \"turns\": 60 } }',\n );\n }\n if (typeof c[\"productGoal\"] !== \"string\" || c[\"productGoal\"].trim() === \"\")\n fail(\n \"config-invalid\",\n \"scrum config.productGoal must be a non-empty string\",\n \"state the Product Goal in one sentence\",\n );\n if (!Array.isArray(c[\"definitionOfDone\"]))\n fail(\n \"config-invalid\",\n \"scrum config.definitionOfDone must be a Policy[]\",\n 'e.g. [{ \"kind\": \"evidence\", \"evidenceKind\": \"test-output\" }]',\n );\n const share = c[\"refinementSharePct\"] ?? 10;\n if (typeof share !== \"number\" || share < 0 || share > 100)\n fail(\n \"config-invalid\",\n \"scrum config.refinementSharePct must be 0..100\",\n \"omit it for the default 10\",\n );\n const add = c[\"allowMidSprintAdd\"] ?? \"po-only\";\n if (typeof add !== \"string\" || !ADD_MODES.has(add))\n fail(\n \"config-invalid\",\n `scrum config.allowMidSprintAdd must be never | po-only | any (got ${JSON.stringify(add)})`,\n 'use \"po-only\" unless you have a reason',\n );\n const wip = c[\"inProgressWipLimit\"];\n if (wip !== undefined && (typeof wip !== \"number\" || wip < 1))\n fail(\n \"config-invalid\",\n \"scrum config.inProgressWipLimit must be a positive number\",\n \"omit it for no limit\",\n );\n const autoClose = c[\"autoClose\"];\n if (autoClose !== undefined && typeof autoClose !== \"boolean\")\n fail(\n \"config-invalid\",\n \"scrum config.autoClose must be true or false\",\n \"omit it for the default true\",\n );\n const mode = c[\"estimateMode\"];\n if (mode !== undefined && mode !== \"per-weight\" && mode !== \"per-call\")\n fail(\n \"config-invalid\",\n `scrum config.estimateMode must be per-weight | per-call (got ${JSON.stringify(mode)})`,\n 'use \"per-weight\" (the default) or \"per-call\"',\n );\n const fallback = c[\"fallbackTokensPerWeight\"];\n if (\n fallback !== undefined &&\n (typeof fallback !== \"number\" || !Number.isFinite(fallback) || fallback <= 0)\n )\n fail(\n \"config-invalid\",\n \"scrum config.fallbackTokensPerWeight must be a positive finite number\",\n \"omit it for the default 20000\",\n );\n const out: ScrumConfig = {\n sprintBudget: budget,\n productGoal: c[\"productGoal\"],\n definitionOfDone: c[\"definitionOfDone\"] as Policy[],\n refinementSharePct: share,\n allowMidSprintAdd: add as ScrumConfig[\"allowMidSprintAdd\"],\n };\n if (wip !== undefined) out.inProgressWipLimit = wip as number;\n if (autoClose !== undefined) out.autoClose = autoClose as boolean;\n if (mode !== undefined) out.estimateMode = mode as EstimateMode;\n if (fallback !== undefined) out.fallbackTokensPerWeight = fallback as number;\n return out;\n}\n","import { openIteration } from \"../planner.ts\";\nimport type { Budget, WorkflowState } from \"../types.ts\";\n\ninterface Closed {\n id?: string;\n reason: string;\n done: string[];\n carryover: string[];\n doneWeight: number;\n committedWeight: number;\n spent: Required<Budget>;\n budget: Budget;\n}\n\nexport interface ScrumMetrics {\n velocity: number[];\n meanVelocity: number;\n burndown: number[];\n commitmentReliability: number;\n sprintGoalHitRate: number;\n carryoverRatio: number;\n budgetUtilisation: number;\n costPerPoint: number;\n /** The open sprint right now; all zeros when none is open. */\n current: Record<string, number>;\n}\n\nconst ratio = (num: number, den: number) => (den === 0 ? 0 : num / den);\n\nexport function scrumMetrics(state: WorkflowState): ScrumMetrics {\n const corrections = state.events.filter((e) => e.type === \"accounting.corrected\");\n const closed = state.events\n .filter((e) => e.type === \"sprint.closed\")\n .map((e) => {\n const c = e.payload as Closed;\n // corrections recorded after the close still belong to that sprint's spend\n const late = corrections\n .filter(\n (x) =>\n x.seq > e.seq &&\n c.id !== undefined &&\n (x.payload as { iteration: string | null }).iteration === c.id,\n )\n .reduce((sum, x) => sum + (x.payload as { delta: { tokens: number } }).delta.tokens, 0);\n return late === 0 ? c : { ...c, spent: { ...c.spent, tokens: c.spent.tokens + late } };\n });\n const counted = closed.filter((c) => c.reason !== \"cancel\");\n const velocity = counted.map((c) => c.doneWeight);\n const doneWeight = counted.reduce((s, c) => s + c.doneWeight, 0);\n const committedWeight = counted.reduce((s, c) => s + c.committedWeight, 0);\n const increments = state.events\n .filter((e) => e.type === \"increment\")\n .map((e) => e.payload as { goalMet: boolean });\n const withTokens = closed.filter((c) => c.budget.tokens !== undefined);\n const tokensSpent = counted.reduce((s, c) => s + c.spent.tokens, 0);\n return {\n velocity,\n meanVelocity: ratio(\n velocity.reduce((s, x) => s + x, 0),\n velocity.length,\n ),\n burndown: state.events\n .filter((e) => e.type === \"daily\")\n .map((e) => (e.payload as { remainingWeight: number }).remainingWeight),\n commitmentReliability: ratio(doneWeight, committedWeight),\n sprintGoalHitRate: ratio(increments.filter((i) => i.goalMet).length, increments.length),\n carryoverRatio: ratio(\n closed.reduce((s, c) => s + c.carryover.length, 0),\n closed.reduce((s, c) => s + c.done.length + c.carryover.length, 0),\n ),\n budgetUtilisation: ratio(\n withTokens.reduce((s, c) => s + c.spent.tokens, 0),\n withTokens.reduce((s, c) => s + (c.budget.tokens ?? 0), 0),\n ),\n costPerPoint: ratio(tokensSpent, doneWeight), // cost per delivered point over completed sprints\n current: currentSprint(state),\n };\n}\n\nfunction currentSprint(state: WorkflowState): Record<string, number> {\n const it = openIteration(state);\n const items = (it?.committed ?? []).map((id) => state.items[id]).filter((i) => i !== undefined);\n const weight = (list: typeof items) => list.reduce((sum, i) => sum + (i.weight ?? 0), 0);\n const committedWeight = weight(items);\n const doneWeight = weight(items.filter((i) => i.status === \"done\"));\n const spentTokens = it?.spent.tokens ?? 0;\n const budgetTokens = it?.budget.tokens ?? 0;\n return {\n spentTokens,\n spentTurns: it?.spent.turns ?? 0,\n budgetTokens,\n committedWeight,\n doneWeight,\n remainingWeight: committedWeight - doneWeight,\n costPerPoint: ratio(spentTokens, doneWeight),\n budgetUtilisation: ratio(spentTokens, budgetTokens),\n };\n}\n","import type { Role } from \"../types.ts\";\n\nexport function scrumRoles(): Role[] {\n return [\n {\n id: \"product-owner\",\n name: \"Product Owner\",\n modelTier: \"large\",\n capabilities: [\"order-backlog\", \"define-acceptance\", \"escalate\"],\n canApprove: [\"sprint-review\"],\n inputs: [\"stakeholder-needs\", \"product-goal\"],\n outputs: [\"ordered-backlog\", \"acceptance-criteria\"],\n do_not: [\"do not implement items yourself\"],\n },\n {\n id: \"scrum-master\",\n name: \"Scrum Master\",\n modelTier: \"large\",\n capabilities: [\"facilitate\", \"escalate\"],\n canApprove: [],\n inputs: [\"board\", \"blockers\"],\n outputs: [\"ceremony-records\", \"lessons\"],\n do_not: [\"do not reorder the Product Backlog\", \"do not assign work; the planner pulls\"],\n },\n {\n id: \"developer\",\n name: \"Developer\",\n modelTier: \"small\",\n capabilities: [\"deliver\", \"review\", \"verify\"],\n canApprove: [],\n inputs: [\"brief\"],\n outputs: [\"code\", \"test-output\"],\n do_not: [\"do not change acceptance criteria\", \"do not touch items outside your brief\"],\n },\n ];\n}\n","import { fail } from \"../errors.ts\";\nimport { openIteration } from \"../planner.ts\";\nimport type { Budget, Iteration, Policy, Rule, Violation, WorkflowState } from \"../types.ts\";\nimport type { ItemPatch } from \"../items.ts\";\nimport { canDo, closedSeq } from \"./ceremonies.ts\";\nimport { configOf, resumeStageOf } from \"./index.ts\";\n\nconst v = (\n rule: string,\n severity: Violation[\"severity\"],\n message: string,\n fix: string,\n item?: string,\n): Violation => (item ? { rule, severity, item, message, fix } : { rule, severity, message, fix });\n\nfunction lastClosed(state: WorkflowState): Iteration | undefined {\n for (let i = state.iterations.length - 1; i >= 0; i--) {\n const it = state.iterations[i]!;\n if (it.endedAt !== undefined) return it;\n }\n return undefined;\n}\n/** Canonical identity of a Definition of Done policy, independent of JSON key order. */\nconst policyKey = (p: Policy): string =>\n p.kind === \"evidence\"\n ? `evidence:${p.evidenceKind}`\n : p.kind === \"custom\"\n ? `custom:${p.id}`\n : p.kind;\n\nexport function scrumRules(): Rule[] {\n const oneOpen: Rule = {\n id: \"one-open-sprint\",\n severity: \"error\",\n check: (s, a) =>\n a.type === \"ceremony.plan\" && openIteration(s)\n ? [\n v(\n \"one-open-sprint\",\n \"error\",\n `sprint ${openIteration(s)!.id} is still open`,\n \"review or cancel it before planning the next sprint\",\n ),\n ]\n : [],\n };\n\n const retroFirst: Rule = {\n id: \"retro-before-plan\",\n severity: \"error\",\n check: (s, a) => {\n if (a.type !== \"ceremony.plan\") return [];\n const last = lastClosed(s);\n if (!last) return [];\n const seq = closedSeq(s, last.id);\n if (s.events.some((e) => e.type === \"retro\" && e.seq > seq)) return [];\n const sev = last.outcome === \"cancelled\" ? \"warning\" : \"error\";\n return [\n v(\n \"retro-before-plan\",\n sev,\n `sprint ${last.id} has no retrospective yet`,\n \"run the retro ceremony first (lessons may be empty)\",\n ),\n ];\n },\n };\n\n const budgetFixed: Rule = {\n id: \"sprint-budget-fixed\",\n severity: \"error\",\n check: (s, a) => {\n if (a.type !== \"ceremony.plan\") return [];\n const b = (a.payload as { budget?: Budget } | undefined)?.budget;\n if (b === undefined || JSON.stringify(b) === JSON.stringify(configOf(s).sprintBudget))\n return [];\n return [\n v(\n \"sprint-budget-fixed\",\n \"error\",\n \"sprint length is fixed by config.sprintBudget\",\n \"change sprintBudget between sprints with changeConfig / exwf config set, not per plan\",\n ),\n ];\n },\n };\n\n const scope: Rule = {\n id: \"scope-protects-goal\",\n severity: \"error\",\n check: (s, a) => {\n if (a.type !== \"ceremony.commit\") return [];\n const cfg = configOf(s);\n const p = (a.payload ?? {}) as { goalImpact?: string };\n if (cfg.allowMidSprintAdd === \"never\")\n return [\n v(\n \"scope-protects-goal\",\n \"error\",\n \"mid-sprint additions are disabled\",\n 'set allowMidSprintAdd to \"po-only\" or wait for the next sprint',\n ),\n ];\n if (cfg.allowMidSprintAdd === \"po-only\" && !canDo(s, a.by, \"order-backlog\"))\n return [\n v(\n \"scope-protects-goal\",\n \"error\",\n `\"${a.by}\" may not add work mid-sprint`,\n \"ask the Product Owner (order-backlog) to commit it\",\n ),\n ];\n if (p.goalImpact !== \"none\")\n return [\n v(\n \"scope-protects-goal\",\n \"error\",\n `adding work with goalImpact \"${p.goalImpact ?? \"unset\"}\" endangers the Sprint Goal`,\n 'only commit items with goalImpact: \"none\"; otherwise cancel and re-plan',\n ),\n ];\n return [];\n },\n };\n\n const closing: Rule = {\n id: \"sprint-closing\",\n severity: \"error\",\n check: (s, a) => {\n const it = openIteration(s);\n return a.type === \"ceremony.commit\" && it?.closing\n ? [\n v(\n \"sprint-closing\",\n \"error\",\n `sprint ${it.id} is closing: its budget is spent and no new work can start`,\n \"run ceremony review or cancel first, then plan the next sprint\",\n ),\n ]\n : [];\n },\n };\n\n const stageIds: Rule = {\n id: \"scrum-stage-ids\",\n severity: \"error\",\n check: (s, a) => {\n if (a.type !== \"init\") return [];\n const missing = [\"backlog\", \"sprint\", \"review\"].filter(\n (id) => !s.stages.some((st) => st.id === id),\n );\n if (missing.length)\n fail(\n \"config-invalid\",\n `scrum stages lack the required id(s): ${missing.join(\", \")}`,\n \"keep the stages backlog, sprint and review (omit stages to use the defaults), then run exwf init scrum again\",\n );\n return [];\n },\n };\n\n const poOrders: Rule = {\n id: \"po-orders-backlog\",\n severity: \"error\",\n check: (s, a) => {\n if (a.type !== \"ceremony.refine\" || canDo(s, a.by, \"order-backlog\")) return [];\n const items =\n ((a.payload ?? {}) as { items?: Array<{ id: string; patch: ItemPatch }> }).items ?? [];\n return items\n .filter((i) => i.patch.priority !== undefined)\n .map((i) =>\n v(\n \"po-orders-backlog\",\n \"error\",\n `\"${a.by}\" may not change the priority of \"${i.id}\"`,\n \"only the Product Owner orders the backlog; drop priority from the patch\",\n i.id,\n ),\n );\n },\n };\n\n const dod: Rule = {\n id: \"dod-not-weakened\",\n severity: \"error\",\n check: (s, a) => {\n if (a.type !== \"ceremony.retro\") return [];\n const p = (a.payload ?? {}) as { dodChanges?: unknown; allowWeaken?: boolean };\n if (p.dodChanges === undefined) return [];\n if (openIteration(s))\n return [\n v(\n \"dod-not-weakened\",\n \"error\",\n \"Definition of Done cannot change while a sprint is open\",\n \"close the sprint first; DoD changes apply to the next sprint\",\n ),\n ];\n if (!Array.isArray(p.dodChanges) || p.allowWeaken === true) return [];\n const next = p.dodChanges as Policy[];\n const kept = new Set(next.map(policyKey));\n const removed = configOf(s).definitionOfDone.filter((q) => !kept.has(policyKey(q)));\n if (removed.length === 0) return [];\n const describe = removed.map((q) => policyKey(q).replace(\":\", \" \"));\n return [\n v(\n \"dod-not-weakened\",\n \"error\",\n `retro dodChanges drops ${removed.length} Definition of Done policy(ies): ${describe.join(\", \")}`,\n 'keep them in dodChanges (it replaces the whole list; suggestedChange { kind: \"dod\" } appends one), or pass allowWeaken: true to weaken the Definition of Done knowingly',\n ),\n ];\n },\n };\n\n const carry: Rule = {\n id: \"carryover-reestimated\",\n severity: \"error\",\n check: (s, a) => {\n if (a.type !== \"ceremony.plan\") return [];\n const items = (a.payload as { items?: string[] | \"auto\" } | undefined)?.items;\n if (!Array.isArray(items)) return [];\n const last = lastClosed(s);\n if (!last) return [];\n const seq = closedSeq(s, last.id);\n return items\n .filter(\n (id) =>\n last.carryover.includes(id) &&\n !(s.items[id] && resumeStageOf(s.items[id], s) !== undefined) &&\n !s.events.some(\n (e) =>\n e.seq > seq &&\n (e.payload as { id: string }).id === id &&\n ((e.type === \"item.edited\" &&\n (e.payload as { changed: string[] }).changed.includes(\"weight\")) ||\n e.type === \"item.reestimated\"),\n ),\n )\n .map((id) =>\n v(\n \"carryover-reestimated\",\n \"error\",\n `carried-over item \"${id}\" was not re-estimated after ${last.id}`,\n \"refine it with a new weight before committing\",\n id,\n ),\n );\n },\n };\n\n return [oneOpen, retroFirst, budgetFixed, closing, stageIds, scope, poOrders, dod, carry];\n}\n","import type { Stage } from \"../types.ts\";\nimport type { ScrumConfig } from \"./config.ts\";\n\nexport function scrumStages(config: ScrumConfig): Stage[] {\n const inProgress: Stage = {\n id: \"in_progress\",\n name: \"In progress\",\n entryPolicy: [{ kind: \"dependencies-done\" }],\n exitPolicy: [],\n };\n if (config.inProgressWipLimit !== undefined) inProgress.wipLimit = config.inProgressWipLimit;\n return [\n {\n id: \"backlog\",\n name: \"Product Backlog\",\n entryPolicy: [],\n exitPolicy: [{ kind: \"acceptance-written\" }, { kind: \"estimate-present\" }],\n },\n { id: \"sprint\", name: \"Sprint Backlog\", entryPolicy: [], exitPolicy: [] },\n inProgress,\n {\n id: \"review\",\n name: \"Review\",\n entryPolicy: [],\n exitPolicy: config.definitionOfDone,\n review: true,\n },\n { id: \"done\", name: \"Increment\", entryPolicy: [], exitPolicy: [] },\n ];\n}\n","import { isExhausted, remaining } from \"../budget.ts\";\nimport { getItem, moveItem, patchItem, stripItemFields } from \"../items.ts\";\nimport { openIteration } from \"../planner.ts\";\nimport { appendEvent } from \"../state.ts\";\nimport type { CoreTerm, Methodology, PlannerOptions, WorkItem, WorkflowState } from \"../types.ts\";\nimport { scrumCeremonies, setDod } from \"./ceremonies.ts\";\nimport { validateScrumConfig, type ScrumConfig } from \"./config.ts\";\nimport { scrumMetrics, type ScrumMetrics } from \"./metrics.ts\";\nimport { scrumRoles } from \"./roles.ts\";\nimport { scrumRules } from \"./rules.ts\";\nimport { scrumStages } from \"./stages.ts\";\n\nexport { validateScrumConfig, scrumRoles, scrumRules, scrumStages, scrumMetrics };\nexport type { ScrumMetrics };\nexport type { ScrumConfig };\nexport { scrumCeremonies, dailyReport, canDo } from \"./ceremonies.ts\";\nexport type { DailyReport } from \"./ceremonies.ts\";\n\nexport const SCRUM_VOCABULARY: Record<CoreTerm, string> = {\n backlog: \"Product Backlog\",\n item: \"Product Backlog Item\",\n stage: \"Column\",\n iteration: \"Sprint\",\n increment: \"Increment\",\n ceremony: \"Scrum Event\",\n gate: \"Sprint Review\",\n};\n\n/** Advanced; used by ceremonies. */\nexport function configOf(state: WorkflowState): ScrumConfig {\n return state.config as ScrumConfig;\n}\n\n/**\n * The stage a carried-over item was returned from when it was in a review stage: it resumes there, not at the\n * sprint start. closeSprint releases blocked and awaiting_human items, so the stage (its `review` flag) is read from\n * the last system transition, not the status. Without `state` only a `review` status is recognised.\n */\nexport function resumeStageOf(item: WorkItem, state?: WorkflowState): string | undefined {\n const t = item.transitions.at(-1);\n if (!t || t.by !== \"system\" || t.to.stage !== \"backlog\" || t.to.status !== \"todo\")\n return undefined;\n if (!state) return t.from.status === \"review\" ? t.from.stage : undefined;\n const st = state.stages.find((x) => x.id === t.from.stage);\n return st?.review || t.from.status === \"review\" ? t.from.stage : undefined;\n}\n\n/** Send an item back to the backlog: clear its open blockers and pending decisions, strip iteration and role. */\nfunction toBacklog(state: WorkflowState, id: string, now: string): WorkflowState {\n let s = state;\n const open = getItem(s, id).blockers.filter((b) => !b.clearedAt);\n if (open.length) {\n s = patchItem(s, id, (it) => ({\n ...it,\n blockers: it.blockers.map((b) => (b.clearedAt ? b : { ...b, clearedAt: now })),\n }));\n for (const b of open)\n s = appendEvent(\n s,\n \"blocker.cleared\",\n \"system\",\n { id, blocker: b.id, reason: \"sprint closed\" },\n now,\n );\n }\n for (const p of s.pending.filter((x) => x.item === id)) {\n s = { ...s, pending: s.pending.filter((x) => x.id !== p.id) };\n s = appendEvent(\n s,\n \"pending.dropped\",\n \"system\",\n { id: p.id, item: id, reason: \"sprint closed\" },\n now,\n );\n }\n const cur = getItem(s, id);\n if (cur.stage !== \"backlog\" || cur.status !== \"todo\")\n s = moveItem(s, id, { stage: \"backlog\", status: \"todo\" }, \"system\", now);\n // a question keeps its role: only the escalation target can answer it\n return stripItemFields(s, id, cur.type === \"question\" ? [\"iteration\"] : [\"iteration\", \"role\"]);\n}\n\n/** Advanced; used by ceremonies. Closes the open sprint and returns unfinished work (and its open questions) to the backlog. */\nexport function closeSprint(\n state: WorkflowState,\n reason: \"budget\" | \"review\" | \"cancel\",\n now: string,\n): WorkflowState {\n const it = openIteration(state);\n if (!it) return state;\n const committed = it.committed.map((id) => getItem(state, id));\n const done = committed.filter((i) => i.status === \"done\").map((i) => i.id);\n const dropped = committed.filter((i) => i.status === \"dropped\").map((i) => i.id);\n const carryover = committed\n .filter((i) => i.status !== \"done\" && i.status !== \"dropped\")\n .map((i) => i.id);\n const carriedQuestions = Object.values(state.items)\n .filter(\n (i) =>\n i.type === \"question\" &&\n i.parent !== undefined &&\n carryover.includes(i.parent) &&\n i.status !== \"done\" &&\n i.status !== \"dropped\",\n )\n .map((i) => i.id);\n let s: WorkflowState = state;\n for (const id of [...carryover, ...carriedQuestions]) s = toBacklog(s, id, now);\n const weightOf = (ids: string[]) =>\n ids.reduce((sum, id) => sum + (state.items[id]?.weight ?? 0), 0);\n s = {\n ...s,\n iterations: s.iterations.map((x) => {\n if (x.id !== it.id) return x;\n const { closing: _c, ...rest } = x;\n return {\n ...rest,\n endedAt: now,\n outcome: reason === \"cancel\" ? \"cancelled\" : \"completed\",\n carryover,\n };\n }),\n };\n return appendEvent(\n s,\n \"sprint.closed\",\n \"system\",\n {\n id: it.id,\n reason,\n done,\n carryover,\n carriedQuestions,\n dropped,\n doneWeight: weightOf(done),\n committedWeight: weightOf(it.committed),\n spent: it.spent,\n budget: it.budget,\n },\n now,\n );\n}\n\nexport function scrum(): Methodology<ScrumConfig> {\n return {\n name: \"scrum\",\n vocabulary: SCRUM_VOCABULARY,\n validateConfig: validateScrumConfig,\n defaultStages: scrumStages,\n defaultRoles: scrumRoles,\n requiredCapabilities: [\"order-backlog\", \"facilitate\", \"deliver\"],\n exclusiveCapabilities: [\"order-backlog\"],\n plannerOptions(state): PlannerOptions {\n const cfg = configOf(state);\n const po: PlannerOptions = { schedulerMode: \"level\", dispatchStage: \"in_progress\" };\n if (cfg.inProgressWipLimit !== undefined) po.concurrencyCap = cfg.inProgressWipLimit;\n if (cfg.estimateMode !== undefined) po.estimateMode = cfg.estimateMode;\n if (cfg.fallbackTokensPerWeight !== undefined)\n po.fallbackTokensPerWeight = cfg.fallbackTokensPerWeight;\n return po;\n },\n candidates(state): WorkItem[] {\n const it = openIteration(state);\n if (!it || it.closing) return [];\n return Object.values(state.items).filter(\n (i) =>\n i.iteration === it.id &&\n (i.status === \"todo\" || i.status === \"review\") &&\n (i.stage === \"sprint\" || i.stage === \"review\"),\n );\n },\n invariants(state, item): string[] {\n const it = openIteration(state);\n const cfg = configOf(state);\n const left = it ? remaining(it.budget, it.spent) : {};\n return [\n `Sprint Goal: ${it?.goal ?? \"(no open sprint)\"}; Product Goal: ${cfg.productGoal}`,\n `Budget remaining: ${JSON.stringify(left)}; stop and hand off when it is gone`,\n `Definition of Done: ${cfg.definitionOfDone.map((p) => (p.kind === \"evidence\" ? `evidence ${p.evidenceKind}` : p.kind)).join(\", \") || \"(none)\"}`,\n `Do not change the scope of \"${item.id}\" or its acceptance criteria; raise open_questions instead`,\n ];\n },\n ceremonies: scrumCeremonies(scrum),\n rules: scrumRules(),\n metrics: (state) => ({ ...scrumMetrics(state) }),\n report(state) {\n const it = openIteration(state);\n return {\n closing: it?.closing === true,\n sprint: it?.id ?? null,\n reason: it?.closing ? \"budget\" : null,\n inFlight: it\n ? Object.values(state.items)\n .filter(\n (i) =>\n (i.iteration === it.id || it.committed.includes(i.id)) &&\n i.status === \"in_progress\",\n )\n .map((i) => i.id)\n : [],\n };\n },\n humanDefaults: { gates: [\"sprint-review\"] },\n afterConfigChange(state) {\n return setDod(state, configOf(state).definitionOfDone);\n },\n afterComplete(state, _itemId, now) {\n const it = openIteration(state);\n if (!it || (!it.closing && !isExhausted(it.budget, it.spent))) return state;\n const inFlight = Object.values(state.items).some(\n (i) => (i.iteration === it.id || it.committed.includes(i.id)) && i.status === \"in_progress\",\n );\n if (!inFlight && configOf(state).autoClose !== false)\n return closeSprint(state, \"budget\", now);\n if (it.closing) return state;\n return appendEvent(\n {\n ...state,\n iterations: state.iterations.map((x) => (x.id === it.id ? { ...x, closing: true } : x)),\n },\n \"sprint.closing\",\n \"system\",\n { id: it.id },\n now,\n );\n },\n };\n}\n"]}
@@ -1,2 +0,0 @@
1
- import {b as b$1,c}from'./chunk-2FRRD6A3.mjs';import {ExFlow,ExFlowRuntimeError}from'ex-flow';function b(t){return t??new Date().toISOString()}function Y(t){let e=new Set;for(let i of t.stages)e.has(i.id)&&b$1("config-invalid",`duplicate stage id "${i.id}"`,"give every stage a unique id"),e.add(i.id);let n={};for(let i of t.roles)c(i.id,"role id"),Object.hasOwn(n,i.id)&&b$1("duplicate-role",`duplicate role id "${i.id}"`,"give every role a unique id"),n[i.id]=i;let o=b(t.now);return {version:1,methodology:t.methodology,config:t.config,items:{},stages:t.stages,roles:n,iterations:[],events:[{seq:1,at:o,type:"state.created",by:"system",payload:{methodology:t.methodology}}],accounting:[],pending:[],lessons:[],agreements:[]}}function h(t,e,n,o,i){let s={seq:(t.events[t.events.length-1]?.seq??0)+1,at:b(i),type:e,by:n,payload:o};return {...t,events:[...t.events,s]}}function je(t,e){for(let n=t.events.length-1;n>=0;n--){let o=t.events[n];if(e===void 0||o.type===e)return o}}function A(t,e){return Object.hasOwn(t.roles,e)?t.roles[e]:void 0}var me=new Set(["in_progress","review","blocked"]);function Ee(t,e,n,o){c(e.id,"role id"),A(t,e.id)&&b$1("duplicate-role",`role "${e.id}" already exists`,`use a different id or retireRole("${e.id}") first`);let i={...t,roles:{...t.roles,[e.id]:e}};return h(i,"role.registered",n,{role:e.id,capabilities:e.capabilities},o)}function Pe(t,e,n,o){A(t,e)||b$1("unknown-role",`role "${e}" does not exist`,`registered roles: ${Object.keys(t.roles).join(", ")||"(none)"}`);let i=Object.values(t.items).filter(s=>s.role===e&&me.has(s.status)).map(s=>s.id);i.length&&b$1("role-has-open-items",`role "${e}" still holds ${i.length} open item(s)`,`complete or reassign ${i.join(", ")} before retiring the role`,{items:i});let r={...t.roles};return delete r[e],h({...t,roles:r},"role.retired",n,{role:e},o)}function J(t,e){return t.capabilities.includes(e)}function F(t,e){return Object.values(t.roles).filter(n=>J(n,e))}function q(t,e,n,o){return Object.values(t.roles).filter(i=>i.id!==o&&i.canApprove.includes(e)&&(n===void 0||i.capabilities.includes(n))).map(i=>i.id)}function Ae(t,e){return F(t,"approve-gate").filter(n=>n.canApprove.includes(e))}function ee(t,e,n){for(let o of e)F(t,o).length===0&&b$1("missing-capability",`no registered role has capability "${o}"`,`register a role whose capabilities include "${o}" (registerRole) before init`);for(let o of n){let i=F(t,o);i.length>1&&b$1("exclusive-capability",`capability "${o}" must belong to exactly one role but is held by ${i.map(r=>r.id).join(", ")}`,`remove "${o}" from all but one role`);}}function te(t,e){return e.length===0?[]:Object.values(t.roles).filter(n=>e.every(o=>J(n,o)))}function ke(t,e,...n){if(e==="human")return true;let o=A(t,e);return !!o&&n.some(i=>J(o,i))}function qe(t,e,...n){if(!ke(t,e,...n)){let o=Object.values(t.roles).filter(i=>n.some(r=>J(i,r))).map(i=>i.id);b$1("missing-capability",`"${e}" lacks capability ${n.map(i=>`"${i}"`).join(" or ")}`,`run this as one of: human${o.map(i=>`, ${i}`).join("")}`);}}function H(t,e){let n=t.stages.find(o=>o.id===e);return n||b$1("unknown-stage",`stage "${e}" does not exist`,`stages are: ${t.stages.map(o=>o.id).join(" \u2192 ")}`),n}function he(t,e){let n=t.stages.findIndex(o=>o.id===e);return n<0&&H(t,e),t.stages[n+1]}function we(t,e){return t.stages[t.stages.length-1]?.id===e}function B(t,e){return {...t,items:{...t.items,[e.id]:e}}}function ye(t,e,n){return B(t,n(j(t,e)))}function ve(t,e,n){return ye(t,e,o=>{let i={...o};for(let r of n)delete i[r];return i})}function j(t,e){let n=Object.hasOwn(t.items,e)?t.items[e]:void 0;return n||b$1("unknown-item",`item "${e}" does not exist`,`add it with addItem first; known items: ${Object.keys(t.items).join(", ")||"(none)"}`,{items:[e]}),n}function V(t,e,n){let o=e.filter(i=>!Object.hasOwn(t.items,i));o.length&&b$1("unknown-item",`${n} refers to unknown item(s) ${o.join(", ")}`,"add those items first or remove the reference",{items:o});}function Te(t,e,n,o){c(e.id,"item id"),Object.hasOwn(t.items,e.id)&&b$1("duplicate-item",`item "${e.id}" already exists`,"use editItem to change it, or pick a new id",{items:[e.id]});let i=t.stages[0];i||b$1("config-invalid","state has no stages","create the state with at least one stage");let r=e.stage??i.id;H(t,r),V(t,e.dependsOn??[],`item "${e.id}".dependsOn`),e.affects&&V(t,e.affects,`item "${e.id}".affects`),e.parent!==void 0&&V(t,[e.parent],`item "${e.id}".parent`),e.role!==void 0&&!Object.hasOwn(t.roles,e.role)&&b$1("unknown-role",`role "${e.role}" does not exist`,`registered roles: ${Object.keys(t.roles).join(", ")}`);let{stage:s,...a}=e,l={type:"task",acceptance:[],dependsOn:[],...a,id:e.id,title:e.title,stage:r,status:"todo",evidence:[],blockers:[],transitions:[]},c$1=B(t,l);return h(c$1,"item.added",n,{id:l.id,type:l.type,stage:l.stage,weight:l.weight??null,priority:l.priority??null,phase:l.phase??null,parent:l.parent??null},o)}function _e(t,e,n,o,i){let r=j(t,e);n.dependsOn&&V(t,n.dependsOn,`item "${e}".dependsOn`),n.affects&&V(t,n.affects,`item "${e}".affects`),n.parent!==void 0&&V(t,[n.parent],`item "${e}".parent`),n.role!==void 0&&!Object.hasOwn(t.roles,n.role)&&b$1("unknown-role",`role "${n.role}" does not exist`,`registered roles: ${Object.keys(t.roles).join(", ")}`);let s=Object.keys(n).filter(c=>JSON.stringify(n[c])!==JSON.stringify(r[c]));s.length===0&&b$1("no-op",`editItem("${e}") changes nothing`,"pass at least one field with a different value",{items:[e]});let a={...r};for(let c of s)a[c]=n[c];let l=B(t,a);return h(l,"item.edited",o,{id:e,changed:s},i)}function M(t,e,n,o,i){let r=j(t,e),s=n.stage??r.stage;H(t,s),(r.status==="done"||r.status==="dropped")&&b$1("invalid-transition",`item "${e}" is ${r.status} and cannot move`,"create a new item (or a change-request) instead of reopening a finished one",{items:[e]}),s===r.stage&&n.status===r.status&&b$1("no-op",`item "${e}" is already ${r.status} in "${s}"`,"choose a different stage or status",{items:[e]});let a=b(i),l={...r,stage:s,status:n.status,transitions:[...r.transitions,{from:{stage:r.stage,status:r.status},to:{stage:s,status:n.status},at:a,by:o}]},c=B(t,l);return h(c,"item.transition",o,{id:e,from:{stage:r.stage,status:r.status},to:{stage:s,status:n.status}},a)}function K(t,e){let n=0,o=false;for(let i=t.events.length-1;i>=0;i--){let r=t.events[i];if(r.payload?.id===e.id){if(r.type==="item.rework"){o=true;break}r.type==="item.evidence"&&n++;}}return o?e.evidence.slice(Math.max(0,e.evidence.length-n)):e.evidence}function Fe(t,e,n,o){let i=j(t,e),r=b(o),s={...i,evidence:[...i.evidence,{...n,at:r}]},a=B(t,s);return h(a,"item.evidence",n.by,{id:e,kind:n.kind,ref:n.ref},r)}function oe(t,e,n,o,i,r){let s=j(t,e),a=b(r),l=`${e}-b${s.blockers.length+1}`,c=s.status==="blocked"?null:{from:{stage:s.stage,status:s.status},to:{stage:s.stage,status:"blocked"},at:a,by:i},p={...s,status:"blocked",blockers:[...s.blockers,{id:l,reason:n,owner:o,raisedAt:a}],transitions:c?[...s.transitions,c]:s.transitions},g=B(t,p);return h(g,"blocker.raised",i,{id:e,blocker:l,reason:n,owner:o,transition:c&&{from:c.from,to:c.to}},a)}function ne(t,e){for(let n=t.transitions.length-1;n>=0;n--){let o=t.transitions[n];if(o.to.status===e)return o}}function Ve(t,e,n,o,i,r){let s=j(t,e),a=s.blockers.findIndex(x=>x.id===n&&!x.clearedAt);a<0&&b$1("invalid-input",`item "${e}" has no open blocker "${n}"`,`open blockers: ${s.blockers.filter(x=>!x.clearedAt).map(x=>x.id).join(", ")||"(none)"}`,{items:[e]});let l=b(i),c=s.blockers.map((x,D)=>D===a?{...x,clearedAt:l}:x),p=c.some(x=>!x.clearedAt),g=ne(s,"blocked")?.from.status??"todo",u=s.stage,m=g,y=false;g==="in_progress"?(m="todo",u=ne(s,"in_progress")?.from.stage??s.stage):g==="awaiting_human"&&(m=H(t,s.stage).review?"review":"todo",y=true);let{role:W,...R}=s,v=p?null:{from:{stage:s.stage,status:"blocked"},to:{stage:u,status:m},at:l,by:o},E={...y&&!p?R:s,blockers:c,stage:p?s.stage:u,status:p?"blocked":m,transitions:v?[...s.transitions,v]:s.transitions},N=B(t,E);return h(N,"blocker.cleared",o,{id:e,blocker:n,transition:v&&{from:v.from,to:v.to},note:r??null},l)}function Q(t,e){return ve(t,e,["role"])}function ie(t,e,n,o,i){let r=j(t,e),s=he(t,r.stage);if(!s)return M(t,e,{status:"done"},n,i);if(we(t,s.id))return M(t,e,{stage:s.id,status:"done"},n,i);let a=o||s.review===true?"review":"todo";return Q(M(t,e,{stage:s.id,status:a},n,i),e)}function U(t,e,n){let o=[],i=K(t,e),r=(s,a,l)=>o.push({rule:s,severity:"error",item:e.id,message:a,fix:l});for(let s of n)switch(s.kind){case "evidence":i.some(a=>a.kind===s.evidenceKind)||r("policy:evidence",`item "${e.id}" has no evidence of kind "${s.evidenceKind}"`,`attach evidence { kind: "${s.evidenceKind}" } via addEvidence or in the handoff.produced`);break;case "acceptance-written":e.acceptance.length===0&&r("policy:acceptance-written",`item "${e.id}" has no acceptance criteria`,"editItem with a non-empty acceptance[] (needs define-acceptance)");break;case "estimate-present":e.weight===void 0&&r("policy:estimate-present",`item "${e.id}" has no weight`,"editItem with a weight (story points)");break;case "no-open-blockers":{let a=e.blockers.filter(l=>!l.clearedAt);a.length&&r("policy:no-open-blockers",`item "${e.id}" has ${a.length} open blocker(s)`,`clearBlocker ${a.map(l=>l.id).join(", ")}`);break}case "dependencies-done":{let a=e.dependsOn.filter(l=>t.items[l]?.status!=="done");a.length&&r("policy:dependencies-done",`item "${e.id}" depends on unfinished ${a.join(", ")}`,`finish ${a.join(", ")} first`);break}case "custom":i.some(a=>a.kind===`policy:${s.id}`)||r(`policy:custom:${s.id}`,`item "${e.id}" has not satisfied "${s.description}"`,`attach evidence { kind: "policy:${s.id}" } when it is satisfied`);break}return o}function Je(t,e,n,o){let i=U(t,e,n);i.length&&b$1("policy-unmet",`item "${e.id}" cannot ${o}: ${i.length} polic${i.length===1?"y":"ies"} unmet`,i.map(r=>r.fix).join("; "),{items:[e.id]});}function xe(t,e){let n=new Map(t.stages.map((i,r)=>[i.id,r])),o=n.get(e.stage);if(o!==void 0)for(let i=e.transitions.length-1;i>=0;i--){let r=e.transitions[i],s=n.get(r.from.stage);if(r.to.status==="in_progress"&&s!==void 0&&s<o)return r}}function L(t,e){let n=xe(t,e);if(n)return n.by;for(let o=e.transitions.length-1;o>=0;o--){let i=e.transitions[o];if(i.to.status==="in_progress")return i.by}}function be(t,e,n,o){let i=[],r=K(t,e);for(let a of n.evidence)r.some(l=>l.kind===a)||i.push({rule:"gate:evidence",severity:"error",item:e.id,message:`gate "${n.id}" needs evidence "${a}" on item "${e.id}"`,fix:`attach evidence { kind: "${a}" } before approving`});if(i.length)return {outcome:"fail",violations:i};let s=false;for(let a of n.requires){if(a==="human"){o!=="human"&&(s=true);continue}if(!q(t,n.id,a.capability).includes(o)){i.push({rule:"gate:capability",severity:"error",item:e.id,message:`"${o}" may not approve gate "${n.id}" (needs capability "${a.capability}" and canApprove "${n.id}")`,fix:`approve as one of: ${q(t,n.id,a.capability).join(", ")||"(no role qualifies; register one)"}`});continue}let c=L(t,e);if(c!==void 0&&c===o){let p=q(t,n.id,a.capability,o);i.push({rule:"conflict-of-interest",severity:"error",item:e.id,message:`role "${o}" did the work on "${e.id}" and may not approve it`,fix:`approve as a different role: ${p.join(", ")||"(register another approver)"}`});}}return i.length?{outcome:"fail",violations:i}:s?{outcome:"human"}:{outcome:"pass"}}function Xe(t,e,n){let o=b(n),i=`p${t.events.filter(a=>a.type==="pending.raised").length+1}`,r={...e,id:i,raisedAt:o},s={...t,pending:[...t.pending,r]};return e.item&&j(s,e.item).status!=="awaiting_human"&&(s=M(s,e.item,{status:"awaiting_human"},"system",o)),h(s,"pending.raised","system",{id:i,kind:e.kind,item:e.item??null,gate:e.gate??null},o)}function Ye(t,e,n,o,i,r,s){n!=="approve"&&n!=="reject"&&b$1("invalid-input",`decision must be "approve" or "reject" (got ${JSON.stringify(n)})`,"pass approve or reject");let a=t.pending.find(u=>u.id===e);a||b$1("unknown-pending",`no pending decision "${e}"`,`open decisions: ${t.pending.map(u=>u.id).join(", ")||"(none)"}`);let l=a.kind==="gate"&&a.item?j(t,a.item):void 0,c=l&&(t.stages.find(u=>a.gate!==void 0&&u.gate?.id===a.gate)?.gate??t.stages.find(u=>u.id===l.stage)?.gate);l&&c&&o!=="human"&&(c.requires.includes("human")?void 0:be(t,l,c,o))?.outcome!=="pass"&&b$1("gate-unmet",`"${o}" may not decide gate "${c.id}" on "${l.id}"`,`decide as one of: human${c.requires.flatMap(m=>m==="human"?[]:q(t,c.id,m.capability)).map(m=>`, ${m}`).join("")}`,{items:[l.id],rule:"gate"});let p=b(r),g={...t,pending:t.pending.filter(u=>u.id!==e)};if(g=h(g,"pending.decided",o,{id:e,decision:n,note:i,item:a.item??null,gate:a.gate??null},p),l){let u=l.id,m=a.gate??c?.id??null;if(n==="approve"){let y=false;for(let W=t.events.length-1;W>=0;W--){let R=t.events[W];if(!(R.type!=="item.completed"||R.payload.id!==u)){y=R.payload.verdict==="needs-review";break}}g=ie(g,u,o,y,p),g=h(g,"gate.passed",o,{item:u,gate:m},p);}else {let y=c?.onFail??{action:"block"};y.action==="return-to"?g=Q(M(g,u,{stage:y.stage,status:"todo"},o,p),u):g=oe(g,u,`gate "${m??"?"}" rejected: ${i||"no reason given"}`,o,o,p),g=h(g,"gate.failed",o,{item:u,gate:m,note:i},p);}}return s?.afterDecide&&(g=s.afterDecide(g,a,n,o,i,p)),g}var tt={tokens:0,turns:0,wallclockMs:0};function nt(t,e){return {tokens:t.tokens+e.tokensIn+e.tokensOut,turns:t.turns+1,wallclockMs:t.wallclockMs+e.durationMs}}function re(t,e){let n={};return t.tokens!==void 0&&(n.tokens=Math.max(0,t.tokens-e.tokens)),t.turns!==void 0&&(n.turns=Math.max(0,t.turns-e.turns)),t.wallclockMs!==void 0&&(n.wallclockMs=Math.max(0,t.wallclockMs-e.wallclockMs)),n}function ot(t,e){return t.tokens!==void 0&&e.tokens>=t.tokens||t.turns!==void 0&&e.turns>=t.turns||t.wallclockMs!==void 0&&e.wallclockMs>=t.wallclockMs}function se(t,e,n=2e4,o="per-weight"){let i=e??1,r=[];for(let l of t.accounting){if(l.estimate===true)continue;let c=l.tokensIn+l.tokensOut;if(o==="per-call"){r.push(c);continue}let p=t.items[l.item]?.weight;p===void 0||p<=0||r.push(c/p);}if(r.length===0)return o==="per-call"?n:n*i;r.sort((l,c)=>l-c);let s=Math.floor(r.length/2),a=r.length%2?r[s]:(r[s-1]+r[s])/2;return Math.round(o==="per-call"?a:a*i)}function Z(t){return t.iterations.find(e=>e.endedAt===void 0)}function le(t,e,n){if(e.role){let r=A(t,e.role);return r||b$1("unknown-role",`item "${e.id}" is assigned to unknown role "${e.role}"`,"editItem with an existing role id"),r}let o=n?n(e):void 0;if(o!==void 0){let r=A(t,o);return r||b$1("unknown-role",`the methodology picked unknown role "${o}" for item "${e.id}"`,`registered roles: ${Object.keys(t.roles).join(", ")||"(none)"}`,{items:[e.id]}),r}if(e.status==="review"){let r=L(t,e),s=F(t,"review"),l=s.find(c=>c.id!==r)??(s.length===1?s[0]:void 0);return l||b$1("missing-capability",`no role has capability "review" for item "${e.id}"`,"register a role with capability review",{items:[e.id]}),l}let i=F(t,"deliver")[0];return i||b$1("missing-capability",`no role has capability "deliver" for item "${e.id}"`,"register a role with capability deliver",{items:[e.id]}),i}function ae(t){let e={};for(let n of Object.values(t.roles))n.maxConcurrent!==void 0&&(e[n.resourceClass??n.id]=n.maxConcurrent);return e}function We(t,e,n,o){let i=new Set(t.map(r=>r.id));return t.map(r=>{let s=le(e,r,o),a={id:r.id,data:{id:r.id},dependsOn:r.dependsOn.filter(c=>i.has(c)),resourceClass:s.resourceClass??s.id},l=n?n(r):r.priority;return l!==void 0&&(a.priority=l),r.weight!==void 0&&(a.weight=r.weight),r.deadline!==void 0&&(a.deadline=Date.parse(r.deadline)),a})}function pt(t,e,n={}){let o=b(n.now),i=e.candidates(t),r=i.filter(d=>d.dependsOn.every(k=>t.items[k]?.status==="done"||i.some(S=>S.id===k))),s=i.filter(d=>d.dependsOn.every(k=>t.items[k]?.status==="done"));if(r.length===0)return {state:t,dispatched:[],skipped:[],reason:Z(t)?.closing?"budget-exhausted":"no-candidates"};let a=e.plannerOptions(t),l={schedulerMode:a.schedulerMode,resourceCaps:ae(t)};if(a.concurrencyCap!==void 0&&(l.concurrencyCap=a.concurrencyCap),a.fairnessPolicy!==void 0&&(l.fairnessPolicy=a.fairnessPolicy),a.maxDeferralRounds!==void 0&&(l.maxDeferralRounds=a.maxDeferralRounds),a.deadlineStrategy!==void 0&&(l.deadlineStrategy=a.deadlineStrategy),a.weightStrategy!==void 0&&(l.weightStrategy=a.weightStrategy),a.tieBreaker!==void 0){let d=a.tieBreaker;l.tieBreaker=(k,S)=>d(t.items[k.data.id],t.items[S.data.id]);}let c,p;try{let d=new ExFlow(l);for(let S of We(r,t,a.priorityOf,a.roleFor))d.addEntity(S);let k=d.resolveExecutionDetails();c=(k.plan.batches[0]??[]).map(S=>S.id),p=k.metrics;}catch(d){throw d instanceof ExFlowRuntimeError&&b$1("planner-error",`ex-flow refused the graph: [${d.code}] ${d.message}`,"fix the item graph (cycles, duplicate ids) with editItem; see diagnostics in the message",{items:r.map(k=>k.id)}),d}let g=c.map(d=>t.items[d]).filter(d=>d.dependsOn.every(k=>t.items[k]?.status==="done")),u=Object.values(t.items).filter(d=>d.status==="in_progress"),m=new Set(a.wipCounts??["in_progress"]),y=Object.values(t.items).filter(d=>m.has(d.status)),W={};for(let d of u){let k=d.role?A(t,d.role):void 0,S=k?k.resourceClass??k.id:"?";W[S]=(W[S]??0)+1;}let R=ae(t),v=Z(t),E=v?re(v.budget,v.spent):{},N=E.tokens,x=v?Object.values(t.items).filter(d=>(d.iteration===v.id||v.committed.includes(d.id))&&d.status==="in_progress").length:0,D=E.turns===void 0?void 0:E.turns-x,fe=E.wallclockMs!==void 0&&E.wallclockMs<=0,ue=a.estimateMode??"per-weight",pe=n.fallbackTokensPerWeight??a.fallbackTokensPerWeight,ge=Math.min(n.max??1/0,a.concurrencyCap??1/0),C=[],O=[],w,$=t;for(let d of g){if(C.length>=ge){w="wip-full";break}let k=typeof a.dispatchStage=="function"?a.dispatchStage(d):a.dispatchStage,S=d.status==="todo"&&k!==void 0?k:d.stage,T=H(t,S),X=d.type==="question"?[]:U(t,d,T.entryPolicy);if(X.length>0){O.push({id:d.id,reason:"entry-policy",detail:X.map(I=>I.message).join("; ")});continue}let z=a.wipLimitOf?a.wipLimitOf(T,d):T.wipLimit;if(z!==void 0&&y.filter(I=>I.stage===T.id&&I.id!==d.id).length+C.filter(I=>I.stage===T.id).length>=z){w="wip-full",O.push({id:d.id,reason:"wip",detail:`stage "${T.id}" is at its WIP limit of ${z}`});continue}let G=le(t,d,a.roleFor),P=G.resourceClass??G.id;if(R[P]!==void 0&&(W[P]??0)>=R[P]){w="wip-full",O.push({id:d.id,reason:"resource-cap",detail:`resource class "${P}" is at its cap of ${R[P]}`});continue}if(D!==void 0&&D<=0){w="budget-exhausted",O.push({id:d.id,reason:"budget",detail:`turns budget spent: ${v.spent.turns} used + ${x+C.length} in flight of ${v.budget.turns}`});continue}if(fe){w="budget-exhausted",O.push({id:d.id,reason:"budget",detail:"wall-clock budget spent"});continue}if(N!==void 0){let I=se(t,d.weight,pe,ue);if(I>N){w="budget-exhausted",O.push({id:d.id,reason:"budget",detail:`needs about ${I} tokens, ${N} left in the iteration`});continue}N-=I;}W[P]=(W[P]??0)+1,D!==void 0&&(D-=1),$=M($,d.id,{stage:S,status:"in_progress"},G.id,o),$={...$,items:{...$.items,[d.id]:{...$.items[d.id],role:G.id}}},C.push($.items[d.id]);}return w===void 0&&O.some(d=>d.reason==="entry-policy")&&(w="policy-blocked"),w===void 0&&C.length<s.length&&(w="wip-full"),C.length===0&&w===void 0&&(w="no-candidates"),$=h($,"planner.resolved","planner",{dispatched:C.map(d=>d.id),reason:w??null,skipped:O,metrics:p},o),w?{state:$,dispatched:C,skipped:O,reason:w}:{state:$,dispatched:C,skipped:O}}function de(t){return [{id:"separation-lost",severity:"warning",check(o,i){return i.type!=="init"&&i.type!=="role.register"?[]:te(o,t.requiredCapabilities).map(r=>({rule:"separation-lost",severity:"warning",message:`role "${r.id}" holds every required capability (${t.requiredCapabilities.join(", ")}); no separation of duties`,fix:"fine for a solo operator; otherwise split capabilities across roles"}))}},{id:"conflict-of-interest",severity:"error",check(o,i){if(i.type!=="complete")return [];let r=i.payload?.handoff;if(!r)return [];let s=r.verdict??"done";if(s!=="done"&&s!=="needs-review")return [];let a=o.items[r.item];if(!a)return [];let l=o.stages.find(p=>p.id===a.stage)?.gate;if(!l||!l.requires.some(p=>p!=="human"))return [];if(L(o,a)!==r.role)return [];let c=q(o,l.id,void 0,r.role);return [{rule:"conflict-of-interest",severity:"error",item:a.id,message:`role "${r.role}" authored "${a.id}" and may not pass gate "${l.id}" on it`,fix:`hand the gate to another approver: ${c.join(", ")||"(register one)"}`}]}}]}function Oe(t,e,n){let o=[];for(let i of [...de(e),...e.rules])o.push(...i.check(t,n));return o}function ce(t,e,n,o){let i=Oe(t,e,n),r=i.filter(s=>s.severity==="error");return r.length&&b$1("rule-violation",`${n.type} violates ${r.map(s=>s.rule).join(", ")}: ${r.map(s=>s.message).join("; ")}`,r.map(s=>s.fix).join("; "),{rule:r[0].rule,items:r.map(s=>s.item).filter(s=>!!s)}),{state:o(t),warnings:i.filter(s=>s.severity==="warning")}}function St(t){let e=t.methodology,n=e.validateConfig(t.config),o=t.stages??e.defaultStages(n),i=t.roles??e.defaultRoles(n),r=t.now!==void 0?{methodology:e.name,config:n,stages:o,roles:i,now:t.now}:{methodology:e.name,config:n,stages:o,roles:i},s=Y(r);return ee(s,e.requiredCapabilities,e.exclusiveCapabilities),ce(s,e,{type:"init",by:t.by??"system"},a=>a)}function $t(t,e,n,o,i){(typeof n!="object"||n===null||Array.isArray(n)||Object.keys(n).length===0)&&b$1("invalid-input","config patch must be a non-empty object",'pass e.g. { "sprintBudget": { "tokens": 1500000 } } to exwf config set');let r=Z(t);r&&b$1("invalid-input",`config cannot change while ${r.id} is open`,"close it first (exwf ceremony review or cancel; a waterfall phase closes at its gate), then run exwf config set");let s=(e.lockedConfigKeys??[]).filter(u=>Object.hasOwn(n,u));s.length&&b$1("invalid-input",`config key(s) ${s.join(", ")} cannot change after init`,e.name==="kanban"?"use the service-delivery-review cadence for columns and classes of service":"start a new workflow with exwf init to change them");let a=t.config??{},l=e.validateConfig({...a,...n}),c=Object.keys(n).filter(u=>!Object.hasOwn(l,u));c.length&&b$1("invalid-input",`unknown config key(s) ${c.join(", ")}`,`known keys: ${Object.keys(l).join(", ")}`);let p=Object.keys(n).filter(u=>JSON.stringify(a[u])!==JSON.stringify(l[u]));p.length===0&&b$1("no-op","config patch changes nothing","pass at least one key with a different value to exwf config set");let g=u=>Object.fromEntries(p.map(m=>[m,u[m]]));return ce(t,e,{type:"config.change",by:o,payload:{patch:n}},u=>{let m=b(i),y=h({...u,config:l},"config.changed",o,{changed:p,before:g(a),after:g(l)},m);return e.afterConfigChange&&(y=e.afterConfigChange(y,m)),y})}export{Ve as A,Q as B,ie as C,U as D,Je as E,xe as F,L as G,be as H,Xe as I,Ye as J,tt as K,nt as L,re as M,ot as N,se as O,Z as P,le as Q,ae as R,We as S,pt as T,de as U,Oe as V,ce as W,St as X,$t as Y,b as a,Y as b,h as c,je as d,A as e,Ee as f,Pe as g,J as h,F as i,q as j,Ae as k,ee as l,te as m,ke as n,qe as o,H as p,he as q,we as r,ye as s,ve as t,j as u,Te as v,_e as w,M as x,Fe as y,oe as z};//# sourceMappingURL=chunk-Z3PU6EBI.mjs.map
2
- //# sourceMappingURL=chunk-Z3PU6EBI.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/state.ts","../src/roles.ts","../src/items.ts","../src/policies.ts","../src/gates.ts","../src/budget.ts","../src/planner.ts","../src/rules.ts","../src/methodology.ts"],"names":["nowOf","now","createState","input","seenStages","st","fail","roles","r","assertId","at","appendEvent","state","type","by","payload","ev","lastEvent","i","roleOf","id","OPEN","registerRole","role","next","retireRole","roleId","open","hasCapability","cap","rolesWith","approverIds","gateId","except","approversFor","requireCapabilities","required","exclusive","holders","separationLost","c","canDo","caps","requireCap","h","stageOf","stageId","s","nextStageOf","idx","isTerminalStage","putItem","item","patchItem","fn","getItem","stripItemFields","keys","copy","k","it","assertKnownItems","ids","what","missing","d","addItem","firstStage","_s","rest","editItem","patch","changed","updated","moveItem","to","toStage","freshEvidence","after","found","addEvidence","evidence","raiseBlocker","reason","owner","blockerId","t","lastTransitionTo","status","clearBlocker","note","b","blockers","stillBlocked","prev","toStatus","dropRole","_r","noRole","clearRole","itemId","advanceItem","wantsReview","evaluatePolicies","policies","out","fresh","v","rule","message","fix","p","e","notDone","assertPolicies","context","unmet","u","lastDispatchBefore","order","here","from","authorOf","before","checkGate","gate","violations","kind","needsHuman","req","author","others","raisePending","pending","entry","decide","pendingId","decision","methodology","item0","q","onFail","ZERO_SPENT","addSpent","spent","acc","remaining","budget","isExhausted","estimateTokens","weight","fallbackPerWeight","mode","w","samples","a","total","iw","x","y","mid","median","openIteration","assignRole","roleFor","picked","reviewers","resourceCapsFor","toExNodes","items","priorityOf","present","node","pr","plan","opts","all","candidates","readyAll","po","options","tb","firstBatch","metrics","flow","ExFlow","n","details","ExFlowRuntimeError","ready","inProgress","wipCounts","occupying","perClass","cls","iteration","left","tokensLeft","inFlight","turnsLeft","clockOut","estimateMode","fallback","limit","dispatched","skipped","pulledTo","target","stage","limitHere","est","coreRulesFor","action","handoff","verdict","validateAction","applyAction","reduce","errors","init","m","config","stages","stateInput","changeConfig","locked","unknown","pick","o","s2"],"mappings":"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","file":"chunk-Z3PU6EBI.mjs","sourcesContent":["import { assertId, fail } from \"./errors.ts\";\nimport type { Event, MethodologyName, Role, Stage, WorkflowState } from \"./types.ts\";\n\nexport function nowOf(now?: string): string {\n return now ?? new Date().toISOString();\n}\n\nexport interface CreateStateInput {\n methodology: MethodologyName;\n config: unknown;\n stages: Stage[];\n roles: Role[];\n now?: string;\n}\n\nexport function createState(input: CreateStateInput): WorkflowState {\n const seenStages = new Set<string>();\n for (const st of input.stages) {\n if (seenStages.has(st.id))\n fail(\"config-invalid\", `duplicate stage id \"${st.id}\"`, \"give every stage a unique id\");\n seenStages.add(st.id);\n }\n const roles: Record<string, Role> = {};\n for (const r of input.roles) {\n assertId(r.id, \"role id\");\n if (Object.hasOwn(roles, r.id))\n fail(\"duplicate-role\", `duplicate role id \"${r.id}\"`, \"give every role a unique id\");\n roles[r.id] = r;\n }\n const at = nowOf(input.now);\n return {\n version: 1,\n methodology: input.methodology,\n config: input.config,\n items: {},\n stages: input.stages,\n roles,\n iterations: [],\n events: [\n {\n seq: 1,\n at,\n type: \"state.created\",\n by: \"system\",\n payload: { methodology: input.methodology },\n },\n ],\n accounting: [],\n pending: [],\n lessons: [],\n agreements: [],\n };\n}\n\nexport function appendEvent(\n state: WorkflowState,\n type: string,\n by: string,\n payload: unknown,\n now?: string,\n): WorkflowState {\n const last = state.events[state.events.length - 1];\n const ev: Event = { seq: (last?.seq ?? 0) + 1, at: nowOf(now), type, by, payload };\n return { ...state, events: [...state.events, ev] };\n}\n\nexport function lastEvent(state: WorkflowState, type?: string): Event | undefined {\n for (let i = state.events.length - 1; i >= 0; i--) {\n const ev = state.events[i]!;\n if (type === undefined || ev.type === type) return ev;\n }\n return undefined;\n}\n","import { assertId, fail } from \"./errors.ts\";\nimport { appendEvent } from \"./state.ts\";\nimport type { Capability, Role, WorkflowState } from \"./types.ts\";\n\n/** Own-property role lookup (ids such as \"constructor\" never hit the prototype). */\nexport function roleOf(state: WorkflowState, id: string): Role | undefined {\n return Object.hasOwn(state.roles, id) ? state.roles[id] : undefined;\n}\n\nconst OPEN: ReadonlySet<string> = new Set([\"in_progress\", \"review\", \"blocked\"]);\n\nexport function registerRole(\n state: WorkflowState,\n role: Role,\n by: string,\n now?: string,\n): WorkflowState {\n assertId(role.id, \"role id\");\n if (roleOf(state, role.id))\n fail(\n \"duplicate-role\",\n `role \"${role.id}\" already exists`,\n `use a different id or retireRole(\"${role.id}\") first`,\n );\n const next = { ...state, roles: { ...state.roles, [role.id]: role } };\n return appendEvent(\n next,\n \"role.registered\",\n by,\n { role: role.id, capabilities: role.capabilities },\n now,\n );\n}\n\nexport function retireRole(\n state: WorkflowState,\n roleId: string,\n by: string,\n now?: string,\n): WorkflowState {\n if (!roleOf(state, roleId))\n fail(\n \"unknown-role\",\n `role \"${roleId}\" does not exist`,\n `registered roles: ${Object.keys(state.roles).join(\", \") || \"(none)\"}`,\n );\n const open = Object.values(state.items)\n .filter((i) => i.role === roleId && OPEN.has(i.status))\n .map((i) => i.id);\n if (open.length)\n fail(\n \"role-has-open-items\",\n `role \"${roleId}\" still holds ${open.length} open item(s)`,\n `complete or reassign ${open.join(\", \")} before retiring the role`,\n { items: open },\n );\n const roles = { ...state.roles };\n delete roles[roleId];\n return appendEvent({ ...state, roles }, \"role.retired\", by, { role: roleId }, now);\n}\n\nexport function hasCapability(role: Role, cap: Capability): boolean {\n return role.capabilities.includes(cap);\n}\n\nexport function rolesWith(state: WorkflowState, cap: Capability): Role[] {\n return Object.values(state.roles).filter((r) => hasCapability(r, cap));\n}\n\n/** Ids of roles that may approve `gateId`, optionally holding `cap` and excluding one id. */\nexport function approverIds(\n state: WorkflowState,\n gateId: string,\n cap?: string,\n except?: string,\n): string[] {\n return Object.values(state.roles)\n .filter(\n (r) =>\n r.id !== except &&\n r.canApprove.includes(gateId) &&\n (cap === undefined || (r.capabilities as readonly string[]).includes(cap)),\n )\n .map((r) => r.id);\n}\n\nexport function approversFor(state: WorkflowState, gateId: string): Role[] {\n return rolesWith(state, \"approve-gate\").filter((r) => r.canApprove.includes(gateId));\n}\n\nexport function requireCapabilities(\n state: WorkflowState,\n required: Capability[],\n exclusive: Capability[],\n): void {\n for (const cap of required) {\n if (rolesWith(state, cap).length === 0) {\n fail(\n \"missing-capability\",\n `no registered role has capability \"${cap}\"`,\n `register a role whose capabilities include \"${cap}\" (registerRole) before init`,\n );\n }\n }\n for (const cap of exclusive) {\n const holders = rolesWith(state, cap);\n if (holders.length > 1) {\n fail(\n \"exclusive-capability\",\n `capability \"${cap}\" must belong to exactly one role but is held by ${holders.map((r) => r.id).join(\", \")}`,\n `remove \"${cap}\" from all but one role`,\n );\n }\n }\n}\n\nexport function separationLost(state: WorkflowState, required: Capability[]): Role[] {\n if (required.length === 0) return [];\n return Object.values(state.roles).filter((r) => required.every((c) => hasCapability(r, c)));\n}\n\n/** `human` may do anything; a role must hold at least one of `caps`; unknown ids may do nothing. */\nexport function canDo(state: WorkflowState, by: string, ...caps: Capability[]): boolean {\n if (by === \"human\") return true;\n const role = roleOf(state, by);\n return !!role && caps.some((c) => hasCapability(role, c));\n}\n\nexport function requireCap(state: WorkflowState, by: string, ...caps: Capability[]): void {\n if (!canDo(state, by, ...caps)) {\n const holders = Object.values(state.roles)\n .filter((r) => caps.some((c) => hasCapability(r, c)))\n .map((r) => r.id);\n fail(\n \"missing-capability\",\n `\"${by}\" lacks capability ${caps.map((c) => `\"${c}\"`).join(\" or \")}`,\n `run this as one of: human${holders.map((h) => `, ${h}`).join(\"\")}`,\n );\n }\n}\n","import { assertId, fail } from \"./errors.ts\";\nimport type { ItemPatch } from \"./types.ts\";\n\nexport { assertId };\nimport { appendEvent, nowOf } from \"./state.ts\";\nimport type {\n Evidence,\n ItemStatus,\n NewItem,\n Stage,\n Transition,\n WorkItem,\n WorkflowState,\n} from \"./types.ts\";\n\nexport function stageOf(state: WorkflowState, stageId: string): Stage {\n const st = state.stages.find((s) => s.id === stageId);\n if (!st)\n fail(\n \"unknown-stage\",\n `stage \"${stageId}\" does not exist`,\n `stages are: ${state.stages.map((s) => s.id).join(\" → \")}`,\n );\n return st;\n}\n\nexport function nextStageOf(state: WorkflowState, stageId: string): Stage | undefined {\n const idx = state.stages.findIndex((s) => s.id === stageId);\n if (idx < 0) stageOf(state, stageId);\n return state.stages[idx + 1];\n}\n\nexport function isTerminalStage(state: WorkflowState, stageId: string): boolean {\n return state.stages[state.stages.length - 1]?.id === stageId;\n}\n\nfunction putItem(state: WorkflowState, item: WorkItem): WorkflowState {\n return { ...state, items: { ...state.items, [item.id]: item } };\n}\n\n/** Replace one item with `fn(item)`; no event. */\nexport function patchItem(\n state: WorkflowState,\n id: string,\n fn: (item: WorkItem) => WorkItem,\n): WorkflowState {\n return putItem(state, fn(getItem(state, id)));\n}\n\n/** Drop optional fields (iteration, role, ...) from one item; no event. */\nexport function stripItemFields(\n state: WorkflowState,\n id: string,\n keys: Array<\"iteration\" | \"role\">,\n): WorkflowState {\n return patchItem(state, id, (item) => {\n const copy = { ...item };\n for (const k of keys) delete copy[k];\n return copy;\n });\n}\n\nexport function getItem(state: WorkflowState, id: string): WorkItem {\n const it = Object.hasOwn(state.items, id) ? state.items[id] : undefined;\n if (!it)\n fail(\n \"unknown-item\",\n `item \"${id}\" does not exist`,\n `add it with addItem first; known items: ${Object.keys(state.items).join(\", \") || \"(none)\"}`,\n { items: [id] },\n );\n return it;\n}\n\nfunction assertKnownItems(state: WorkflowState, ids: string[], what: string): void {\n const missing = ids.filter((d) => !Object.hasOwn(state.items, d));\n if (missing.length)\n fail(\n \"unknown-item\",\n `${what} refers to unknown item(s) ${missing.join(\", \")}`,\n \"add those items first or remove the reference\",\n { items: missing },\n );\n}\n\nexport function addItem(\n state: WorkflowState,\n input: NewItem,\n by: string,\n now?: string,\n): WorkflowState {\n assertId(input.id, \"item id\");\n if (Object.hasOwn(state.items, input.id))\n fail(\n \"duplicate-item\",\n `item \"${input.id}\" already exists`,\n \"use editItem to change it, or pick a new id\",\n { items: [input.id] },\n );\n const firstStage = state.stages[0];\n if (!firstStage)\n fail(\"config-invalid\", \"state has no stages\", \"create the state with at least one stage\");\n const stageId = input.stage ?? firstStage.id;\n stageOf(state, stageId);\n assertKnownItems(state, input.dependsOn ?? [], `item \"${input.id}\".dependsOn`);\n if (input.affects) assertKnownItems(state, input.affects, `item \"${input.id}\".affects`);\n if (input.parent !== undefined)\n assertKnownItems(state, [input.parent], `item \"${input.id}\".parent`);\n if (input.role !== undefined && !Object.hasOwn(state.roles, input.role))\n fail(\n \"unknown-role\",\n `role \"${input.role}\" does not exist`,\n `registered roles: ${Object.keys(state.roles).join(\", \")}`,\n );\n\n const { stage: _s, ...rest } = input;\n const item: WorkItem = {\n type: \"task\",\n acceptance: [],\n dependsOn: [],\n ...rest,\n id: input.id,\n title: input.title,\n stage: stageId,\n status: \"todo\",\n evidence: [],\n blockers: [],\n transitions: [],\n };\n const next = putItem(state, item);\n return appendEvent(\n next,\n \"item.added\",\n by,\n {\n id: item.id,\n type: item.type,\n stage: item.stage,\n weight: item.weight ?? null,\n priority: item.priority ?? null,\n phase: item.phase ?? null,\n parent: item.parent ?? null,\n },\n now,\n );\n}\n\nexport type { ItemPatch } from \"./types.ts\";\n\nexport function editItem(\n state: WorkflowState,\n id: string,\n patch: ItemPatch,\n by: string,\n now?: string,\n): WorkflowState {\n const item = getItem(state, id);\n if (patch.dependsOn) assertKnownItems(state, patch.dependsOn, `item \"${id}\".dependsOn`);\n if (patch.affects) assertKnownItems(state, patch.affects, `item \"${id}\".affects`);\n if (patch.parent !== undefined) assertKnownItems(state, [patch.parent], `item \"${id}\".parent`);\n if (patch.role !== undefined && !Object.hasOwn(state.roles, patch.role))\n fail(\n \"unknown-role\",\n `role \"${patch.role}\" does not exist`,\n `registered roles: ${Object.keys(state.roles).join(\", \")}`,\n );\n const changed = (Object.keys(patch) as Array<keyof ItemPatch>).filter(\n (k) => JSON.stringify(patch[k]) !== JSON.stringify(item[k]),\n );\n if (changed.length === 0)\n fail(\n \"no-op\",\n `editItem(\"${id}\") changes nothing`,\n \"pass at least one field with a different value\",\n { items: [id] },\n );\n const updated: WorkItem = { ...item };\n for (const k of changed) (updated as unknown as Record<string, unknown>)[k] = patch[k];\n const next = putItem(state, updated);\n return appendEvent(next, \"item.edited\", by, { id, changed }, now);\n}\n\nexport function moveItem(\n state: WorkflowState,\n id: string,\n to: { stage?: string; status: ItemStatus },\n by: string,\n now?: string,\n): WorkflowState {\n const item = getItem(state, id);\n const toStage = to.stage ?? item.stage;\n stageOf(state, toStage);\n if (item.status === \"done\" || item.status === \"dropped\") {\n fail(\n \"invalid-transition\",\n `item \"${id}\" is ${item.status} and cannot move`,\n \"create a new item (or a change-request) instead of reopening a finished one\",\n { items: [id] },\n );\n }\n if (toStage === item.stage && to.status === item.status)\n fail(\n \"no-op\",\n `item \"${id}\" is already ${item.status} in \"${toStage}\"`,\n \"choose a different stage or status\",\n { items: [id] },\n );\n const at = nowOf(now);\n const updated: WorkItem = {\n ...item,\n stage: toStage,\n status: to.status,\n transitions: [\n ...item.transitions,\n {\n from: { stage: item.stage, status: item.status },\n to: { stage: toStage, status: to.status },\n at,\n by,\n },\n ],\n };\n const next = putItem(state, updated);\n return appendEvent(\n next,\n \"item.transition\",\n by,\n {\n id,\n from: { stage: item.stage, status: item.status },\n to: { stage: toStage, status: to.status },\n },\n at,\n );\n}\n\n/** Evidence recorded at or after the item's last `item.rework` event; evidence stays stored, but earlier entries no longer count toward policies or gates. Never-reworked items keep all evidence. */\nexport function freshEvidence(state: WorkflowState, item: WorkItem): Evidence[] {\n // Event order, not timestamps: evidence recorded by an item.evidence event AFTER the item's last\n // item.rework event is fresh. Evidence entries are appended in the same order as those events, so\n // the fresh entries are the last `after` ones. Evidence attached by the rework completion itself\n // precedes its item.rework event and therefore does not count.\n let after = 0;\n let found = false;\n for (let i = state.events.length - 1; i >= 0; i--) {\n const ev = state.events[i]!;\n if ((ev.payload as { id?: string } | null)?.id !== item.id) continue;\n if (ev.type === \"item.rework\") {\n found = true;\n break;\n }\n if (ev.type === \"item.evidence\") after++;\n }\n return found ? item.evidence.slice(Math.max(0, item.evidence.length - after)) : item.evidence;\n}\n\nexport function addEvidence(\n state: WorkflowState,\n id: string,\n evidence: Omit<Evidence, \"at\">,\n now?: string,\n): WorkflowState {\n const item = getItem(state, id);\n const at = nowOf(now);\n const updated: WorkItem = { ...item, evidence: [...item.evidence, { ...evidence, at }] };\n const next = putItem(state, updated);\n return appendEvent(\n next,\n \"item.evidence\",\n evidence.by,\n { id, kind: evidence.kind, ref: evidence.ref },\n at,\n );\n}\n\nexport function raiseBlocker(\n state: WorkflowState,\n id: string,\n reason: string,\n owner: string,\n by: string,\n now?: string,\n): WorkflowState {\n const item = getItem(state, id);\n const at = nowOf(now);\n const blockerId = `${id}-b${item.blockers.length + 1}`;\n const t: Transition | null =\n item.status === \"blocked\"\n ? null\n : {\n from: { stage: item.stage, status: item.status },\n to: { stage: item.stage, status: \"blocked\" },\n at,\n by,\n };\n const updated: WorkItem = {\n ...item,\n status: \"blocked\",\n blockers: [...item.blockers, { id: blockerId, reason, owner, raisedAt: at }],\n transitions: t ? [...item.transitions, t] : item.transitions,\n };\n const next = putItem(state, updated);\n return appendEvent(\n next,\n \"blocker.raised\",\n by,\n { id, blocker: blockerId, reason, owner, transition: t && { from: t.from, to: t.to } },\n at,\n );\n}\n\nfunction lastTransitionTo(item: WorkItem, status: ItemStatus): Transition | undefined {\n for (let i = item.transitions.length - 1; i >= 0; i--) {\n const t = item.transitions[i]!;\n if (t.to.status === status) return t;\n }\n return undefined;\n}\n\nexport function clearBlocker(\n state: WorkflowState,\n id: string,\n blockerId: string,\n by: string,\n now?: string,\n note?: string,\n): WorkflowState {\n const item = getItem(state, id);\n const idx = item.blockers.findIndex((b) => b.id === blockerId && !b.clearedAt);\n if (idx < 0)\n fail(\n \"invalid-input\",\n `item \"${id}\" has no open blocker \"${blockerId}\"`,\n `open blockers: ${\n item.blockers\n .filter((b) => !b.clearedAt)\n .map((b) => b.id)\n .join(\", \") || \"(none)\"\n }`,\n { items: [id] },\n );\n const at = nowOf(now);\n const blockers = item.blockers.map((b, i) => (i === idx ? { ...b, clearedAt: at } : b));\n const stillBlocked = blockers.some((b) => !b.clearedAt);\n const prev = lastTransitionTo(item, \"blocked\")?.from.status ?? \"todo\";\n let toStage = item.stage;\n let toStatus: ItemStatus = prev;\n let dropRole = false;\n if (prev === \"in_progress\") {\n toStatus = \"todo\";\n toStage = lastTransitionTo(item, \"in_progress\")?.from.stage ?? item.stage;\n } else if (prev === \"awaiting_human\") {\n // a rejected human gate: the work is re-dispatched in the current stage\n toStatus = stageOf(state, item.stage).review ? \"review\" : \"todo\";\n dropRole = true;\n }\n const { role: _r, ...noRole } = item;\n const t: Transition | null = stillBlocked\n ? null\n : {\n from: { stage: item.stage, status: \"blocked\" },\n to: { stage: toStage, status: toStatus },\n at,\n by,\n };\n const updated: WorkItem = {\n ...(dropRole && !stillBlocked ? (noRole as WorkItem) : item),\n blockers,\n stage: stillBlocked ? item.stage : toStage,\n status: stillBlocked ? \"blocked\" : toStatus,\n transitions: t ? [...item.transitions, t] : item.transitions,\n };\n const next = putItem(state, updated);\n return appendEvent(\n next,\n \"blocker.cleared\",\n by,\n { id, blocker: blockerId, transition: t && { from: t.from, to: t.to }, note: note ?? null },\n at,\n );\n}\n\n/** Entering a new stage is a new assignment: the role that finished the previous stage is cleared so the planner picks the right one (a reviewer, not the author). */\nexport function clearRole(state: WorkflowState, itemId: string): WorkflowState {\n return stripItemFields(state, itemId, [\"role\"]);\n}\n\n/** Move an item to the next stage (done at the end, review/todo otherwise) and clear its role. */\nexport function advanceItem(\n state: WorkflowState,\n itemId: string,\n by: string,\n wantsReview: boolean,\n now: string,\n): WorkflowState {\n const item = getItem(state, itemId);\n const to = nextStageOf(state, item.stage);\n if (!to) return moveItem(state, itemId, { status: \"done\" }, by, now);\n if (isTerminalStage(state, to.id))\n return moveItem(state, itemId, { stage: to.id, status: \"done\" }, by, now);\n const status = wantsReview || to.review === true ? \"review\" : \"todo\";\n return clearRole(moveItem(state, itemId, { stage: to.id, status }, by, now), itemId);\n}\n","import { fail } from \"./errors.ts\";\nimport { freshEvidence } from \"./items.ts\";\nimport type { Policy, Violation, WorkItem, WorkflowState } from \"./types.ts\";\n\nexport function evaluatePolicies(\n state: WorkflowState,\n item: WorkItem,\n policies: Policy[],\n): Violation[] {\n const out: Violation[] = [];\n const fresh = freshEvidence(state, item);\n const v = (rule: string, message: string, fix: string) =>\n out.push({ rule, severity: \"error\", item: item.id, message, fix });\n for (const p of policies) {\n switch (p.kind) {\n case \"evidence\":\n if (!fresh.some((e) => e.kind === p.evidenceKind))\n v(\n \"policy:evidence\",\n `item \"${item.id}\" has no evidence of kind \"${p.evidenceKind}\"`,\n `attach evidence { kind: \"${p.evidenceKind}\" } via addEvidence or in the handoff.produced`,\n );\n break;\n case \"acceptance-written\":\n if (item.acceptance.length === 0)\n v(\n \"policy:acceptance-written\",\n `item \"${item.id}\" has no acceptance criteria`,\n \"editItem with a non-empty acceptance[] (needs define-acceptance)\",\n );\n break;\n case \"estimate-present\":\n if (item.weight === undefined)\n v(\n \"policy:estimate-present\",\n `item \"${item.id}\" has no weight`,\n \"editItem with a weight (story points)\",\n );\n break;\n case \"no-open-blockers\": {\n const open = item.blockers.filter((b) => !b.clearedAt);\n if (open.length)\n v(\n \"policy:no-open-blockers\",\n `item \"${item.id}\" has ${open.length} open blocker(s)`,\n `clearBlocker ${open.map((b) => b.id).join(\", \")}`,\n );\n break;\n }\n case \"dependencies-done\": {\n const notDone = item.dependsOn.filter((d) => state.items[d]?.status !== \"done\");\n if (notDone.length)\n v(\n \"policy:dependencies-done\",\n `item \"${item.id}\" depends on unfinished ${notDone.join(\", \")}`,\n `finish ${notDone.join(\", \")} first`,\n );\n break;\n }\n case \"custom\":\n if (!fresh.some((e) => e.kind === `policy:${p.id}`))\n v(\n `policy:custom:${p.id}`,\n `item \"${item.id}\" has not satisfied \"${p.description}\"`,\n `attach evidence { kind: \"policy:${p.id}\" } when it is satisfied`,\n );\n break;\n }\n }\n return out;\n}\n\nexport function assertPolicies(\n state: WorkflowState,\n item: WorkItem,\n policies: Policy[],\n context: string,\n): void {\n const unmet = evaluatePolicies(state, item, policies);\n if (unmet.length) {\n fail(\n \"policy-unmet\",\n `item \"${item.id}\" cannot ${context}: ${unmet.length} polic${unmet.length === 1 ? \"y\" : \"ies\"} unmet`,\n unmet.map((u) => u.fix).join(\"; \"),\n { items: [item.id] },\n );\n }\n}\n","import { fail } from \"./errors.ts\";\nimport { advanceItem, freshEvidence, clearRole, getItem, moveItem, raiseBlocker } from \"./items.ts\";\nimport { approverIds } from \"./roles.ts\";\nimport { appendEvent, nowOf } from \"./state.ts\";\nimport type {\n Gate,\n Methodology,\n PendingHuman,\n Transition,\n Violation,\n WorkItem,\n WorkflowState,\n} from \"./types.ts\";\n\nexport type GateResult =\n | { outcome: \"pass\" }\n | { outcome: \"human\" }\n | { outcome: \"fail\"; violations: Violation[] };\n\n/** Last in_progress dispatch made from a stage that comes STRICTLY BEFORE the item's current stage in `state.stages` order (unknown stage ids count as not-before). */\nexport function lastDispatchBefore(state: WorkflowState, item: WorkItem): Transition | undefined {\n const order = new Map(state.stages.map((s, i) => [s.id, i] as const));\n const here = order.get(item.stage);\n if (here === undefined) return undefined;\n for (let i = item.transitions.length - 1; i >= 0; i--) {\n const t = item.transitions[i]!;\n const from = order.get(t.from.stage);\n if (t.to.status === \"in_progress\" && from !== undefined && from < here) return t;\n }\n return undefined;\n}\n\n/** Role that did the work the gate guards: the last dispatch made from a stage strictly before the current one (so a reviewer dispatched into the gated stage is not its author); else the last dispatch of any stage; undefined if never dispatched. */\nexport function authorOf(state: WorkflowState, item: WorkItem): string | undefined {\n const before = lastDispatchBefore(state, item);\n if (before) return before.by;\n for (let i = item.transitions.length - 1; i >= 0; i--) {\n const t = item.transitions[i]!;\n if (t.to.status === \"in_progress\") return t.by;\n }\n return undefined;\n}\n\nexport function checkGate(\n state: WorkflowState,\n item: WorkItem,\n gate: Gate,\n by: string,\n): GateResult {\n const violations: Violation[] = [];\n const fresh = freshEvidence(state, item);\n for (const kind of gate.evidence) {\n if (!fresh.some((e) => e.kind === kind)) {\n violations.push({\n rule: \"gate:evidence\",\n severity: \"error\",\n item: item.id,\n message: `gate \"${gate.id}\" needs evidence \"${kind}\" on item \"${item.id}\"`,\n fix: `attach evidence { kind: \"${kind}\" } before approving`,\n });\n }\n }\n if (violations.length) return { outcome: \"fail\", violations };\n\n let needsHuman = false;\n for (const req of gate.requires) {\n if (req === \"human\") {\n if (by !== \"human\") needsHuman = true;\n continue;\n }\n const ok = approverIds(state, gate.id, req.capability).includes(by);\n if (!ok) {\n violations.push({\n rule: \"gate:capability\",\n severity: \"error\",\n item: item.id,\n message: `\"${by}\" may not approve gate \"${gate.id}\" (needs capability \"${req.capability}\" and canApprove \"${gate.id}\")`,\n fix: `approve as one of: ${approverIds(state, gate.id, req.capability).join(\", \") || \"(no role qualifies; register one)\"}`,\n });\n continue;\n }\n const author = authorOf(state, item);\n if (author !== undefined && author === by) {\n const others = approverIds(state, gate.id, req.capability, by);\n violations.push({\n rule: \"conflict-of-interest\",\n severity: \"error\",\n item: item.id,\n message: `role \"${by}\" did the work on \"${item.id}\" and may not approve it`,\n fix: `approve as a different role: ${others.join(\", \") || \"(register another approver)\"}`,\n });\n }\n }\n if (violations.length) return { outcome: \"fail\", violations };\n return needsHuman ? { outcome: \"human\" } : { outcome: \"pass\" };\n}\n\nexport function raisePending(\n state: WorkflowState,\n pending: Omit<PendingHuman, \"id\" | \"raisedAt\">,\n now?: string,\n): WorkflowState {\n const at = nowOf(now);\n const id = `p${state.events.filter((e) => e.type === \"pending.raised\").length + 1}`;\n const entry: PendingHuman = { ...pending, id, raisedAt: at };\n let next: WorkflowState = { ...state, pending: [...state.pending, entry] };\n if (pending.item) {\n const item = getItem(next, pending.item);\n if (item.status !== \"awaiting_human\")\n next = moveItem(next, pending.item, { status: \"awaiting_human\" }, \"system\", at);\n }\n return appendEvent(\n next,\n \"pending.raised\",\n \"system\",\n { id, kind: pending.kind, item: pending.item ?? null, gate: pending.gate ?? null },\n at,\n );\n}\n\nexport function decide(\n state: WorkflowState,\n pendingId: string,\n decision: \"approve\" | \"reject\",\n by: string,\n note: string,\n now?: string,\n methodology?: Methodology,\n): WorkflowState {\n if (decision !== \"approve\" && decision !== \"reject\")\n fail(\n \"invalid-input\",\n `decision must be \"approve\" or \"reject\" (got ${JSON.stringify(decision)})`,\n \"pass approve or reject\",\n );\n const entry = state.pending.find((p) => p.id === pendingId);\n if (!entry)\n fail(\n \"unknown-pending\",\n `no pending decision \"${pendingId}\"`,\n `open decisions: ${state.pending.map((p) => p.id).join(\", \") || \"(none)\"}`,\n );\n const item0 = entry.kind === \"gate\" && entry.item ? getItem(state, entry.item) : undefined;\n const gate =\n item0 &&\n (state.stages.find((s) => entry.gate !== undefined && s.gate?.id === entry.gate)?.gate ??\n state.stages.find((s) => s.id === item0.stage)?.gate);\n if (item0 && gate && by !== \"human\") {\n const res = gate.requires.includes(\"human\") ? undefined : checkGate(state, item0, gate, by);\n if (res?.outcome !== \"pass\")\n fail(\n \"gate-unmet\",\n `\"${by}\" may not decide gate \"${gate.id}\" on \"${item0.id}\"`,\n `decide as one of: human${gate.requires\n .flatMap((q) => (q === \"human\" ? [] : approverIds(state, gate.id, q.capability)))\n .map((r) => `, ${r}`)\n .join(\"\")}`,\n { items: [item0.id], rule: \"gate\" },\n );\n }\n const at = nowOf(now);\n let next: WorkflowState = { ...state, pending: state.pending.filter((p) => p.id !== pendingId) };\n next = appendEvent(\n next,\n \"pending.decided\",\n by,\n { id: pendingId, decision, note, item: entry.item ?? null, gate: entry.gate ?? null },\n at,\n );\n if (item0) {\n const id = item0.id;\n const gateId = entry.gate ?? gate?.id ?? null;\n if (decision === \"approve\") {\n let wantsReview = false;\n for (let i = state.events.length - 1; i >= 0; i--) {\n const e = state.events[i]!;\n if (e.type !== \"item.completed\" || (e.payload as { id?: string }).id !== id) continue;\n wantsReview = (e.payload as { verdict?: string }).verdict === \"needs-review\";\n break;\n }\n next = advanceItem(next, id, by, wantsReview, at);\n next = appendEvent(next, \"gate.passed\", by, { item: id, gate: gateId }, at);\n } else {\n const onFail = gate?.onFail ?? { action: \"block\" as const };\n if (onFail.action === \"return-to\")\n next = clearRole(moveItem(next, id, { stage: onFail.stage, status: \"todo\" }, by, at), id);\n else\n next = raiseBlocker(\n next,\n id,\n `gate \"${gateId ?? \"?\"}\" rejected: ${note || \"no reason given\"}`,\n by,\n by,\n at,\n );\n next = appendEvent(next, \"gate.failed\", by, { item: id, gate: gateId, note }, at);\n }\n }\n if (methodology?.afterDecide) next = methodology.afterDecide(next, entry, decision, by, note, at);\n return next;\n}\n","import type { Accounting, Budget, WorkflowState } from \"./types.ts\";\n\nexport const ZERO_SPENT: Required<Budget> = { tokens: 0, turns: 0, wallclockMs: 0 };\n\nexport function addSpent(spent: Required<Budget>, acc: Accounting): Required<Budget> {\n return {\n tokens: spent.tokens + acc.tokensIn + acc.tokensOut,\n turns: spent.turns + 1,\n wallclockMs: spent.wallclockMs + acc.durationMs,\n };\n}\n\nexport function remaining(budget: Budget, spent: Required<Budget>): Budget {\n const out: Budget = {};\n if (budget.tokens !== undefined) out.tokens = Math.max(0, budget.tokens - spent.tokens);\n if (budget.turns !== undefined) out.turns = Math.max(0, budget.turns - spent.turns);\n if (budget.wallclockMs !== undefined)\n out.wallclockMs = Math.max(0, budget.wallclockMs - spent.wallclockMs);\n return out;\n}\n\nexport function isExhausted(budget: Budget, spent: Required<Budget>): boolean {\n return (\n (budget.tokens !== undefined && spent.tokens >= budget.tokens) ||\n (budget.turns !== undefined && spent.turns >= budget.turns) ||\n (budget.wallclockMs !== undefined && spent.wallclockMs >= budget.wallclockMs)\n );\n}\n\nexport type EstimateMode = \"per-weight\" | \"per-call\";\n\nexport function estimateTokens(\n state: WorkflowState,\n weight: number | undefined,\n fallbackPerWeight = 20000,\n mode: EstimateMode = \"per-weight\",\n): number {\n const w = weight ?? 1;\n const samples: number[] = [];\n for (const a of state.accounting) {\n if (a.estimate === true) continue;\n const total = a.tokensIn + a.tokensOut;\n if (mode === \"per-call\") {\n samples.push(total);\n continue;\n }\n const iw = state.items[a.item]?.weight;\n if (iw === undefined || iw <= 0) continue;\n samples.push(total / iw);\n }\n if (samples.length === 0) return mode === \"per-call\" ? fallbackPerWeight : fallbackPerWeight * w;\n samples.sort((x, y) => x - y);\n const mid = Math.floor(samples.length / 2);\n const median = samples.length % 2 ? samples[mid]! : (samples[mid - 1]! + samples[mid]!) / 2;\n return Math.round(mode === \"per-call\" ? median : median * w);\n}\n","import { ExFlow, ExFlowRuntimeError, type ExFlowOptions, type ExNode } from \"ex-flow\";\nimport { estimateTokens, remaining } from \"./budget.ts\";\nimport { fail } from \"./errors.ts\";\nimport { authorOf } from \"./gates.ts\";\nimport { moveItem, stageOf } from \"./items.ts\";\nimport { evaluatePolicies } from \"./policies.ts\";\nimport { roleOf, rolesWith } from \"./roles.ts\";\nimport { appendEvent, nowOf } from \"./state.ts\";\nimport type { ItemStatus, Iteration, Methodology, Role, WorkItem, WorkflowState } from \"./types.ts\";\n\ntype NodeData = { id: string };\n\nexport function openIteration(state: WorkflowState): Iteration | undefined {\n return state.iterations.find((it) => it.endedAt === undefined);\n}\n\nexport function assignRole(\n state: WorkflowState,\n item: WorkItem,\n roleFor?: (item: WorkItem) => string | undefined,\n): Role {\n if (item.role) {\n const r = roleOf(state, item.role);\n if (!r)\n fail(\n \"unknown-role\",\n `item \"${item.id}\" is assigned to unknown role \"${item.role}\"`,\n \"editItem with an existing role id\",\n );\n return r;\n }\n const picked = roleFor ? roleFor(item) : undefined;\n if (picked !== undefined) {\n const r = roleOf(state, picked);\n if (!r)\n fail(\n \"unknown-role\",\n `the methodology picked unknown role \"${picked}\" for item \"${item.id}\"`,\n `registered roles: ${Object.keys(state.roles).join(\", \") || \"(none)\"}`,\n { items: [item.id] },\n );\n return r;\n }\n if (item.status === \"review\") {\n const author = authorOf(state, item);\n const reviewers = rolesWith(state, \"review\");\n const other = reviewers.find((r) => r.id !== author);\n const r = other ?? (reviewers.length === 1 ? reviewers[0] : undefined);\n if (!r)\n fail(\n \"missing-capability\",\n `no role has capability \"review\" for item \"${item.id}\"`,\n \"register a role with capability review\",\n { items: [item.id] },\n );\n return r;\n }\n const r = rolesWith(state, \"deliver\")[0];\n if (!r)\n fail(\n \"missing-capability\",\n `no role has capability \"deliver\" for item \"${item.id}\"`,\n \"register a role with capability deliver\",\n { items: [item.id] },\n );\n return r;\n}\n\nexport function resourceCapsFor(state: WorkflowState): Record<string, number> {\n const caps: Record<string, number> = {};\n for (const r of Object.values(state.roles)) {\n if (r.maxConcurrent !== undefined) caps[r.resourceClass ?? r.id] = r.maxConcurrent;\n }\n return caps;\n}\n\nexport function toExNodes(\n items: WorkItem[],\n state: WorkflowState,\n priorityOf?: (item: WorkItem) => number | undefined,\n roleFor?: (item: WorkItem) => string | undefined,\n): ExNode<NodeData>[] {\n const present = new Set(items.map((i) => i.id));\n return items.map((i) => {\n const role = assignRole(state, i, roleFor);\n const node: ExNode<NodeData> = {\n id: i.id,\n data: { id: i.id },\n dependsOn: i.dependsOn.filter((d) => present.has(d)),\n resourceClass: role.resourceClass ?? role.id,\n };\n const pr = priorityOf ? priorityOf(i) : i.priority;\n if (pr !== undefined) node.priority = pr;\n if (i.weight !== undefined) node.weight = i.weight;\n if (i.deadline !== undefined) node.deadline = Date.parse(i.deadline);\n return node;\n });\n}\n\nexport interface PlanOptions {\n max?: number;\n now?: string;\n fallbackTokensPerWeight?: number;\n}\nexport type PlanReason = \"no-candidates\" | \"budget-exhausted\" | \"wip-full\" | \"policy-blocked\";\n/** A ready item the planner did not pull, and why. */\nexport interface Skipped {\n id: string;\n reason: \"entry-policy\" | \"wip\" | \"resource-cap\" | \"budget\";\n detail: string;\n}\nexport interface PlanResult {\n state: WorkflowState;\n dispatched: WorkItem[];\n skipped: Skipped[];\n reason?: PlanReason;\n}\n\nexport function plan(\n state: WorkflowState,\n methodology: Methodology,\n opts: PlanOptions = {},\n): PlanResult {\n const at = nowOf(opts.now);\n // an item may enter the graph only if every dependency is done or is itself a candidate (so ex-flow orders it)\n const all = methodology.candidates(state);\n const candidates = all.filter((i) =>\n i.dependsOn.every((d) => state.items[d]?.status === \"done\" || all.some((c) => c.id === d)),\n );\n const readyAll = all.filter((i) => i.dependsOn.every((d) => state.items[d]?.status === \"done\"));\n if (candidates.length === 0)\n return {\n state,\n dispatched: [],\n skipped: [],\n reason: openIteration(state)?.closing ? \"budget-exhausted\" : \"no-candidates\",\n };\n\n const po = methodology.plannerOptions(state);\n const options: ExFlowOptions<NodeData> = {\n schedulerMode: po.schedulerMode,\n resourceCaps: resourceCapsFor(state),\n };\n if (po.concurrencyCap !== undefined) options.concurrencyCap = po.concurrencyCap;\n if (po.fairnessPolicy !== undefined) options.fairnessPolicy = po.fairnessPolicy;\n if (po.maxDeferralRounds !== undefined) options.maxDeferralRounds = po.maxDeferralRounds;\n if (po.deadlineStrategy !== undefined) options.deadlineStrategy = po.deadlineStrategy;\n if (po.weightStrategy !== undefined) options.weightStrategy = po.weightStrategy;\n if (po.tieBreaker !== undefined) {\n const tb = po.tieBreaker;\n options.tieBreaker = (a, b) => tb(state.items[a.data.id]!, state.items[b.data.id]!);\n }\n\n let firstBatch: string[];\n let metrics: unknown;\n try {\n const flow = new ExFlow<NodeData>(options);\n for (const n of toExNodes(candidates, state, po.priorityOf, po.roleFor)) flow.addEntity(n);\n const details = flow.resolveExecutionDetails();\n firstBatch = (details.plan.batches[0] ?? []).map((r) => r.id);\n metrics = details.metrics;\n } catch (e) {\n if (e instanceof ExFlowRuntimeError) {\n fail(\n \"planner-error\",\n `ex-flow refused the graph: [${e.code}] ${e.message}`,\n \"fix the item graph (cycles, duplicate ids) with editItem; see diagnostics in the message\",\n { items: candidates.map((c) => c.id) },\n );\n }\n throw e;\n }\n\n // ready = first batch, but only items whose deps are really done (deps inside the batch are impossible by construction)\n const ready = firstBatch\n .map((id) => state.items[id]!)\n .filter((i) => i.dependsOn.every((d) => state.items[d]?.status === \"done\"));\n const inProgress = Object.values(state.items).filter((i) => i.status === \"in_progress\");\n const wipCounts = new Set<ItemStatus>(po.wipCounts ?? [\"in_progress\"]);\n const occupying = Object.values(state.items).filter((i) => wipCounts.has(i.status));\n const perClass: Record<string, number> = {};\n for (const i of inProgress) {\n const r = i.role ? roleOf(state, i.role) : undefined;\n const cls = r ? (r.resourceClass ?? r.id) : \"?\";\n perClass[cls] = (perClass[cls] ?? 0) + 1;\n }\n const caps = resourceCapsFor(state);\n const iteration = openIteration(state);\n const left = iteration ? remaining(iteration.budget, iteration.spent) : {};\n let tokensLeft = left.tokens;\n const inFlight = iteration\n ? Object.values(state.items).filter(\n (i) =>\n (i.iteration === iteration.id || iteration.committed.includes(i.id)) &&\n i.status === \"in_progress\",\n ).length\n : 0;\n let turnsLeft = left.turns === undefined ? undefined : left.turns - inFlight;\n const clockOut = left.wallclockMs !== undefined && left.wallclockMs <= 0;\n const estimateMode = po.estimateMode ?? \"per-weight\";\n const fallback = opts.fallbackTokensPerWeight ?? po.fallbackTokensPerWeight;\n const limit = Math.min(opts.max ?? Infinity, po.concurrencyCap ?? Infinity);\n\n const dispatched: WorkItem[] = [];\n const skipped: Skipped[] = [];\n let reason: PlanReason | undefined;\n let next = state;\n for (const item of ready) {\n if (dispatched.length >= limit) {\n reason = \"wip-full\";\n break;\n }\n const pulledTo =\n typeof po.dispatchStage === \"function\" ? po.dispatchStage(item) : po.dispatchStage;\n const target = item.status === \"todo\" && pulledTo !== undefined ? pulledTo : item.stage;\n const stage = stageOf(state, target);\n // questions are answered, not delivered: like exit policies and gates, entry policies do not apply\n const violations =\n item.type === \"question\" ? [] : evaluatePolicies(state, item, stage.entryPolicy);\n if (violations.length > 0) {\n skipped.push({\n id: item.id,\n reason: \"entry-policy\",\n detail: violations.map((v) => v.message).join(\"; \"),\n });\n continue;\n }\n const limitHere = po.wipLimitOf ? po.wipLimitOf(stage, item) : stage.wipLimit;\n if (\n limitHere !== undefined &&\n occupying.filter((i) => i.stage === stage.id && i.id !== item.id).length +\n dispatched.filter((d) => d.stage === stage.id).length >=\n limitHere\n ) {\n reason = \"wip-full\";\n skipped.push({\n id: item.id,\n reason: \"wip\",\n detail: `stage \"${stage.id}\" is at its WIP limit of ${limitHere}`,\n });\n continue;\n }\n const role = assignRole(state, item, po.roleFor);\n const cls = role.resourceClass ?? role.id;\n if (caps[cls] !== undefined && (perClass[cls] ?? 0) >= caps[cls]!) {\n reason = \"wip-full\";\n skipped.push({\n id: item.id,\n reason: \"resource-cap\",\n detail: `resource class \"${cls}\" is at its cap of ${caps[cls]}`,\n });\n continue;\n }\n if (turnsLeft !== undefined && turnsLeft <= 0) {\n reason = \"budget-exhausted\";\n skipped.push({\n id: item.id,\n reason: \"budget\",\n detail: `turns budget spent: ${iteration!.spent.turns} used + ${inFlight + dispatched.length} in flight of ${iteration!.budget.turns}`,\n });\n continue;\n }\n if (clockOut) {\n reason = \"budget-exhausted\";\n skipped.push({ id: item.id, reason: \"budget\", detail: \"wall-clock budget spent\" });\n continue;\n }\n if (tokensLeft !== undefined) {\n const est = estimateTokens(state, item.weight, fallback, estimateMode);\n if (est > tokensLeft) {\n reason = \"budget-exhausted\";\n skipped.push({\n id: item.id,\n reason: \"budget\",\n detail: `needs about ${est} tokens, ${tokensLeft} left in the iteration`,\n });\n continue;\n }\n tokensLeft -= est;\n }\n perClass[cls] = (perClass[cls] ?? 0) + 1;\n if (turnsLeft !== undefined) turnsLeft -= 1;\n next = moveItem(next, item.id, { stage: target, status: \"in_progress\" }, role.id, at);\n next = {\n ...next,\n items: { ...next.items, [item.id]: { ...next.items[item.id]!, role: role.id } },\n };\n dispatched.push(next.items[item.id]!);\n }\n if (reason === undefined && skipped.some((x) => x.reason === \"entry-policy\"))\n reason = \"policy-blocked\";\n if (reason === undefined && dispatched.length < readyAll.length) reason = \"wip-full\";\n if (dispatched.length === 0 && reason === undefined) reason = \"no-candidates\";\n next = appendEvent(\n next,\n \"planner.resolved\",\n \"planner\",\n { dispatched: dispatched.map((d) => d.id), reason: reason ?? null, skipped, metrics },\n at,\n );\n return reason\n ? { state: next, dispatched, skipped, reason }\n : { state: next, dispatched, skipped };\n}\n","import { authorOf } from \"./gates.ts\";\nimport { approverIds, separationLost } from \"./roles.ts\";\nimport type { Action, Handoff, Methodology, Rule, Violation } from \"./types.ts\";\n\nexport function coreRulesFor(methodology: Pick<Methodology, \"requiredCapabilities\">): Rule[] {\n const separation: Rule = {\n id: \"separation-lost\",\n severity: \"warning\",\n check(state, action: Action): Violation[] {\n if (action.type !== \"init\" && action.type !== \"role.register\") return [];\n return separationLost(state, methodology.requiredCapabilities).map((r) => ({\n rule: \"separation-lost\",\n severity: \"warning\" as const,\n message: `role \"${r.id}\" holds every required capability (${methodology.requiredCapabilities.join(\", \")}); no separation of duties`,\n fix: \"fine for a solo operator; otherwise split capabilities across roles\",\n }));\n },\n };\n const coi: Rule = {\n id: \"conflict-of-interest\",\n severity: \"error\",\n check(state, action: Action): Violation[] {\n // dormant by design: completions reach rules as \"item.complete\" (spec §22 B02), so this match never fires\n if (action.type !== \"complete\") return [];\n const handoff = (action.payload as { handoff?: Handoff } | undefined)?.handoff;\n if (!handoff) return [];\n const verdict = handoff.verdict ?? \"done\";\n if (verdict !== \"done\" && verdict !== \"needs-review\") return [];\n const item = state.items[handoff.item];\n if (!item) return [];\n const gate = state.stages.find((s) => s.id === item.stage)?.gate;\n if (!gate || !gate.requires.some((q) => q !== \"human\")) return [];\n if (authorOf(state, item) !== handoff.role) return [];\n const others = approverIds(state, gate.id, undefined, handoff.role);\n return [\n {\n rule: \"conflict-of-interest\",\n severity: \"error\",\n item: item.id,\n message: `role \"${handoff.role}\" authored \"${item.id}\" and may not pass gate \"${gate.id}\" on it`,\n fix: `hand the gate to another approver: ${others.join(\", \") || \"(register one)\"}`,\n },\n ];\n },\n };\n return [separation, coi];\n}\n","import { fail } from \"./errors.ts\";\nimport { requireCapabilities } from \"./roles.ts\";\nimport { coreRulesFor } from \"./rules.ts\";\nimport { openIteration } from \"./planner.ts\";\nimport { appendEvent, createState, nowOf } from \"./state.ts\";\nimport type {\n Action,\n ApplyResult,\n Methodology,\n Role,\n Stage,\n Violation,\n WorkflowState,\n} from \"./types.ts\";\n\nexport function validateAction(\n state: WorkflowState,\n methodology: Methodology,\n action: Action,\n): Violation[] {\n const out: Violation[] = [];\n for (const rule of [...coreRulesFor(methodology), ...methodology.rules])\n out.push(...rule.check(state, action));\n return out;\n}\n\nexport function applyAction(\n state: WorkflowState,\n methodology: Methodology,\n action: Action,\n reduce: (s: WorkflowState) => WorkflowState,\n): ApplyResult {\n const violations = validateAction(state, methodology, action);\n const errors = violations.filter((v) => v.severity === \"error\");\n if (errors.length) {\n fail(\n \"rule-violation\",\n `${action.type} violates ${errors.map((e) => e.rule).join(\", \")}: ${errors.map((e) => e.message).join(\"; \")}`,\n errors.map((e) => e.fix).join(\"; \"),\n { rule: errors[0]!.rule, items: errors.map((e) => e.item).filter((x): x is string => !!x) },\n );\n }\n return { state: reduce(state), warnings: violations.filter((v) => v.severity === \"warning\") };\n}\n\nexport interface InitInput<C> {\n methodology: Methodology<C>;\n config: unknown;\n roles?: Role[];\n stages?: Stage[];\n by?: string;\n now?: string;\n}\n\nexport function init<C>(input: InitInput<C>): ApplyResult {\n const m = input.methodology;\n const config = m.validateConfig(input.config);\n const stages = input.stages ?? m.defaultStages(config);\n const roles = input.roles ?? m.defaultRoles(config);\n const stateInput =\n input.now !== undefined\n ? { methodology: m.name, config, stages, roles, now: input.now }\n : { methodology: m.name, config, stages, roles };\n const state = createState(stateInput);\n requireCapabilities(state, m.requiredCapabilities, m.exclusiveCapabilities);\n return applyAction(state, m as Methodology, { type: \"init\", by: input.by ?? \"system\" }, (s) => s);\n}\n\n/** Change the config between iterations: re-validated, recorded as config.changed, derived state kept in step by the methodology hook. */\nexport function changeConfig(\n state: WorkflowState,\n methodology: Methodology,\n patch: Record<string, unknown>,\n by: string,\n now?: string,\n): ApplyResult {\n if (\n typeof patch !== \"object\" ||\n patch === null ||\n Array.isArray(patch) ||\n Object.keys(patch).length === 0\n )\n fail(\n \"invalid-input\",\n \"config patch must be a non-empty object\",\n 'pass e.g. { \"sprintBudget\": { \"tokens\": 1500000 } } to exwf config set',\n );\n const open = openIteration(state);\n if (open)\n fail(\n \"invalid-input\",\n `config cannot change while ${open.id} is open`,\n \"close it first (exwf ceremony review or cancel; a waterfall phase closes at its gate), then run exwf config set\",\n );\n const locked = (methodology.lockedConfigKeys ?? []).filter((k) => Object.hasOwn(patch, k));\n if (locked.length)\n fail(\n \"invalid-input\",\n `config key(s) ${locked.join(\", \")} cannot change after init`,\n methodology.name === \"kanban\"\n ? \"use the service-delivery-review cadence for columns and classes of service\"\n : \"start a new workflow with exwf init to change them\",\n );\n const before = (state.config ?? {}) as Record<string, unknown>;\n const after = methodology.validateConfig({ ...before, ...patch }) as Record<string, unknown>;\n const unknown = Object.keys(patch).filter((k) => !Object.hasOwn(after, k));\n if (unknown.length)\n fail(\n \"invalid-input\",\n `unknown config key(s) ${unknown.join(\", \")}`,\n `known keys: ${Object.keys(after).join(\", \")}`,\n );\n const changed = Object.keys(patch).filter(\n (k) => JSON.stringify(before[k]) !== JSON.stringify(after[k]),\n );\n if (changed.length === 0)\n fail(\n \"no-op\",\n \"config patch changes nothing\",\n \"pass at least one key with a different value to exwf config set\",\n );\n const pick = (o: Record<string, unknown>) => Object.fromEntries(changed.map((k) => [k, o[k]]));\n return applyAction(state, methodology, { type: \"config.change\", by, payload: { patch } }, (s) => {\n const at = nowOf(now);\n let s2 = appendEvent(\n { ...s, config: after },\n \"config.changed\",\n by,\n { changed, before: pick(before), after: pick(after) },\n at,\n );\n if (methodology.afterConfigChange) s2 = methodology.afterConfigChange(s2, at);\n return s2;\n });\n}\n"]}