ex-workflow 0.0.0-stage → 0.1.0-stage
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/LICENSE +21 -0
- package/README.md +130 -2
- package/dist/adapters/index.cjs +2 -0
- package/dist/adapters/index.cjs.map +1 -0
- package/dist/adapters/index.d.cts +17 -0
- package/dist/adapters/index.d.ts +17 -0
- package/dist/adapters/index.mjs +2 -0
- package/dist/adapters/index.mjs.map +1 -0
- package/dist/chunk-2FRRD6A3.mjs +2 -0
- package/dist/chunk-2FRRD6A3.mjs.map +1 -0
- package/dist/chunk-5XAKW64K.cjs +2 -0
- package/dist/chunk-5XAKW64K.cjs.map +1 -0
- package/dist/chunk-6R3YFUUV.cjs +6 -0
- package/dist/chunk-6R3YFUUV.cjs.map +1 -0
- package/dist/chunk-B7MP6Y3W.mjs +2 -0
- package/dist/chunk-B7MP6Y3W.mjs.map +1 -0
- package/dist/chunk-CPGDAHAU.cjs +2 -0
- package/dist/chunk-CPGDAHAU.cjs.map +1 -0
- package/dist/chunk-D7U3ES2L.mjs +2 -0
- package/dist/chunk-D7U3ES2L.mjs.map +1 -0
- package/dist/chunk-DZ7AN6H5.mjs +2 -0
- package/dist/chunk-DZ7AN6H5.mjs.map +1 -0
- package/dist/chunk-KIQOUUEZ.mjs +2 -0
- package/dist/chunk-KIQOUUEZ.mjs.map +1 -0
- package/dist/chunk-LPQSNYYT.cjs +2 -0
- package/dist/chunk-LPQSNYYT.cjs.map +1 -0
- package/dist/chunk-PO2SPQJP.cjs +2 -0
- package/dist/chunk-PO2SPQJP.cjs.map +1 -0
- package/dist/chunk-ROH3RYBI.mjs +2 -0
- package/dist/chunk-ROH3RYBI.mjs.map +1 -0
- package/dist/chunk-S3BXVHO7.cjs +2 -0
- package/dist/chunk-S3BXVHO7.cjs.map +1 -0
- package/dist/chunk-VGD4V5BA.mjs +6 -0
- package/dist/chunk-VGD4V5BA.mjs.map +1 -0
- package/dist/chunk-WAMNJUQ4.cjs +2 -0
- package/dist/chunk-WAMNJUQ4.cjs.map +1 -0
- package/dist/cli/bin.cjs +5 -0
- package/dist/cli/bin.cjs.map +1 -0
- package/dist/cli/bin.d.cts +1 -0
- package/dist/cli/bin.d.ts +1 -0
- package/dist/cli/bin.mjs +5 -0
- package/dist/cli/bin.mjs.map +1 -0
- package/dist/cli/index.cjs +2 -0
- package/dist/cli/index.cjs.map +1 -0
- package/dist/cli/index.d.cts +13 -0
- package/dist/cli/index.d.ts +13 -0
- package/dist/cli/index.mjs +2 -0
- package/dist/cli/index.mjs.map +1 -0
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +133 -0
- package/dist/index.d.ts +133 -0
- package/dist/index.mjs +2 -0
- package/dist/index.mjs.map +1 -0
- package/dist/scrum/index.cjs +2 -0
- package/dist/scrum/index.cjs.map +1 -0
- package/dist/scrum/index.d.cts +59 -0
- package/dist/scrum/index.d.ts +59 -0
- package/dist/scrum/index.mjs +2 -0
- package/dist/scrum/index.mjs.map +1 -0
- package/dist/types.cjs +2 -0
- package/dist/types.cjs.map +1 -0
- package/dist/types.d.cts +320 -0
- package/dist/types.d.ts +320 -0
- package/dist/types.mjs +2 -0
- package/dist/types.mjs.map +1 -0
- package/package.json +133 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/brief.ts","../src/complete.ts"],"names":["completions","state","itemId","out","ev","lastCompletion","all","synthesizeBrief","methodology","item","fail","role","roleOf","upstream","doNot","sources","dep","p","d","priorHandoffs","touched","relatedBugs","b","a","it","openIteration","gate","stageOf","brief","remaining","next","opts","res","plan","briefs","VERDICTS","LESSON_SCOPES","isObj","x","str","validate","handoff","acc","getItem","bad","what","fix","verdict","lessons","l","followUps","f","k","pulledFromStage","i","reworkStage","lastDispatchBefore","complete","now","at","nowOf","id","s","addEvidence","addSpent","lid","appendEvent","n","first","_drop","rest","addItem","clearRole","moveItem","lastStageId","stage","assertPolicies","checkGate","v","raisePending","advanceItem","raiseBlocker","thinker","rolesWith","qid","parent","pulledFrom","q","patchItem"],"mappings":"4JAgBA,SAASA,EACPC,CAAAA,CACAC,CAAAA,CAC0C,CAC1C,IAAMC,CAAAA,CAAgD,EAAC,CACvD,IAAA,IAAWC,CAAAA,IAAMH,CAAAA,CAAM,OACjBG,CAAAA,CAAG,IAAA,GAAS,kBAAqBA,CAAAA,CAAG,OAAA,CAA6B,KAAOF,CAAAA,EAC1EC,CAAAA,CAAI,IAAA,CAAK,CAAE,GAAIC,CAAAA,CAAG,OAAA,CAA8B,GAAIA,CAAAA,CAAG,EAAG,CAAC,CAAA,CAE/D,OAAOD,CACT,CAEA,SAASE,EAAeJ,CAAAA,CAAsBC,CAAAA,CAA8C,CAC1F,IAAMI,CAAAA,CAAMN,EAAYC,CAAAA,CAAOC,CAAM,CAAA,CACrC,OAAOI,EAAIA,CAAAA,CAAI,MAAA,CAAS,CAAC,CAC3B,CAEO,SAASC,CAAAA,CACdN,CAAAA,CACAO,CAAAA,CACAC,CAAAA,CACO,CACFA,CAAAA,CAAK,IAAA,EACRC,EACE,cAAA,CACA,CAAA,MAAA,EAASD,EAAK,EAAE,CAAA,sBAAA,CAAA,CAChB,0CAAA,CACA,CAAE,MAAO,CAACA,CAAAA,CAAK,EAAE,CAAE,CACrB,EACF,IAAME,CAAAA,CAAOC,EAAOX,CAAAA,CAAOQ,CAAAA,CAAK,IAAI,CAAA,CAC/BE,CAAAA,EACHD,EACE,cAAA,CACA,CAAA,MAAA,EAASD,EAAK,IAAI,CAAA,gBAAA,CAAA,CAClB,CAAA,kBAAA,EAAqB,MAAA,CAAO,KAAKR,CAAAA,CAAM,KAAK,EAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAC1D,CAAA,CACF,IAAMY,CAAAA,CAA8B,EAAC,CAC/BC,CAAAA,CAAQ,CAAC,GAAGH,CAAAA,CAAK,MAAM,CAAA,CACvBI,CAAAA,CAAU,CACd,GAAGN,EAAK,SAAA,CACR,GAAIA,EAAK,IAAA,GAAS,KAAA,EAASA,EAAK,IAAA,GAAS,gBAAA,CAAoBA,EAAK,OAAA,EAAW,GAAM,EACrF,EACA,IAAA,IAAWO,CAAAA,IAAOD,EAAS,CACzB,IAAME,CAAAA,CAAIZ,CAAAA,CAAeJ,EAAOe,CAAG,CAAA,CACnC,GAAKC,CAAAA,CACL,CAAAJ,EAAS,IAAA,CAAK,CAAE,IAAA,CAAMG,CAAAA,CAAK,SAAUC,CAAAA,CAAE,QAAA,CAAU,MAAOA,CAAAA,CAAE,KAAM,CAAC,CAAA,CACjE,IAAA,IAAWC,CAAAA,IAAKD,CAAAA,CAAE,OAAaH,CAAAA,CAAM,QAAA,CAASI,CAAC,CAAA,EAAGJ,CAAAA,CAAM,KAAKI,CAAC,EAAA,CAChE,CACA,IAAMC,CAAAA,CAAwCnB,EAAYC,CAAAA,CAAOQ,CAAAA,CAAK,EAAE,CAAA,CAAE,GAAA,CAAKQ,IAAO,CACpF,IAAA,CAAMA,CAAAA,CAAE,IAAA,CACR,QAASA,CAAAA,CAAE,OAAA,CACX,MAAOA,CAAAA,CAAE,KAAA,CACT,SAAUA,CAAAA,CAAE,QAAA,CACZ,EAAA,CAAIA,CAAAA,CAAE,EACR,CAAA,CAAE,CAAA,CACIG,IAAU,IAAI,GAAA,CAAI,CAACX,CAAAA,CAAK,EAAA,CAAI,GAAGA,CAAAA,CAAK,SAAS,CAAC,CAAA,CAC9CY,EAAoC,MAAA,CAAO,MAAA,CAAOpB,EAAM,KAAK,CAAA,CAChE,OACEqB,CAAAA,EAAAA,CACEA,CAAAA,CAAE,OAAS,KAAA,EAASA,CAAAA,CAAE,OAAS,gBAAA,GAChCA,CAAAA,CAAE,KAAOb,CAAAA,CAAK,EAAA,EACda,CAAAA,CAAE,MAAA,GAAW,QACbA,CAAAA,CAAE,MAAA,GAAW,YACZA,CAAAA,CAAE,OAAA,EAAW,EAAC,EAAG,IAAA,CAAMC,CAAAA,EAAMH,GAAAA,CAAQ,IAAIG,CAAC,CAAC,CAChD,CAAA,CACC,GAAA,CAAKD,IAAO,CAAE,EAAA,CAAIA,CAAAA,CAAE,EAAA,CAAI,MAAOA,CAAAA,CAAE,KAAA,CAAO,QAASA,CAAAA,CAAE,OAAA,EAAW,EAAG,CAAA,CAAE,EAChEE,CAAAA,CAAKC,CAAAA,CAAcxB,CAAK,CAAA,CACxByB,CAAAA,CAAOC,EAAQ1B,CAAAA,CAAOQ,CAAAA,CAAK,KAAK,CAAA,CAAE,IAAA,CAClCmB,CAAAA,CAAe,CACnB,KAAAnB,CAAAA,CACA,IAAA,CAAAE,EACA,SAAA,CAAWA,CAAAA,CAAK,UAChB,UAAA,CAAY,CAAC,GAAGH,CAAAA,CAAY,WAAWP,CAAAA,CAAOQ,CAAI,EAAG,GAAGR,CAAAA,CAAM,UAAU,CAAA,CACxE,MAAA,CAAQa,CAAAA,CACR,UAAA,CAAYL,EAAK,UAAA,CACjB,QAAA,CAAAI,EACA,aAAA,CAAAM,CAAAA,CACA,YAAAE,CAAAA,CACA,eAAA,CAAiBG,EAAKK,GAAAA,CAAUL,CAAAA,CAAG,OAAQA,CAAAA,CAAG,KAAK,EAAI,EACzD,EACA,OAAIE,CAAAA,GAAME,CAAAA,CAAM,SAAA,CAAYF,GACrBE,CACT,CAQO,SAASE,EAAAA,CACd7B,CAAAA,CACAO,EACAuB,CAAAA,CAAoB,EAAC,CACT,CACZ,IAAMC,CAAAA,CAAMC,CAAAA,CAAKhC,EAAOO,CAAAA,CAAauB,CAAI,EACnCG,CAAAA,CAASF,CAAAA,CAAI,UAAA,CAAW,GAAA,CAAK,GACjCzB,CAAAA,CAAgByB,CAAAA,CAAI,MAAOxB,CAAAA,CAAawB,CAAAA,CAAI,MAAM,KAAA,CAAM,CAAA,CAAE,EAAE,CAAE,CAChE,EACA,OAAOA,CAAAA,CAAI,OACP,CAAE,KAAA,CAAOA,EAAI,KAAA,CAAO,MAAA,CAAAE,CAAAA,CAAQ,MAAA,CAAQF,EAAI,MAAO,CAAA,CAC/C,CAAE,KAAA,CAAOA,CAAAA,CAAI,MAAO,MAAA,CAAAE,CAAO,CACjC,CC1FA,IAAMC,CAAAA,CAA8B,CAAC,OAAQ,cAAA,CAAgB,QAAA,CAAU,UAAW,UAAU,CAAA,CACtFC,CAAAA,CAAmC,CAAC,SAAU,OAAA,CAAS,QAAA,CAAU,OAAQ,QAAQ,CAAA,CAEjFC,EAASC,CAAAA,EACb,OAAOA,GAAM,QAAA,EAAYA,CAAAA,GAAM,MAAQ,CAAC,KAAA,CAAM,QAAQA,CAAC,CAAA,CACnDC,EAAOD,CAAAA,EAAe,OAAOA,CAAAA,EAAM,QAAA,CAEzC,SAASE,CAAAA,CAASvC,CAAAA,CAAsBwC,EAAkBC,CAAAA,CAAuB,CAC/E,IAAMjC,CAAAA,CAAOkC,CAAAA,CAAQ1C,CAAAA,CAAOwC,CAAAA,CAAQ,IAAI,CAAA,CACpChC,CAAAA,CAAK,SAAW,aAAA,EAClBC,CAAAA,CACE,qBACA,CAAA,MAAA,EAASD,CAAAA,CAAK,EAAE,CAAA,KAAA,EAAQA,EAAK,MAAM,CAAA,iBAAA,CAAA,CACnC,4DACA,CAAE,KAAA,CAAO,CAACA,CAAAA,CAAK,EAAE,CAAE,CACrB,CAAA,CACG,MAAM,OAAA,CAAQgC,CAAAA,CAAQ,MAAM,CAAA,EAC/B/B,CAAAA,CACE,kBACA,CAAA,aAAA,EAAgBD,CAAAA,CAAK,EAAE,CAAA,qBAAA,CAAA,CACvB,2DACA,CAAE,KAAA,CAAO,CAACA,CAAAA,CAAK,EAAE,CAAE,CACrB,CAAA,CAAA,CACE,CAAC,KAAA,CAAM,QAAQgC,CAAAA,CAAQ,QAAQ,GAAK,CAAC,KAAA,CAAM,QAAQA,CAAAA,CAAQ,cAAc,CAAA,GAC3E/B,CAAAA,CACE,kBACA,CAAA,aAAA,EAAgBD,CAAAA,CAAK,EAAE,CAAA,uCAAA,CAAA,CACvB,yCAAA,CACA,CAAE,KAAA,CAAO,CAACA,EAAK,EAAE,CAAE,CACrB,CAAA,CACF,IAAMmC,EAAM,CAACC,CAAAA,CAAcC,IACzBpC,CAAAA,CAAK,iBAAA,CAAmB,CAAA,aAAA,EAAgBD,CAAAA,CAAK,EAAE,CAAA,GAAA,EAAMoC,CAAI,GAAIC,CAAAA,CAAK,CAAE,MAAO,CAACrC,CAAAA,CAAK,EAAE,CAAE,CAAC,CAAA,CAClFsC,CAAAA,CAAUN,EAAQ,OAAA,EAAW,MAAA,CAC9BN,EAAS,QAAA,CAASY,CAAO,CAAA,EAC5BH,CAAAA,CAAI,mBAAmB,IAAA,CAAK,SAAA,CAAUG,CAAO,CAAC,CAAA,CAAA,CAAI,eAAeZ,CAAAA,CAAS,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,EACnFM,CAAAA,CAAQ,QAAA,CAAS,MAAOxB,CAAAA,EAAMoB,CAAAA,CAAMpB,CAAC,CAAA,EAAKsB,CAAAA,CAAItB,CAAAA,CAAE,IAAI,GAAKsB,CAAAA,CAAItB,CAAAA,CAAE,GAAG,CAAC,CAAA,EACtE2B,EAAI,6CAAA,CAA+C,2CAA2C,CAAA,CAChG,IAAMI,IAAmBP,CAAAA,CAAQ,OAAA,EAAW,EAAC,CAAA,CAE3C,CAAC,MAAM,OAAA,CAAQO,GAAO,CAAA,EACtB,CAACA,IAAQ,KAAA,CAAOC,CAAAA,EAAMZ,EAAMY,CAAC,CAAA,EAAKV,EAAIU,CAAAA,CAAE,IAAI,GAAKb,CAAAA,CAAc,QAAA,CAASa,EAAE,KAAe,CAAC,IAE1FL,CAAAA,CACE,2CAAA,CACA,oBAAoBR,CAAAA,CAAc,IAAA,CAAK,IAAI,CAAC,EAC9C,CAAA,CACF,IAAMc,EAAqBT,CAAAA,CAAQ,UAAA,EAAc,EAAC,CAAA,CAC9C,CAAC,KAAA,CAAM,OAAA,CAAQS,CAAS,CAAA,EAAK,CAACA,EAAU,KAAA,CAAOC,CAAAA,EAAMd,EAAMc,CAAC,CAAA,EAAKZ,CAAAA,CAAIY,CAAAA,CAAE,EAAE,CAAA,EAAKZ,CAAAA,CAAIY,EAAE,KAAK,CAAC,IAC5FP,CAAAA,CAAI,iDAAA,CAAmD,uCAAuC,CAAA,CAC5FH,CAAAA,CAAQ,OAAShC,CAAAA,CAAK,IAAA,EACxBC,EACE,iBAAA,CACA,CAAA,cAAA,EAAiB+B,EAAQ,IAAI,CAAA,oCAAA,EAAuChC,CAAAA,CAAK,IAAI,IAC7E,CAAA,aAAA,EAAgBA,CAAAA,CAAK,IAAI,CAAA,gBAAA,CAAA,CACzB,CAAE,MAAO,CAACA,CAAAA,CAAK,EAAE,CAAE,CACrB,CAAA,CAAA,CACE,CAACiC,EAAI,KAAA,EAASA,CAAAA,CAAI,MAAM,IAAA,EAAK,GAAM,EAAA,GACrChC,CAAAA,CACE,qBACA,CAAA,gBAAA,EAAmBD,CAAAA,CAAK,EAAE,CAAA,cAAA,CAAA,CAC1B,gDAAA,CACA,CAAE,KAAA,CAAO,CAACA,EAAK,EAAE,CAAE,CACrB,CAAA,CACF,IAAA,IAAW2C,KAAK,CAAC,UAAA,CAAY,YAAa,YAAY,CAAA,CAAA,CAChD,CAAC,MAAA,CAAO,SAASV,CAAAA,CAAIU,CAAC,CAAC,CAAA,EAAKV,CAAAA,CAAIU,CAAC,CAAA,CAAI,CAAA,GACvC1C,EACE,oBAAA,CACA,CAAA,WAAA,EAAc0C,CAAC,CAAA,8BAAA,CAAA,CACf,CAAA,QAAA,EAAWA,CAAC,CAAA,6BAAA,CAAA,CACZ,CAAE,MAAO,CAAC3C,CAAAA,CAAK,EAAE,CAAE,CACrB,EAEN,CAGA,SAAS4C,CAAAA,CAAgB5C,CAAAA,CAAwB,CAC/C,IAAA,IAAS6C,CAAAA,CAAI7C,EAAK,WAAA,CAAY,MAAA,CAAS,EAAG6C,CAAAA,EAAK,CAAA,CAAGA,IAAK,CACrD,IAAM,EAAI7C,CAAAA,CAAK,WAAA,CAAY6C,CAAC,CAAA,CAC5B,GAAI,CAAA,CAAE,EAAA,CAAG,SAAW,aAAA,CAAe,OAAO,EAAE,IAAA,CAAK,KACnD,CACA,OAAO7C,EAAK,KACd,CAGA,SAAS8C,CAAAA,CAAYtD,CAAAA,CAAsBQ,EAAwB,CACjE,OAAO+C,GAAAA,CAAmBvD,CAAAA,CAAOQ,CAAI,CAAA,EAAG,IAAA,CAAK,OAAS4C,CAAAA,CAAgB5C,CAAI,CAC5E,CAEO,SAASgD,GACdxD,GAAAA,CACAO,GAAAA,CACAiC,IACAC,CAAAA,CACAgB,CAAAA,CACa,CACblB,CAAAA,CAASvC,GAAAA,CAAOwC,IAASC,CAAG,CAAA,CAC5B,IAAMiB,CAAAA,CAAKC,EAAMF,CAAG,CAAA,CACdG,IAAKpB,GAAAA,CAAQ,IAAA,CACb9B,EAAO8B,GAAAA,CAAQ,IAAA,CACjBqB,CAAAA,CAAmB,CAAE,GAAG7D,GAAAA,CAAO,UAAA,CAAY,CAAC,GAAGA,GAAAA,CAAM,WAAYyC,CAAG,CAAE,CAAA,CAC1E,IAAA,IAAWzB,KAAKwB,GAAAA,CAAQ,QAAA,CACtBqB,EAAIC,CAAAA,CAAYD,CAAAA,CAAGD,IAAI,CAAE,IAAA,CAAM5C,EAAE,IAAA,CAAM,GAAA,CAAKA,EAAE,GAAA,CAAK,EAAA,CAAIN,CAAK,CAAA,CAAGgD,CAAE,EACnE,IAAMnC,CAAAA,CAAKC,CAAAA,CAAcqC,CAAC,EACtBtC,CAAAA,GAAOA,CAAAA,CAAG,UAAU,QAAA,CAASqC,GAAE,GAAKlB,CAAAA,CAAQmB,CAAAA,CAAGD,GAAE,CAAA,CAAE,YAAcrC,CAAAA,CAAG,EAAA,CAAA,GACtEsC,EAAI,CACF,GAAGA,EACH,UAAA,CAAYA,CAAAA,CAAE,UAAA,CAAW,GAAA,CAAKxB,GAC5BA,CAAAA,CAAE,EAAA,GAAOd,EAAG,EAAA,CAAK,CAAE,GAAGc,CAAAA,CAAG,KAAA,CAAO0B,IAAS1B,CAAAA,CAAE,KAAA,CAAOI,CAAG,CAAE,CAAA,CAAIJ,CAC7D,CACF,CAAA,CAAA,CAGF,QAAWW,CAAAA,IAAKR,GAAAA,CAAQ,OAAA,EAAW,GAAI,CACrC,IAAMwB,EAAM,CAAA,CAAA,EAAIH,CAAAA,CAAE,QAAQ,MAAA,CAAS,CAAC,CAAA,CAAA,CACpCA,CAAAA,CAAI,CACF,GAAGA,CAAAA,CACH,QAAS,CACP,GAAGA,EAAE,OAAA,CACL,CAAE,EAAA,CAAIG,CAAAA,CAAK,GAAAN,CAAAA,CAAI,IAAA,CAAMV,EAAE,IAAA,CAAM,KAAA,CAAOA,EAAE,KAAA,CAAO,MAAA,CAAQ,SAAU,IAAA,CAAMtC,CAAAA,CAAM,KAAMkD,GAAG,CACtF,CACF,CAAA,CACAC,CAAAA,CAAII,EACFJ,CAAAA,CACA,eAAA,CACAnD,CAAAA,CACA,CAAE,GAAIsD,CAAAA,CAAK,IAAA,CAAMtD,EAAM,IAAA,CAAMkD,GAAAA,CAAI,MAAOZ,CAAAA,CAAE,KAAM,CAAA,CAChDU,CACF,EACF,CAEA,IAAMT,EAAsB,EAAC,CAC7B,QAAWiB,CAAAA,IAAK1B,GAAAA,CAAQ,UAAA,EAAc,GAAI,CACxC,IAAM2B,EAAQN,CAAAA,CAAE,MAAA,CAAO,CAAC,CAAA,CAClB,CAAE,UAAWO,CAAAA,CAAO,GAAGC,CAAK,CAAA,CAAIH,CAAAA,CACtCL,EAAIS,CAAAA,CACFT,CAAAA,CACA,CAAE,GAAGQ,CAAAA,CAAM,KAAA,CAAOF,CAAAA,CAAM,GAAI,MAAA,CAAQP,GAAAA,CAAI,KAAM,CAAC,GAAIM,EAAE,IAAA,EAAQ,EAAC,CAAI,WAAW,CAAE,CAAA,CAC/ExD,CAAAA,CACAgD,CACF,CAAA,CACAT,CAAAA,CAAU,KAAKiB,CAAAA,CAAE,EAAE,EACrB,CAEA,IAAMpB,CAAAA,CAAUN,GAAAA,CAAQ,SAAW,MAAA,CACnC,GAAIM,IAAY,QAAA,CAAU,CAAA,CACpB,CAACN,GAAAA,CAAQ,KAAA,EAASA,IAAQ,KAAA,CAAM,IAAA,KAAW,EAAA,GAC7C/B,CAAAA,CACE,kBACA,CAAA,WAAA,EAAcmD,GAAE,CAAA,aAAA,CAAA,CAChB,uCAAA,CACA,CAAE,KAAA,CAAO,CAACA,GAAE,CAAE,CAChB,EACF,IAAMpD,CAAAA,CAAOkC,CAAAA,CAAQmB,CAAAA,CAAGD,GAAE,CAAA,CAC1BC,CAAAA,CAAIU,IAAUC,GAAAA,CAASX,CAAAA,CAAGD,IAAI,CAAE,KAAA,CAAON,CAAAA,CAAYO,CAAAA,CAAGrD,CAAI,CAAA,CAAG,MAAA,CAAQ,MAAO,CAAA,CAAGE,CAAAA,CAAMgD,CAAE,CAAA,CAAGE,GAAE,EAC5FC,CAAAA,CAAII,CAAAA,CAAYJ,EAAG,aAAA,CAAenD,CAAAA,CAAM,CAAE,EAAA,CAAAkD,GAAAA,CAAI,GAAIlD,CAAAA,CAAM,KAAA,CAAO8B,GAAAA,CAAQ,KAAM,EAAGkB,CAAE,EACpF,UACGZ,CAAAA,GAAY,MAAA,EAAUA,IAAY,cAAA,GACnCJ,CAAAA,CAAQmB,EAAGD,GAAE,CAAA,CAAE,OAAS,UAAA,CACxB,CAEA,IAAMa,CAAAA,CAAcZ,CAAAA,CAAE,OAAOA,CAAAA,CAAE,MAAA,CAAO,MAAA,CAAS,CAAC,EAAG,EAAA,CACnDA,CAAAA,CAAIW,IAASX,CAAAA,CAAGD,GAAAA,CAAI,CAAE,KAAA,CAAOa,CAAAA,CAAa,OAAQ,MAAO,CAAA,CAAG/D,EAAMgD,CAAE,EACtE,SAAWZ,CAAAA,GAAY,MAAA,EAAUA,IAAY,cAAA,CAAgB,CAC3D,IAAMtC,CAAAA,CAAOkC,EAAQmB,CAAAA,CAAGD,GAAE,EACpBc,GAAAA,CAAQhD,CAAAA,CAAQmC,EAAGrD,CAAAA,CAAK,KAAK,CAAA,CAEnC,GADAmE,EAAed,CAAAA,CAAGrD,CAAAA,CAAMkE,IAAM,UAAA,CAAY,CAAA,OAAA,EAAUA,IAAM,EAAE,CAAA,CAAA,CAAG,CAAA,CAC3DA,GAAAA,CAAM,KAAM,CACd,IAAM3C,IAAM6C,CAAAA,CAAUf,CAAAA,CAAGrD,EAAMkE,GAAAA,CAAM,IAAA,CAAMhE,CAAI,CAAA,CAC3CqB,GAAAA,CAAI,UAAY,MAAA,EAClBtB,CAAAA,CACE,aACA,CAAA,MAAA,EAASiE,GAAAA,CAAM,KAAK,EAAE,CAAA,UAAA,EAAad,GAAE,CAAA,GAAA,EAAM7B,IAAI,UAAA,CAAW,GAAA,CAAK8C,GAAMA,CAAAA,CAAE,OAAO,EAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAC1F9C,IAAI,UAAA,CAAW,GAAA,CAAK8C,GAAMA,CAAAA,CAAE,GAAG,EAAE,IAAA,CAAK,IAAI,CAAA,CAC1C,CAAE,MAAO,CAACjB,GAAE,EAAG,IAAA,CAAM7B,GAAAA,CAAI,WAAW,CAAC,CAAA,CAAG,IAAK,CAC/C,CAAA,CACEA,IAAI,OAAA,GAAY,OAAA,CAClB8B,EAAIiB,GAAAA,CACFjB,CAAAA,CACA,CACE,IAAA,CAAM,MAAA,CACN,IAAA,CAAMD,GAAAA,CACN,KAAMc,GAAAA,CAAM,IAAA,CAAK,GACjB,QAAA,CAAU,CAAA,cAAA,EAAiBA,IAAM,IAAA,CAAK,EAAE,CAAA,OAAA,EAAUlE,CAAAA,CAAK,KAAK,CAAA,GAAA,EAAMoD,GAAE,IACtE,CAAA,CACAF,CACF,EAEAG,CAAAA,CAAII,CAAAA,CACFc,CAAAA,CAAYlB,CAAAA,CAAGD,IAAIlD,CAAAA,CAAMoC,CAAAA,GAAY,eAAgBY,CAAE,CAAA,CACvD,cACAhD,CAAAA,CACA,CAAE,KAAMkD,GAAAA,CAAI,IAAA,CAAMc,IAAM,IAAA,CAAK,EAAG,EAChChB,CACF,EAEJ,MACEG,CAAAA,CAAIkB,CAAAA,CAAYlB,CAAAA,CAAGD,GAAAA,CAAIlD,EAAMoC,CAAAA,GAAY,cAAA,CAAgBY,CAAE,EAE/D,CAAA,KAAA,GAAWZ,IAAY,SAAA,CACrBe,CAAAA,CAAImB,CAAAA,CAAanB,CAAAA,CAAGD,IAAIpB,GAAAA,CAAQ,KAAA,EAAS,oBAAqB9B,CAAAA,CAAMA,CAAAA,CAAMgD,CAAE,CAAA,CAAA,KAAA,GACnEZ,CAAAA,GAAY,UAAA,CAAY,CACjC,IAAMmC,CAAAA,CAAUC,CAAAA,CAAUrB,EAAG,UAAU,CAAA,CAAE,CAAC,CAAA,CACrCoB,CAAAA,EACHxE,EACE,oBAAA,CACA,CAAA,gEAAA,EAAmEmD,GAAE,CAAA,CAAA,CAAA,CACrE,0CAAA,CACA,CAAE,KAAA,CAAO,CAACA,GAAE,CAAE,CAChB,CAAA,CACF,IAAM,EAAI,MAAA,CAAO,IAAA,CAAKC,EAAE,KAAK,CAAA,CAAE,OAAQV,CAAAA,EAAMA,CAAAA,CAAE,UAAA,CAAW,CAAA,EAAGS,GAAE,CAAA,EAAA,CAAI,CAAC,EAAE,MAAA,CAAS,CAAA,CACzEuB,IAAM,CAAA,EAAGvB,GAAE,CAAA,EAAA,EAAK,CAAC,GACjBwB,CAAAA,CAAS1C,CAAAA,CAAQmB,EAAGD,GAAE,CAAA,CACtByB,EAAajC,CAAAA,CAAgBgC,CAAM,EACnCE,CAAAA,CAAa,CACjB,GAAIH,GAAAA,CACJ,IAAA,CAAM,WACN,KAAA,CAAO3C,GAAAA,CAAQ,eAAe,IAAA,CAAK,KAAK,CAAA,EAAKA,GAAAA,CAAQ,OAAS,CAAA,cAAA,EAAiBoB,GAAE,GACjF,MAAA,CAAQA,GAAAA,CACR,KAAMqB,CAAAA,CAAQ,EAAA,CACd,QAAA,CAAU,MAAA,CAAO,iBACjB,KAAA,CAAOI,CACT,EACID,CAAAA,CAAO,SAAA,GAAc,SAAWE,CAAAA,CAAE,SAAA,CAAYF,CAAAA,CAAO,SAAA,CAAA,CACzDvB,EAAIS,CAAAA,CAAQT,CAAAA,CAAGyB,EAAG5E,CAAAA,CAAMgD,CAAE,EAC1BG,CAAAA,CAAIW,GAAAA,CAASX,EAAGD,GAAAA,CAAI,CAAE,MAAOyB,CAAAA,CAAY,MAAA,CAAQ,MAAO,CAAA,CAAG3E,CAAAA,CAAMgD,CAAE,CAAA,CACnEG,CAAAA,CAAI0B,CAAAA,CAAU1B,CAAAA,CAAGD,IAAKvB,CAAAA,GAAO,CAAE,GAAGA,CAAAA,CAAG,SAAA,CAAW,CAAC,GAAGA,CAAAA,CAAE,SAAA,CAAW8C,GAAG,CAAE,CAAA,CAAE,CAAA,CACxEtB,EAAII,CAAAA,CAAYJ,CAAAA,CAAG,iBAAkBnD,CAAAA,CAAM,CAAE,EAAA,CAAAkD,GAAAA,CAAI,SAAUuB,GAAAA,CAAK,EAAA,CAAIF,EAAQ,EAAG,CAAA,CAAGvB,CAAE,EACtF,CAEA,OAAAG,CAAAA,CAAII,CAAAA,CACFJ,EACA,gBAAA,CACAnD,CAAAA,CACA,CACE,EAAA,CAAAkD,GAAAA,CACA,KAAAlD,CAAAA,CACA,OAAA,CAAAoC,CAAAA,CACA,QAAA,CAAUN,IAAQ,QAAA,CAClB,KAAA,CAAOA,IAAQ,KAAA,CACf,MAAA,CAAQA,IAAQ,MAAA,CAChB,cAAA,CAAgBA,IAAQ,cAAA,CACxB,SAAA,CAAAS,EACA,MAAA,CAAQR,CAAAA,CAAI,SAAWA,CAAAA,CAAI,SAAA,CAC3B,WAAYA,CAAAA,CAAI,UAAA,CAChB,KAAA,CAAOA,CAAAA,CAAI,KACb,CAAA,CACAiB,CACF,EACInD,GAAAA,CAAY,aAAA,GAAesD,EAAItD,GAAAA,CAAY,aAAA,CAAcsD,EAAGD,GAAAA,CAAIF,CAAE,GAC/D,CAAE,KAAA,CAAOG,EAAG,QAAA,CAAU,EAAG,CAClC","file":"chunk-B7MP6Y3W.mjs","sourcesContent":["import { remaining } from \"./budget.ts\";\nimport { fail } from \"./errors.ts\";\nimport { stageOf } from \"./items.ts\";\nimport { openIteration, plan, type PlanOptions, type PlanReason } from \"./planner.ts\";\nimport { roleOf } from \"./roles.ts\";\nimport type { Brief, Handoff, Methodology, Verdict, WorkItem, WorkflowState } from \"./types.ts\";\n\ninterface CompletedPayload {\n id: string;\n role: string;\n verdict: Verdict;\n produced: Handoff[\"produced\"];\n notes: string;\n do_not: string[];\n}\n\nfunction completions(\n state: WorkflowState,\n itemId: string,\n): Array<CompletedPayload & { at: string }> {\n const out: Array<CompletedPayload & { at: string }> = [];\n for (const ev of state.events) {\n if (ev.type === \"item.completed\" && (ev.payload as CompletedPayload).id === itemId)\n out.push({ ...(ev.payload as CompletedPayload), at: ev.at });\n }\n return out;\n}\n\nfunction lastCompletion(state: WorkflowState, itemId: string): CompletedPayload | undefined {\n const all = completions(state, itemId);\n return all[all.length - 1];\n}\n\nexport function synthesizeBrief(\n state: WorkflowState,\n methodology: Methodology,\n item: WorkItem,\n): Brief {\n if (!item.role)\n fail(\n \"unknown-role\",\n `item \"${item.id}\" has no role assigned`,\n \"dispatch it with next() or set item.role\",\n { items: [item.id] },\n );\n const role = roleOf(state, item.role);\n if (!role)\n fail(\n \"unknown-role\",\n `role \"${item.role}\" does not exist`,\n `registered roles: ${Object.keys(state.roles).join(\", \")}`,\n );\n const upstream: Brief[\"upstream\"] = [];\n const doNot = [...role.do_not];\n const sources = [\n ...item.dependsOn,\n ...(item.type === \"bug\" || item.type === \"change-request\" ? (item.affects ?? []) : []),\n ];\n for (const dep of sources) {\n const p = lastCompletion(state, dep);\n if (!p) continue;\n upstream.push({ item: dep, produced: p.produced, notes: p.notes });\n for (const d of p.do_not) if (!doNot.includes(d)) doNot.push(d);\n }\n const priorHandoffs: Brief[\"priorHandoffs\"] = completions(state, item.id).map((p) => ({\n role: p.role,\n verdict: p.verdict,\n notes: p.notes,\n produced: p.produced,\n at: p.at,\n }));\n const touched = new Set([item.id, ...item.dependsOn]);\n const relatedBugs: Brief[\"relatedBugs\"] = Object.values(state.items)\n .filter(\n (b) =>\n (b.type === \"bug\" || b.type === \"change-request\") &&\n b.id !== item.id &&\n b.status !== \"done\" &&\n b.status !== \"dropped\" &&\n (b.affects ?? []).some((a) => touched.has(a)),\n )\n .map((b) => ({ id: b.id, title: b.title, affects: b.affects ?? [] }));\n const it = openIteration(state);\n const gate = stageOf(state, item.stage).gate;\n const brief: Brief = {\n item,\n role,\n modelTier: role.modelTier,\n invariants: [...methodology.invariants(state, item), ...state.agreements],\n do_not: doNot,\n acceptance: item.acceptance,\n upstream,\n priorHandoffs,\n relatedBugs,\n budgetRemaining: it ? remaining(it.budget, it.spent) : {},\n };\n if (gate) brief.gateAhead = gate;\n return brief;\n}\n\nexport interface NextResult {\n state: WorkflowState;\n briefs: Brief[];\n reason?: PlanReason;\n}\n\nexport function next(\n state: WorkflowState,\n methodology: Methodology,\n opts: PlanOptions = {},\n): NextResult {\n const res = plan(state, methodology, opts);\n const briefs = res.dispatched.map((d) =>\n synthesizeBrief(res.state, methodology, res.state.items[d.id]!),\n );\n return res.reason\n ? { state: res.state, briefs, reason: res.reason }\n : { state: res.state, briefs };\n}\n","import { addSpent } from \"./budget.ts\";\nimport { fail } from \"./errors.ts\";\nimport { checkGate, lastDispatchBefore, raisePending } from \"./gates.ts\";\nimport {\n addEvidence,\n addItem,\n advanceItem,\n clearRole,\n getItem,\n moveItem,\n patchItem,\n raiseBlocker,\n stageOf,\n} from \"./items.ts\";\nimport { assertPolicies } from \"./policies.ts\";\nimport { openIteration } from \"./planner.ts\";\nimport { rolesWith } from \"./roles.ts\";\nimport { appendEvent, nowOf } from \"./state.ts\";\nimport type {\n Accounting,\n ApplyResult,\n Handoff,\n Methodology,\n NewItem,\n WorkItem,\n WorkflowState,\n} from \"./types.ts\";\n\nconst VERDICTS: readonly string[] = [\"done\", \"needs-review\", \"rework\", \"blocked\", \"escalate\"];\nconst LESSON_SCOPES: readonly string[] = [\"policy\", \"skill\", \"memory\", \"spec\", \"review\"];\n\nconst isObj = (x: unknown): x is Record<string, unknown> =>\n typeof x === \"object\" && x !== null && !Array.isArray(x);\nconst str = (x: unknown) => typeof x === \"string\";\n\nfunction validate(state: WorkflowState, handoff: Handoff, acc: Accounting): void {\n const item = getItem(state, handoff.item);\n if (item.status !== \"in_progress\")\n fail(\n \"invalid-transition\",\n `item \"${item.id}\" is ${item.status}, not in_progress`,\n \"only dispatched items can be completed; call next() first\",\n { items: [item.id] },\n );\n if (!Array.isArray(handoff.do_not))\n fail(\n \"handoff-invalid\",\n `handoff for \"${item.id}\" has no do_not array`,\n \"set handoff.do_not to [] when there is nothing to forbid\",\n { items: [item.id] },\n );\n if (!Array.isArray(handoff.produced) || !Array.isArray(handoff.open_questions))\n fail(\n \"handoff-invalid\",\n `handoff for \"${item.id}\" needs produced[] and open_questions[]`,\n \"pass empty arrays when there is nothing\",\n { items: [item.id] },\n );\n const bad = (what: string, fix: string) =>\n fail(\"handoff-invalid\", `handoff for \"${item.id}\": ${what}`, fix, { items: [item.id] });\n const verdict = handoff.verdict ?? \"done\";\n if (!VERDICTS.includes(verdict))\n bad(`unknown verdict ${JSON.stringify(verdict)}`, `use one of: ${VERDICTS.join(\", \")}`);\n if (!handoff.produced.every((p) => isObj(p) && str(p.kind) && str(p.ref)))\n bad(\"produced[] entries need string kind and ref\", 'use { \"kind\": \"code\", \"ref\": \"src/a.ts\" }');\n const lessons: unknown = handoff.lessons ?? [];\n if (\n !Array.isArray(lessons) ||\n !lessons.every((l) => isObj(l) && str(l.text) && LESSON_SCOPES.includes(l.scope as string))\n )\n bad(\n \"lessons[] entries need a text and a scope\",\n `scope is one of: ${LESSON_SCOPES.join(\", \")}`,\n );\n const followUps: unknown = handoff.follow_ups ?? [];\n if (!Array.isArray(followUps) || !followUps.every((f) => isObj(f) && str(f.id) && str(f.title)))\n bad(\"follow_ups[] entries need a string id and title\", \"describe each follow-up as a new item\");\n if (handoff.role !== item.role)\n fail(\n \"handoff-invalid\",\n `handoff role \"${handoff.role}\" differs from the dispatched role \"${item.role}\"`,\n `complete as \"${item.role}\" or re-dispatch`,\n { items: [item.id] },\n );\n if (!acc.model || acc.model.trim() === \"\")\n fail(\n \"accounting-invalid\",\n `accounting for \"${item.id}\" has no model`,\n \"record the model id that actually ran the work\",\n { items: [item.id] },\n );\n for (const k of [\"tokensIn\", \"tokensOut\", \"durationMs\"] as const) {\n if (!Number.isFinite(acc[k]) || acc[k] < 0)\n fail(\n \"accounting-invalid\",\n `accounting.${k} must be a non-negative number`,\n `measure ${k} from the host's usage report`,\n { items: [item.id] },\n );\n }\n}\n\n/** Stage the item was pulled from: the `from.stage` of its last transition into in_progress, else its current stage. */\nfunction pulledFromStage(item: WorkItem): string {\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.from.stage;\n }\n return item.stage;\n}\n\n/** Stage a reworked item returns to: the from.stage of the last dispatch made from a stage strictly before the current one (so a reviewer's rework lands where the work was pulled from), else the plain pulled-from stage. */\nfunction reworkStage(state: WorkflowState, item: WorkItem): string {\n return lastDispatchBefore(state, item)?.from.stage ?? pulledFromStage(item);\n}\n\nexport function complete(\n state: WorkflowState,\n methodology: Methodology,\n handoff: Handoff,\n acc: Accounting,\n now?: string,\n): ApplyResult {\n validate(state, handoff, acc);\n const at = nowOf(now);\n const id = handoff.item;\n const role = handoff.role;\n let s: WorkflowState = { ...state, accounting: [...state.accounting, acc] };\n for (const p of handoff.produced)\n s = addEvidence(s, id, { kind: p.kind, ref: p.ref, by: role }, at);\n const it = openIteration(s);\n if (it && (it.committed.includes(id) || getItem(s, id).iteration === it.id)) {\n s = {\n ...s,\n iterations: s.iterations.map((x) =>\n x.id === it.id ? { ...x, spent: addSpent(x.spent, acc) } : x,\n ),\n };\n }\n\n for (const l of handoff.lessons ?? []) {\n const lid = `L${s.lessons.length + 1}`;\n s = {\n ...s,\n lessons: [\n ...s.lessons,\n { id: lid, at, text: l.text, scope: l.scope, status: \"raised\", from: role, item: id },\n ],\n };\n s = appendEvent(\n s,\n \"lesson.raised\",\n role,\n { id: lid, from: role, item: id, scope: l.scope },\n at,\n );\n }\n\n const followUps: string[] = [];\n for (const n of handoff.follow_ups ?? []) {\n const first = s.stages[0]!;\n const { iteration: _drop, ...rest } = n;\n s = addItem(\n s,\n { ...rest, stage: first.id, parent: id, tags: [...(n.tags ?? []), \"follow-up\"] },\n role,\n at,\n );\n followUps.push(n.id);\n }\n\n const verdict = handoff.verdict ?? \"done\";\n if (verdict === \"rework\") {\n if (!handoff.notes || handoff.notes.trim() === \"\")\n fail(\n \"handoff-invalid\",\n `rework on \"${id}\" needs notes`,\n \"say what must change in handoff.notes\",\n { items: [id] },\n );\n const item = getItem(s, id);\n s = clearRole(moveItem(s, id, { stage: reworkStage(s, item), status: \"todo\" }, role, at), id);\n s = appendEvent(s, \"item.rework\", role, { id, by: role, notes: handoff.notes }, at);\n } else if (\n (verdict === \"done\" || verdict === \"needs-review\") &&\n getItem(s, id).type === \"question\"\n ) {\n // a question is answered, not delivered: it skips exit policies and gates\n const lastStageId = s.stages[s.stages.length - 1]!.id;\n s = moveItem(s, id, { stage: lastStageId, status: \"done\" }, role, at);\n } else if (verdict === \"done\" || verdict === \"needs-review\") {\n const item = getItem(s, id);\n const stage = stageOf(s, item.stage);\n assertPolicies(s, item, stage.exitPolicy, `leave \"${stage.id}\"`);\n if (stage.gate) {\n const res = checkGate(s, item, stage.gate, role);\n if (res.outcome === \"fail\")\n fail(\n \"gate-unmet\",\n `gate \"${stage.gate.id}\" blocks \"${id}\": ${res.violations.map((v) => v.message).join(\"; \")}`,\n res.violations.map((v) => v.fix).join(\"; \"),\n { items: [id], rule: res.violations[0]!.rule },\n );\n if (res.outcome === \"human\") {\n s = raisePending(\n s,\n {\n kind: \"gate\",\n item: id,\n gate: stage.gate.id,\n question: `Approve gate \"${stage.gate.id}\" for \"${item.title}\" (${id})?`,\n },\n at,\n );\n } else {\n s = appendEvent(\n advanceItem(s, id, role, verdict === \"needs-review\", at),\n \"gate.passed\",\n role,\n { item: id, gate: stage.gate.id },\n at,\n );\n }\n } else {\n s = advanceItem(s, id, role, verdict === \"needs-review\", at);\n }\n } else if (verdict === \"blocked\") {\n s = raiseBlocker(s, id, handoff.notes || \"blocked by worker\", role, role, at);\n } else if (verdict === \"escalate\") {\n const thinker = rolesWith(s, \"escalate\")[0];\n if (!thinker)\n fail(\n \"missing-capability\",\n `no role has capability \"escalate\" to receive the question from \"${id}\"`,\n \"register a role with capability escalate\",\n { items: [id] },\n );\n const n = Object.keys(s.items).filter((k) => k.startsWith(`${id}-q`)).length + 1;\n const qid = `${id}-q${n}`;\n const parent = getItem(s, id);\n const pulledFrom = pulledFromStage(parent);\n const q: NewItem = {\n id: qid,\n type: \"question\",\n title: handoff.open_questions.join(\" | \") || handoff.notes || `question from ${id}`,\n parent: id,\n role: thinker.id,\n priority: Number.MAX_SAFE_INTEGER,\n stage: pulledFrom,\n };\n if (parent.iteration !== undefined) q.iteration = parent.iteration;\n s = addItem(s, q, role, at);\n s = moveItem(s, id, { stage: pulledFrom, status: \"todo\" }, role, at);\n s = patchItem(s, id, (x) => ({ ...x, dependsOn: [...x.dependsOn, qid] }));\n s = appendEvent(s, \"item.escalated\", role, { id, question: qid, to: thinker.id }, at);\n }\n\n s = appendEvent(\n s,\n \"item.completed\",\n role,\n {\n id,\n role,\n verdict,\n produced: handoff.produced,\n notes: handoff.notes,\n do_not: handoff.do_not,\n open_questions: handoff.open_questions,\n followUps,\n tokens: acc.tokensIn + acc.tokensOut,\n durationMs: acc.durationMs,\n model: acc.model,\n },\n at,\n );\n if (methodology.afterComplete) s = methodology.afterComplete(s, id, at);\n return { state: s, warnings: [] };\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunk5XAKW64K_cjs=require('./chunk-5XAKW64K.cjs'),chunkS3BXVHO7_cjs=require('./chunk-S3BXVHO7.cjs');function D(i,a){let t=[];for(let o of i.events)o.type==="item.completed"&&o.payload.id===a&&t.push({...o.payload,at:o.at});return t}function z(i,a){let t=D(i,a);return t[t.length-1]}function J(i,a,t){t.role||chunkS3BXVHO7_cjs.b("unknown-role",`item "${t.id}" has no role assigned`,"dispatch it with next() or set item.role",{items:[t.id]});let o=chunk5XAKW64K_cjs.e(i,t.role);o||chunkS3BXVHO7_cjs.b("unknown-role",`role "${t.role}" does not exist`,`registered roles: ${Object.keys(i.roles).join(", ")}`);let u=[],d=[...o.do_not],s=[...t.dependsOn,...t.type==="bug"||t.type==="change-request"?t.affects??[]:[]];for(let n of s){let c=z(i,n);if(c){u.push({item:n,produced:c.produced,notes:c.notes});for(let m of c.do_not)d.includes(m)||d.push(m);}}let l=D(i,t.id).map(n=>({role:n.role,verdict:n.verdict,notes:n.notes,produced:n.produced,at:n.at})),e=new Set([t.id,...t.dependsOn]),g=Object.values(i.items).filter(n=>(n.type==="bug"||n.type==="change-request")&&n.id!==t.id&&n.status!=="done"&&n.status!=="dropped"&&(n.affects??[]).some(c=>e.has(c))).map(n=>({id:n.id,title:n.title,affects:n.affects??[]})),k=chunk5XAKW64K_cjs.N(i),f=chunk5XAKW64K_cjs.n(i,t.stage).gate,r={item:t,role:o,modelTier:o.modelTier,invariants:[...a.invariants(i,t),...i.agreements],do_not:d,acceptance:t.acceptance,upstream:u,priorHandoffs:l,relatedBugs:g,budgetRemaining:k?chunk5XAKW64K_cjs.K(k.budget,k.spent):{}};return f&&(r.gateAhead=f),r}function oe(i,a,t={}){let o=chunk5XAKW64K_cjs.R(i,a,t),u=o.dispatched.map(d=>J(o.state,a,o.state.items[d.id]));return o.reason?{state:o.state,briefs:u,reason:o.reason}:{state:o.state,briefs:u}}var G=["done","needs-review","rework","blocked","escalate"],L=["policy","skill","memory","spec","review"],I=i=>typeof i=="object"&&i!==null&&!Array.isArray(i),v=i=>typeof i=="string";function X(i,a,t){let o=chunk5XAKW64K_cjs.s(i,a.item);o.status!=="in_progress"&&chunkS3BXVHO7_cjs.b("invalid-transition",`item "${o.id}" is ${o.status}, not in_progress`,"only dispatched items can be completed; call next() first",{items:[o.id]}),Array.isArray(a.do_not)||chunkS3BXVHO7_cjs.b("handoff-invalid",`handoff for "${o.id}" has no do_not array`,"set handoff.do_not to [] when there is nothing to forbid",{items:[o.id]}),(!Array.isArray(a.produced)||!Array.isArray(a.open_questions))&&chunkS3BXVHO7_cjs.b("handoff-invalid",`handoff for "${o.id}" needs produced[] and open_questions[]`,"pass empty arrays when there is nothing",{items:[o.id]});let u=(e,g)=>chunkS3BXVHO7_cjs.b("handoff-invalid",`handoff for "${o.id}": ${e}`,g,{items:[o.id]}),d=a.verdict??"done";G.includes(d)||u(`unknown verdict ${JSON.stringify(d)}`,`use one of: ${G.join(", ")}`),a.produced.every(e=>I(e)&&v(e.kind)&&v(e.ref))||u("produced[] entries need string kind and ref",'use { "kind": "code", "ref": "src/a.ts" }');let s=a.lessons??[];(!Array.isArray(s)||!s.every(e=>I(e)&&v(e.text)&&L.includes(e.scope)))&&u("lessons[] entries need a text and a scope",`scope is one of: ${L.join(", ")}`);let l=a.follow_ups??[];(!Array.isArray(l)||!l.every(e=>I(e)&&v(e.id)&&v(e.title)))&&u("follow_ups[] entries need a string id and title","describe each follow-up as a new item"),a.role!==o.role&&chunkS3BXVHO7_cjs.b("handoff-invalid",`handoff role "${a.role}" differs from the dispatched role "${o.role}"`,`complete as "${o.role}" or re-dispatch`,{items:[o.id]}),(!t.model||t.model.trim()==="")&&chunkS3BXVHO7_cjs.b("accounting-invalid",`accounting for "${o.id}" has no model`,"record the model id that actually ran the work",{items:[o.id]});for(let e of ["tokensIn","tokensOut","durationMs"])(!Number.isFinite(t[e])||t[e]<0)&&chunkS3BXVHO7_cjs.b("accounting-invalid",`accounting.${e} must be a non-negative number`,`measure ${e} from the host's usage report`,{items:[o.id]});}function U(i){for(let a=i.transitions.length-1;a>=0;a--){let t=i.transitions[a];if(t.to.status==="in_progress")return t.from.stage}return i.stage}function K(i,a){return chunk5XAKW64K_cjs.D(i,a)?.from.stage??U(a)}function fe(i,a,t,o,u){X(i,t,o);let d=chunk5XAKW64K_cjs.a(u),s=t.item,l=t.role,e={...i,accounting:[...i.accounting,o]};for(let r of t.produced)e=chunk5XAKW64K_cjs.w(e,s,{kind:r.kind,ref:r.ref,by:l},d);let g=chunk5XAKW64K_cjs.N(e);g&&(g.committed.includes(s)||chunk5XAKW64K_cjs.s(e,s).iteration===g.id)&&(e={...e,iterations:e.iterations.map(r=>r.id===g.id?{...r,spent:chunk5XAKW64K_cjs.J(r.spent,o)}:r)});for(let r of t.lessons??[]){let n=`L${e.lessons.length+1}`;e={...e,lessons:[...e.lessons,{id:n,at:d,text:r.text,scope:r.scope,status:"raised",from:l,item:s}]},e=chunk5XAKW64K_cjs.c(e,"lesson.raised",l,{id:n,from:l,item:s,scope:r.scope},d);}let k=[];for(let r of t.follow_ups??[]){let n=e.stages[0],{iteration:c,...m}=r;e=chunk5XAKW64K_cjs.t(e,{...m,stage:n.id,parent:s,tags:[...r.tags??[],"follow-up"]},l,d),k.push(r.id);}let f=t.verdict??"done";if(f==="rework"){(!t.notes||t.notes.trim()==="")&&chunkS3BXVHO7_cjs.b("handoff-invalid",`rework on "${s}" needs notes`,"say what must change in handoff.notes",{items:[s]});let r=chunk5XAKW64K_cjs.s(e,s);e=chunk5XAKW64K_cjs.z(chunk5XAKW64K_cjs.v(e,s,{stage:K(e,r),status:"todo"},l,d),s),e=chunk5XAKW64K_cjs.c(e,"item.rework",l,{id:s,by:l,notes:t.notes},d);}else if((f==="done"||f==="needs-review")&&chunk5XAKW64K_cjs.s(e,s).type==="question"){let r=e.stages[e.stages.length-1].id;e=chunk5XAKW64K_cjs.v(e,s,{stage:r,status:"done"},l,d);}else if(f==="done"||f==="needs-review"){let r=chunk5XAKW64K_cjs.s(e,s),n=chunk5XAKW64K_cjs.n(e,r.stage);if(chunk5XAKW64K_cjs.C(e,r,n.exitPolicy,`leave "${n.id}"`),n.gate){let c=chunk5XAKW64K_cjs.F(e,r,n.gate,l);c.outcome==="fail"&&chunkS3BXVHO7_cjs.b("gate-unmet",`gate "${n.gate.id}" blocks "${s}": ${c.violations.map(m=>m.message).join("; ")}`,c.violations.map(m=>m.fix).join("; "),{items:[s],rule:c.violations[0].rule}),c.outcome==="human"?e=chunk5XAKW64K_cjs.G(e,{kind:"gate",item:s,gate:n.gate.id,question:`Approve gate "${n.gate.id}" for "${r.title}" (${s})?`},d):e=chunk5XAKW64K_cjs.c(chunk5XAKW64K_cjs.A(e,s,l,f==="needs-review",d),"gate.passed",l,{item:s,gate:n.gate.id},d);}else e=chunk5XAKW64K_cjs.A(e,s,l,f==="needs-review",d);}else if(f==="blocked")e=chunk5XAKW64K_cjs.x(e,s,t.notes||"blocked by worker",l,l,d);else if(f==="escalate"){let r=chunk5XAKW64K_cjs.i(e,"escalate")[0];r||chunkS3BXVHO7_cjs.b("missing-capability",`no role has capability "escalate" to receive the question from "${s}"`,"register a role with capability escalate",{items:[s]});let n=Object.keys(e.items).filter(h=>h.startsWith(`${s}-q`)).length+1,c=`${s}-q${n}`,m=chunk5XAKW64K_cjs.s(e,s),O=U(m),W={id:c,type:"question",title:t.open_questions.join(" | ")||t.notes||`question from ${s}`,parent:s,role:r.id,priority:Number.MAX_SAFE_INTEGER,stage:O};m.iteration!==void 0&&(W.iteration=m.iteration),e=chunk5XAKW64K_cjs.t(e,W,l,d),e=chunk5XAKW64K_cjs.v(e,s,{stage:O,status:"todo"},l,d),e=chunk5XAKW64K_cjs.q(e,s,h=>({...h,dependsOn:[...h.dependsOn,c]})),e=chunk5XAKW64K_cjs.c(e,"item.escalated",l,{id:s,question:c,to:r.id},d);}return e=chunk5XAKW64K_cjs.c(e,"item.completed",l,{id:s,role:l,verdict:f,produced:t.produced,notes:t.notes,do_not:t.do_not,open_questions:t.open_questions,followUps:k,tokens:o.tokensIn+o.tokensOut,durationMs:o.durationMs,model:o.model},d),a.afterComplete&&(e=a.afterComplete(e,s,d)),{state:e,warnings:[]}}exports.a=J;exports.b=oe;exports.c=fe;//# sourceMappingURL=chunk-CPGDAHAU.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-CPGDAHAU.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/brief.ts","../src/complete.ts"],"names":["completions","state","itemId","out","ev","lastCompletion","all","synthesizeBrief","methodology","item","fail","role","roleOf","upstream","doNot","sources","dep","p","d","priorHandoffs","touched","relatedBugs","b","a","it","openIteration","gate","stageOf","brief","remaining","next","opts","res","plan","briefs","VERDICTS","LESSON_SCOPES","isObj","x","str","validate","handoff","acc","getItem","bad","what","fix","verdict","lessons","l","followUps","f","k","pulledFromStage","i","reworkStage","lastDispatchBefore","complete","now","at","nowOf","id","s","addEvidence","addSpent","lid","appendEvent","n","first","_drop","rest","addItem","clearRole","moveItem","lastStageId","stage","assertPolicies","checkGate","v","raisePending","advanceItem","raiseBlocker","thinker","rolesWith","qid","parent","pulledFrom","q","patchItem"],"mappings":"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","file":"chunk-CPGDAHAU.cjs","sourcesContent":["import { remaining } from \"./budget.ts\";\nimport { fail } from \"./errors.ts\";\nimport { stageOf } from \"./items.ts\";\nimport { openIteration, plan, type PlanOptions, type PlanReason } from \"./planner.ts\";\nimport { roleOf } from \"./roles.ts\";\nimport type { Brief, Handoff, Methodology, Verdict, WorkItem, WorkflowState } from \"./types.ts\";\n\ninterface CompletedPayload {\n id: string;\n role: string;\n verdict: Verdict;\n produced: Handoff[\"produced\"];\n notes: string;\n do_not: string[];\n}\n\nfunction completions(\n state: WorkflowState,\n itemId: string,\n): Array<CompletedPayload & { at: string }> {\n const out: Array<CompletedPayload & { at: string }> = [];\n for (const ev of state.events) {\n if (ev.type === \"item.completed\" && (ev.payload as CompletedPayload).id === itemId)\n out.push({ ...(ev.payload as CompletedPayload), at: ev.at });\n }\n return out;\n}\n\nfunction lastCompletion(state: WorkflowState, itemId: string): CompletedPayload | undefined {\n const all = completions(state, itemId);\n return all[all.length - 1];\n}\n\nexport function synthesizeBrief(\n state: WorkflowState,\n methodology: Methodology,\n item: WorkItem,\n): Brief {\n if (!item.role)\n fail(\n \"unknown-role\",\n `item \"${item.id}\" has no role assigned`,\n \"dispatch it with next() or set item.role\",\n { items: [item.id] },\n );\n const role = roleOf(state, item.role);\n if (!role)\n fail(\n \"unknown-role\",\n `role \"${item.role}\" does not exist`,\n `registered roles: ${Object.keys(state.roles).join(\", \")}`,\n );\n const upstream: Brief[\"upstream\"] = [];\n const doNot = [...role.do_not];\n const sources = [\n ...item.dependsOn,\n ...(item.type === \"bug\" || item.type === \"change-request\" ? (item.affects ?? []) : []),\n ];\n for (const dep of sources) {\n const p = lastCompletion(state, dep);\n if (!p) continue;\n upstream.push({ item: dep, produced: p.produced, notes: p.notes });\n for (const d of p.do_not) if (!doNot.includes(d)) doNot.push(d);\n }\n const priorHandoffs: Brief[\"priorHandoffs\"] = completions(state, item.id).map((p) => ({\n role: p.role,\n verdict: p.verdict,\n notes: p.notes,\n produced: p.produced,\n at: p.at,\n }));\n const touched = new Set([item.id, ...item.dependsOn]);\n const relatedBugs: Brief[\"relatedBugs\"] = Object.values(state.items)\n .filter(\n (b) =>\n (b.type === \"bug\" || b.type === \"change-request\") &&\n b.id !== item.id &&\n b.status !== \"done\" &&\n b.status !== \"dropped\" &&\n (b.affects ?? []).some((a) => touched.has(a)),\n )\n .map((b) => ({ id: b.id, title: b.title, affects: b.affects ?? [] }));\n const it = openIteration(state);\n const gate = stageOf(state, item.stage).gate;\n const brief: Brief = {\n item,\n role,\n modelTier: role.modelTier,\n invariants: [...methodology.invariants(state, item), ...state.agreements],\n do_not: doNot,\n acceptance: item.acceptance,\n upstream,\n priorHandoffs,\n relatedBugs,\n budgetRemaining: it ? remaining(it.budget, it.spent) : {},\n };\n if (gate) brief.gateAhead = gate;\n return brief;\n}\n\nexport interface NextResult {\n state: WorkflowState;\n briefs: Brief[];\n reason?: PlanReason;\n}\n\nexport function next(\n state: WorkflowState,\n methodology: Methodology,\n opts: PlanOptions = {},\n): NextResult {\n const res = plan(state, methodology, opts);\n const briefs = res.dispatched.map((d) =>\n synthesizeBrief(res.state, methodology, res.state.items[d.id]!),\n );\n return res.reason\n ? { state: res.state, briefs, reason: res.reason }\n : { state: res.state, briefs };\n}\n","import { addSpent } from \"./budget.ts\";\nimport { fail } from \"./errors.ts\";\nimport { checkGate, lastDispatchBefore, raisePending } from \"./gates.ts\";\nimport {\n addEvidence,\n addItem,\n advanceItem,\n clearRole,\n getItem,\n moveItem,\n patchItem,\n raiseBlocker,\n stageOf,\n} from \"./items.ts\";\nimport { assertPolicies } from \"./policies.ts\";\nimport { openIteration } from \"./planner.ts\";\nimport { rolesWith } from \"./roles.ts\";\nimport { appendEvent, nowOf } from \"./state.ts\";\nimport type {\n Accounting,\n ApplyResult,\n Handoff,\n Methodology,\n NewItem,\n WorkItem,\n WorkflowState,\n} from \"./types.ts\";\n\nconst VERDICTS: readonly string[] = [\"done\", \"needs-review\", \"rework\", \"blocked\", \"escalate\"];\nconst LESSON_SCOPES: readonly string[] = [\"policy\", \"skill\", \"memory\", \"spec\", \"review\"];\n\nconst isObj = (x: unknown): x is Record<string, unknown> =>\n typeof x === \"object\" && x !== null && !Array.isArray(x);\nconst str = (x: unknown) => typeof x === \"string\";\n\nfunction validate(state: WorkflowState, handoff: Handoff, acc: Accounting): void {\n const item = getItem(state, handoff.item);\n if (item.status !== \"in_progress\")\n fail(\n \"invalid-transition\",\n `item \"${item.id}\" is ${item.status}, not in_progress`,\n \"only dispatched items can be completed; call next() first\",\n { items: [item.id] },\n );\n if (!Array.isArray(handoff.do_not))\n fail(\n \"handoff-invalid\",\n `handoff for \"${item.id}\" has no do_not array`,\n \"set handoff.do_not to [] when there is nothing to forbid\",\n { items: [item.id] },\n );\n if (!Array.isArray(handoff.produced) || !Array.isArray(handoff.open_questions))\n fail(\n \"handoff-invalid\",\n `handoff for \"${item.id}\" needs produced[] and open_questions[]`,\n \"pass empty arrays when there is nothing\",\n { items: [item.id] },\n );\n const bad = (what: string, fix: string) =>\n fail(\"handoff-invalid\", `handoff for \"${item.id}\": ${what}`, fix, { items: [item.id] });\n const verdict = handoff.verdict ?? \"done\";\n if (!VERDICTS.includes(verdict))\n bad(`unknown verdict ${JSON.stringify(verdict)}`, `use one of: ${VERDICTS.join(\", \")}`);\n if (!handoff.produced.every((p) => isObj(p) && str(p.kind) && str(p.ref)))\n bad(\"produced[] entries need string kind and ref\", 'use { \"kind\": \"code\", \"ref\": \"src/a.ts\" }');\n const lessons: unknown = handoff.lessons ?? [];\n if (\n !Array.isArray(lessons) ||\n !lessons.every((l) => isObj(l) && str(l.text) && LESSON_SCOPES.includes(l.scope as string))\n )\n bad(\n \"lessons[] entries need a text and a scope\",\n `scope is one of: ${LESSON_SCOPES.join(\", \")}`,\n );\n const followUps: unknown = handoff.follow_ups ?? [];\n if (!Array.isArray(followUps) || !followUps.every((f) => isObj(f) && str(f.id) && str(f.title)))\n bad(\"follow_ups[] entries need a string id and title\", \"describe each follow-up as a new item\");\n if (handoff.role !== item.role)\n fail(\n \"handoff-invalid\",\n `handoff role \"${handoff.role}\" differs from the dispatched role \"${item.role}\"`,\n `complete as \"${item.role}\" or re-dispatch`,\n { items: [item.id] },\n );\n if (!acc.model || acc.model.trim() === \"\")\n fail(\n \"accounting-invalid\",\n `accounting for \"${item.id}\" has no model`,\n \"record the model id that actually ran the work\",\n { items: [item.id] },\n );\n for (const k of [\"tokensIn\", \"tokensOut\", \"durationMs\"] as const) {\n if (!Number.isFinite(acc[k]) || acc[k] < 0)\n fail(\n \"accounting-invalid\",\n `accounting.${k} must be a non-negative number`,\n `measure ${k} from the host's usage report`,\n { items: [item.id] },\n );\n }\n}\n\n/** Stage the item was pulled from: the `from.stage` of its last transition into in_progress, else its current stage. */\nfunction pulledFromStage(item: WorkItem): string {\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.from.stage;\n }\n return item.stage;\n}\n\n/** Stage a reworked item returns to: the from.stage of the last dispatch made from a stage strictly before the current one (so a reviewer's rework lands where the work was pulled from), else the plain pulled-from stage. */\nfunction reworkStage(state: WorkflowState, item: WorkItem): string {\n return lastDispatchBefore(state, item)?.from.stage ?? pulledFromStage(item);\n}\n\nexport function complete(\n state: WorkflowState,\n methodology: Methodology,\n handoff: Handoff,\n acc: Accounting,\n now?: string,\n): ApplyResult {\n validate(state, handoff, acc);\n const at = nowOf(now);\n const id = handoff.item;\n const role = handoff.role;\n let s: WorkflowState = { ...state, accounting: [...state.accounting, acc] };\n for (const p of handoff.produced)\n s = addEvidence(s, id, { kind: p.kind, ref: p.ref, by: role }, at);\n const it = openIteration(s);\n if (it && (it.committed.includes(id) || getItem(s, id).iteration === it.id)) {\n s = {\n ...s,\n iterations: s.iterations.map((x) =>\n x.id === it.id ? { ...x, spent: addSpent(x.spent, acc) } : x,\n ),\n };\n }\n\n for (const l of handoff.lessons ?? []) {\n const lid = `L${s.lessons.length + 1}`;\n s = {\n ...s,\n lessons: [\n ...s.lessons,\n { id: lid, at, text: l.text, scope: l.scope, status: \"raised\", from: role, item: id },\n ],\n };\n s = appendEvent(\n s,\n \"lesson.raised\",\n role,\n { id: lid, from: role, item: id, scope: l.scope },\n at,\n );\n }\n\n const followUps: string[] = [];\n for (const n of handoff.follow_ups ?? []) {\n const first = s.stages[0]!;\n const { iteration: _drop, ...rest } = n;\n s = addItem(\n s,\n { ...rest, stage: first.id, parent: id, tags: [...(n.tags ?? []), \"follow-up\"] },\n role,\n at,\n );\n followUps.push(n.id);\n }\n\n const verdict = handoff.verdict ?? \"done\";\n if (verdict === \"rework\") {\n if (!handoff.notes || handoff.notes.trim() === \"\")\n fail(\n \"handoff-invalid\",\n `rework on \"${id}\" needs notes`,\n \"say what must change in handoff.notes\",\n { items: [id] },\n );\n const item = getItem(s, id);\n s = clearRole(moveItem(s, id, { stage: reworkStage(s, item), status: \"todo\" }, role, at), id);\n s = appendEvent(s, \"item.rework\", role, { id, by: role, notes: handoff.notes }, at);\n } else if (\n (verdict === \"done\" || verdict === \"needs-review\") &&\n getItem(s, id).type === \"question\"\n ) {\n // a question is answered, not delivered: it skips exit policies and gates\n const lastStageId = s.stages[s.stages.length - 1]!.id;\n s = moveItem(s, id, { stage: lastStageId, status: \"done\" }, role, at);\n } else if (verdict === \"done\" || verdict === \"needs-review\") {\n const item = getItem(s, id);\n const stage = stageOf(s, item.stage);\n assertPolicies(s, item, stage.exitPolicy, `leave \"${stage.id}\"`);\n if (stage.gate) {\n const res = checkGate(s, item, stage.gate, role);\n if (res.outcome === \"fail\")\n fail(\n \"gate-unmet\",\n `gate \"${stage.gate.id}\" blocks \"${id}\": ${res.violations.map((v) => v.message).join(\"; \")}`,\n res.violations.map((v) => v.fix).join(\"; \"),\n { items: [id], rule: res.violations[0]!.rule },\n );\n if (res.outcome === \"human\") {\n s = raisePending(\n s,\n {\n kind: \"gate\",\n item: id,\n gate: stage.gate.id,\n question: `Approve gate \"${stage.gate.id}\" for \"${item.title}\" (${id})?`,\n },\n at,\n );\n } else {\n s = appendEvent(\n advanceItem(s, id, role, verdict === \"needs-review\", at),\n \"gate.passed\",\n role,\n { item: id, gate: stage.gate.id },\n at,\n );\n }\n } else {\n s = advanceItem(s, id, role, verdict === \"needs-review\", at);\n }\n } else if (verdict === \"blocked\") {\n s = raiseBlocker(s, id, handoff.notes || \"blocked by worker\", role, role, at);\n } else if (verdict === \"escalate\") {\n const thinker = rolesWith(s, \"escalate\")[0];\n if (!thinker)\n fail(\n \"missing-capability\",\n `no role has capability \"escalate\" to receive the question from \"${id}\"`,\n \"register a role with capability escalate\",\n { items: [id] },\n );\n const n = Object.keys(s.items).filter((k) => k.startsWith(`${id}-q`)).length + 1;\n const qid = `${id}-q${n}`;\n const parent = getItem(s, id);\n const pulledFrom = pulledFromStage(parent);\n const q: NewItem = {\n id: qid,\n type: \"question\",\n title: handoff.open_questions.join(\" | \") || handoff.notes || `question from ${id}`,\n parent: id,\n role: thinker.id,\n priority: Number.MAX_SAFE_INTEGER,\n stage: pulledFrom,\n };\n if (parent.iteration !== undefined) q.iteration = parent.iteration;\n s = addItem(s, q, role, at);\n s = moveItem(s, id, { stage: pulledFrom, status: \"todo\" }, role, at);\n s = patchItem(s, id, (x) => ({ ...x, dependsOn: [...x.dependsOn, qid] }));\n s = appendEvent(s, \"item.escalated\", role, { id, question: qid, to: thinker.id }, at);\n }\n\n s = appendEvent(\n s,\n \"item.completed\",\n role,\n {\n id,\n role,\n verdict,\n produced: handoff.produced,\n notes: handoff.notes,\n do_not: handoff.do_not,\n open_questions: handoff.open_questions,\n followUps,\n tokens: acc.tokensIn + acc.tokensOut,\n durationMs: acc.durationMs,\n model: acc.model,\n },\n at,\n );\n if (methodology.afterComplete) s = methodology.afterComplete(s, id, at);\n return { state: s, warnings: [] };\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {b as b$1,c}from'./chunk-2FRRD6A3.mjs';import {ExFlow,ExFlowRuntimeError}from'ex-flow';function v(t){return t??new Date().toISOString()}function F(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 o={};for(let i of t.roles)c(i.id,"role id"),Object.hasOwn(o,i.id)&&b$1("duplicate-role",`duplicate role id "${i.id}"`,"give every role a unique id"),o[i.id]=i;let n=v(t.now);return {version:1,methodology:t.methodology,config:t.config,items:{},stages:t.stages,roles:o,iterations:[],events:[{seq:1,at:n,type:"state.created",by:"system",payload:{methodology:t.methodology}}],accounting:[],pending:[],lessons:[],agreements:[]}}function k(t,e,o,n,i){let r={seq:(t.events[t.events.length-1]?.seq??0)+1,at:v(i),type:e,by:o,payload:n};return {...t,events:[...t.events,r]}}function ge(t,e){for(let o=t.events.length-1;o>=0;o--){let n=t.events[o];if(e===void 0||n.type===e)return n}}function q(t,e){return Object.hasOwn(t.roles,e)?t.roles[e]:void 0}var ee=new Set(["in_progress","review","blocked"]);function we(t,e,o,n){c(e.id,"role id"),q(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 k(i,"role.registered",o,{role:e.id,capabilities:e.capabilities},n)}function ye(t,e,o,n){q(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(r=>r.role===e&&ee.has(r.status)).map(r=>r.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 s={...t.roles};return delete s[e],k({...t,roles:s},"role.retired",o,{role:e},n)}function H(t,e){return t.capabilities.includes(e)}function j(t,e){return Object.values(t.roles).filter(o=>H(o,e))}function b(t,e,o,n){return Object.values(t.roles).filter(i=>i.id!==n&&i.canApprove.includes(e)&&(o===void 0||i.capabilities.includes(o))).map(i=>i.id)}function ve(t,e){return j(t,"approve-gate").filter(o=>o.canApprove.includes(e))}function G(t,e,o){for(let n of e)j(t,n).length===0&&b$1("missing-capability",`no registered role has capability "${n}"`,`register a role whose capabilities include "${n}" (registerRole) before init`);for(let n of o){let i=j(t,n);i.length>1&&b$1("exclusive-capability",`capability "${n}" must belong to exactly one role but is held by ${i.map(s=>s.id).join(", ")}`,`remove "${n}" from all but one role`);}}function L(t,e){return e.length===0?[]:Object.values(t.roles).filter(o=>e.every(n=>H(o,n)))}function M(t,e){let o=t.stages.find(n=>n.id===e);return o||b$1("unknown-stage",`stage "${e}" does not exist`,`stages are: ${t.stages.map(n=>n.id).join(" \u2192 ")}`),o}function te(t,e){let o=t.stages.findIndex(n=>n.id===e);return o<0&&M(t,e),t.stages[o+1]}function oe(t,e){return t.stages[t.stages.length-1]?.id===e}function I(t,e){return {...t,items:{...t.items,[e.id]:e}}}function ne(t,e,o){return I(t,o(W(t,e)))}function ie(t,e,o){return ne(t,e,n=>{let i={...n};for(let s of o)delete i[s];return i})}function W(t,e){let o=Object.hasOwn(t.items,e)?t.items[e]:void 0;return o||b$1("unknown-item",`item "${e}" does not exist`,`add it with addItem first; known items: ${Object.keys(t.items).join(", ")||"(none)"}`,{items:[e]}),o}function C(t,e,o){let n=e.filter(i=>!Object.hasOwn(t.items,i));n.length&&b$1("unknown-item",`${o} refers to unknown item(s) ${n.join(", ")}`,"add those items first or remove the reference",{items:n});}function $e(t,e,o,n){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 s=e.stage??i.id;M(t,s),C(t,e.dependsOn??[],`item "${e.id}".dependsOn`),e.affects&&C(t,e.affects,`item "${e.id}".affects`),e.parent!==void 0&&C(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:r,...a}=e,l={type:"task",acceptance:[],dependsOn:[],...a,id:e.id,title:e.title,stage:s,status:"todo",evidence:[],blockers:[],transitions:[]},f=I(t,l);return k(f,"item.added",o,{id:l.id,type:l.type,stage:l.stage,weight:l.weight??null,priority:l.priority??null},n)}function be(t,e,o,n,i){let s=W(t,e);o.dependsOn&&C(t,o.dependsOn,`item "${e}".dependsOn`),o.affects&&C(t,o.affects,`item "${e}".affects`),o.parent!==void 0&&C(t,[o.parent],`item "${e}".parent`),o.role!==void 0&&!Object.hasOwn(t.roles,o.role)&&b$1("unknown-role",`role "${o.role}" does not exist`,`registered roles: ${Object.keys(t.roles).join(", ")}`);let r=Object.keys(o).filter(f=>JSON.stringify(o[f])!==JSON.stringify(s[f]));r.length===0&&b$1("no-op",`editItem("${e}") changes nothing`,"pass at least one field with a different value",{items:[e]});let a={...s};for(let f of r)a[f]=o[f];let l=I(t,a);return k(l,"item.edited",n,{id:e,changed:r},i)}function $(t,e,o,n,i){let s=W(t,e),r=o.stage??s.stage;M(t,r),(s.status==="done"||s.status==="dropped")&&b$1("invalid-transition",`item "${e}" is ${s.status} and cannot move`,"create a new item (or a change-request) instead of reopening a finished one",{items:[e]}),r===s.stage&&o.status===s.status&&b$1("no-op",`item "${e}" is already ${s.status} in "${r}"`,"choose a different stage or status",{items:[e]});let a=v(i),l={...s,stage:r,status:o.status,transitions:[...s.transitions,{from:{stage:s.stage,status:s.status},to:{stage:r,status:o.status},at:a,by:n}]},f=I(t,l);return k(f,"item.transition",n,{id:e,from:{stage:s.stage,status:s.status},to:{stage:r,status:o.status}},a)}function Ie(t,e,o,n){let i=W(t,e),s=v(n),r={...i,evidence:[...i.evidence,{...o,at:s}]},a=I(t,r);return k(a,"item.evidence",o.by,{id:e,kind:o.kind,ref:o.ref},s)}function J(t,e,o,n,i,s){let r=W(t,e),a=v(s),l=`${e}-b${r.blockers.length+1}`,f={...r,status:"blocked",blockers:[...r.blockers,{id:l,reason:o,owner:n,raisedAt:a}],transitions:r.status==="blocked"?r.transitions:[...r.transitions,{from:{stage:r.stage,status:r.status},to:{stage:r.stage,status:"blocked"},at:a,by:i}]},u=I(t,f);return k(u,"blocker.raised",i,{id:e,blocker:l,reason:o,owner:n},a)}function K(t,e){for(let o=t.transitions.length-1;o>=0;o--){let n=t.transitions[o];if(n.to.status===e)return n}}function Oe(t,e,o,n,i){let s=W(t,e),r=s.blockers.findIndex(g=>g.id===o&&!g.clearedAt);r<0&&b$1("invalid-input",`item "${e}" has no open blocker "${o}"`,`open blockers: ${s.blockers.filter(g=>!g.clearedAt).map(g=>g.id).join(", ")||"(none)"}`,{items:[e]});let a=v(i),l=s.blockers.map((g,y)=>y===r?{...g,clearedAt:a}:g),f=l.some(g=>!g.clearedAt),u=K(s,"blocked")?.from.status??"todo",p=s.stage,h=u,x=false;u==="in_progress"?(h="todo",p=K(s,"in_progress")?.from.stage??s.stage):u==="awaiting_human"&&(h=M(t,s.stage).review?"review":"todo",x=true);let{role:D,...P}=s,A={...x&&!f?P:s,blockers:l,stage:f?s.stage:p,status:f?"blocked":h,transitions:f?s.transitions:[...s.transitions,{from:{stage:s.stage,status:"blocked"},to:{stage:p,status:h},at:a,by:n}]},_=I(t,A);return k(_,"blocker.cleared",n,{id:e,blocker:o},a)}function T(t,e){return ie(t,e,["role"])}function Z(t,e,o,n,i){let s=W(t,e),r=te(t,s.stage);if(!r)return $(t,e,{status:"done"},o,i);if(oe(t,r.id))return $(t,e,{stage:r.id,status:"done"},o,i);let a=n||r.review===true?"review":"todo";return T($(t,e,{stage:r.id,status:a},o,i),e)}function V(t,e,o){let n=[],i=(s,r,a)=>n.push({rule:s,severity:"error",item:e.id,message:r,fix:a});for(let s of o)switch(s.kind){case "evidence":e.evidence.some(r=>r.kind===s.evidenceKind)||i("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&&i("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&&i("policy:estimate-present",`item "${e.id}" has no weight`,"editItem with a weight (story points)");break;case "no-open-blockers":{let r=e.blockers.filter(a=>!a.clearedAt);r.length&&i("policy:no-open-blockers",`item "${e.id}" has ${r.length} open blocker(s)`,`clearBlocker ${r.map(a=>a.id).join(", ")}`);break}case "dependencies-done":{let r=e.dependsOn.filter(a=>t.items[a]?.status!=="done");r.length&&i("policy:dependencies-done",`item "${e.id}" depends on unfinished ${r.join(", ")}`,`finish ${r.join(", ")} first`);break}case "custom":e.evidence.some(r=>r.kind===`policy:${s.id}`)||i(`policy:custom:${s.id}`,`item "${e.id}" has not satisfied "${s.description}"`,`attach evidence { kind: "policy:${s.id}" } when it is satisfied`);break}return n}function Ce(t,e,o,n){let i=V(t,e,o);i.length&&b$1("policy-unmet",`item "${e.id}" cannot ${n}: ${i.length} polic${i.length===1?"y":"ies"} unmet`,i.map(s=>s.fix).join("; "),{items:[e.id]});}function re(t,e){let o=new Map(t.stages.map((i,s)=>[i.id,s])),n=o.get(e.stage);if(n!==void 0)for(let i=e.transitions.length-1;i>=0;i--){let s=e.transitions[i],r=o.get(s.from.stage);if(s.to.status==="in_progress"&&r!==void 0&&r<n)return s}}function N(t,e){let o=re(t,e);if(o)return o.by;for(let n=e.transitions.length-1;n>=0;n--){let i=e.transitions[n];if(i.to.status==="in_progress")return i.by}}function se(t,e,o,n){let i=[];for(let r of o.evidence)e.evidence.some(a=>a.kind===r)||i.push({rule:"gate:evidence",severity:"error",item:e.id,message:`gate "${o.id}" needs evidence "${r}" on item "${e.id}"`,fix:`attach evidence { kind: "${r}" } before approving`});if(i.length)return {outcome:"fail",violations:i};let s=false;for(let r of o.requires){if(r==="human"){n!=="human"&&(s=true);continue}if(!b(t,o.id,r.capability).includes(n)){i.push({rule:"gate:capability",severity:"error",item:e.id,message:`"${n}" may not approve gate "${o.id}" (needs capability "${r.capability}" and canApprove "${o.id}")`,fix:`approve as one of: ${b(t,o.id,r.capability).join(", ")||"(no role qualifies; register one)"}`});continue}let l=N(t,e);if(l!==void 0&&l===n){let f=b(t,o.id,r.capability,n);i.push({rule:"conflict-of-interest",severity:"error",item:e.id,message:`role "${n}" did the work on "${e.id}" and may not approve it`,fix:`approve as a different role: ${f.join(", ")||"(register another approver)"}`});}}return i.length?{outcome:"fail",violations:i}:s?{outcome:"human"}:{outcome:"pass"}}function Ne(t,e,o){let n=v(o),i=`p${t.events.filter(a=>a.type==="pending.raised").length+1}`,s={...e,id:i,raisedAt:n},r={...t,pending:[...t.pending,s]};return e.item&&W(r,e.item).status!=="awaiting_human"&&(r=$(r,e.item,{status:"awaiting_human"},"system",n)),k(r,"pending.raised","system",{id:i,kind:e.kind,item:e.item??null,gate:e.gate??null},n)}function Be(t,e,o,n,i,s){o!=="approve"&&o!=="reject"&&b$1("invalid-input",`decision must be "approve" or "reject" (got ${JSON.stringify(o)})`,"pass approve or reject");let r=t.pending.find(p=>p.id===e);r||b$1("unknown-pending",`no pending decision "${e}"`,`open decisions: ${t.pending.map(p=>p.id).join(", ")||"(none)"}`);let a=r.kind==="gate"&&r.item?W(t,r.item):void 0,l=a&&(t.stages.find(p=>r.gate!==void 0&&p.gate?.id===r.gate)?.gate??t.stages.find(p=>p.id===a.stage)?.gate);a&&l&&n!=="human"&&(l.requires.includes("human")?void 0:se(t,a,l,n))?.outcome!=="pass"&&b$1("gate-unmet",`"${n}" may not decide gate "${l.id}" on "${a.id}"`,`decide as one of: human${l.requires.flatMap(h=>h==="human"?[]:b(t,l.id,h.capability)).map(h=>`, ${h}`).join("")}`,{items:[a.id],rule:"gate"});let f=v(s),u={...t,pending:t.pending.filter(p=>p.id!==e)};if(u=k(u,"pending.decided",n,{id:e,decision:o,note:i,item:r.item??null,gate:r.gate??null},f),a){let p=a.id,h=r.gate??l?.id??null;if(o==="approve")u=Z(u,p,n,false,f),u=k(u,"gate.passed",n,{item:p,gate:h},f);else {let x=l?.onFail??{action:"block"};x.action==="return-to"?u=T($(u,p,{stage:x.stage,status:"todo"},n,f),p):u=J(u,p,`gate "${h??"?"}" rejected: ${i||"no reason given"}`,n,n,f),u=k(u,"gate.failed",n,{item:p,gate:h,note:i},f);}}return u}var _e={tokens:0,turns:0,wallclockMs:0};function Te(t,e){return {tokens:t.tokens+e.tokensIn+e.tokensOut,turns:t.turns+1,wallclockMs:t.wallclockMs+e.durationMs}}function z(t,e){let o={};return t.tokens!==void 0&&(o.tokens=Math.max(0,t.tokens-e.tokens)),t.turns!==void 0&&(o.turns=Math.max(0,t.turns-e.turns)),t.wallclockMs!==void 0&&(o.wallclockMs=Math.max(0,t.wallclockMs-e.wallclockMs)),o}function Ve(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 Q(t,e,o=2e4){let n=e??1,i=[];for(let a of t.accounting){let l=t.items[a.item]?.weight;l===void 0||l<=0||i.push((a.tokensIn+a.tokensOut)/l);}if(i.length===0)return o*n;i.sort((a,l)=>a-l);let s=Math.floor(i.length/2),r=i.length%2?i[s]:(i[s-1]+i[s])/2;return Math.round(r*n)}function de(t){return t.iterations.find(e=>e.endedAt===void 0)}function X(t,e){if(e.role){let n=q(t,e.role);return n||b$1("unknown-role",`item "${e.id}" is assigned to unknown role "${e.role}"`,"editItem with an existing role id"),n}if(e.status==="review"){let n=N(t,e),i=j(t,"review"),r=i.find(a=>a.id!==n)??(i.length===1?i[0]:void 0);return r||b$1("missing-capability",`no role has capability "review" for item "${e.id}"`,"register a role with capability review",{items:[e.id]}),r}let o=j(t,"deliver")[0];return o||b$1("missing-capability",`no role has capability "deliver" for item "${e.id}"`,"register a role with capability deliver",{items:[e.id]}),o}function U(t){let e={};for(let o of Object.values(t.roles))o.maxConcurrent!==void 0&&(e[o.resourceClass??o.id]=o.maxConcurrent);return e}function ce(t,e){let o=new Set(t.map(n=>n.id));return t.map(n=>{let i=X(e,n),s={id:n.id,data:{id:n.id},dependsOn:n.dependsOn.filter(r=>o.has(r)),resourceClass:i.resourceClass??i.id};return n.priority!==void 0&&(s.priority=n.priority),n.weight!==void 0&&(s.weight=n.weight),n.deadline!==void 0&&(s.deadline=Date.parse(n.deadline)),s})}function Ue(t,e,o={}){let n=v(o.now),i=e.candidates(t),s=i.filter(c=>c.dependsOn.every(m=>t.items[m]?.status==="done"||i.some(w=>w.id===m))),r=i.filter(c=>c.dependsOn.every(m=>t.items[m]?.status==="done"));if(s.length===0)return {state:t,dispatched:[],reason:"no-candidates"};let a=e.plannerOptions(t),l={schedulerMode:a.schedulerMode,resourceCaps:U(t)};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);let f,u;try{let c=new ExFlow(l);for(let w of ce(s,t))c.addEntity(w);let m=c.resolveExecutionDetails();f=(m.plan.batches[0]??[]).map(w=>w.id),u=m.metrics;}catch(c){throw c instanceof ExFlowRuntimeError&&b$1("planner-error",`ex-flow refused the graph: [${c.code}] ${c.message}`,"fix the item graph (cycles, duplicate ids) with editItem; see diagnostics in the message",{items:s.map(m=>m.id)}),c}let p=f.map(c=>t.items[c]).filter(c=>c.dependsOn.every(m=>t.items[m]?.status==="done")),h=Object.values(t.items).filter(c=>c.status==="in_progress"),x={};for(let c of h){let m=c.role?q(t,c.role):void 0,w=m?m.resourceClass??m.id:"?";x[w]=(x[w]??0)+1;}let D=U(t),P=de(t),A=P?z(P.budget,P.spent).tokens:void 0,_=Math.min(o.max??1/0,a.concurrencyCap??1/0),g=[],y,S=t;for(let c of p){if(g.length>=_){y="wip-full";break}let m=c.status==="todo"&&a.dispatchStage!==void 0?a.dispatchStage:c.stage,w=M(t,m);if(V(t,c,w.entryPolicy).length>0)continue;if(w.wipLimit!==void 0&&h.filter(O=>O.stage===w.id).length+g.filter(O=>O.stage===w.id).length>=w.wipLimit){y="wip-full";continue}let B=X(t,c),E=B.resourceClass??B.id;if(D[E]!==void 0&&(x[E]??0)>=D[E]){y="wip-full";continue}if(A!==void 0){let O=Q(t,c.weight,o.fallbackTokensPerWeight);if(O>A){y="budget-exhausted";continue}A-=O;}x[E]=(x[E]??0)+1,S=$(S,c.id,{stage:m,status:"in_progress"},B.id,n),S={...S,items:{...S.items,[c.id]:{...S.items[c.id],role:B.id}}},g.push(S.items[c.id]);}return y===void 0&&g.length<r.length&&(y="wip-full"),g.length===0&&y===void 0&&(y="no-candidates"),S=k(S,"planner.resolved","planner",{dispatched:g.map(c=>c.id),reason:y??null,metrics:u},n),y?{state:S,dispatched:g,reason:y}:{state:S,dispatched:g}}function Y(t){return [{id:"separation-lost",severity:"warning",check(n,i){return i.type!=="init"&&i.type!=="role.register"?[]:L(n,t.requiredCapabilities).map(s=>({rule:"separation-lost",severity:"warning",message:`role "${s.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(n,i){if(i.type!=="complete")return [];let s=i.payload?.handoff;if(!s)return [];let r=s.verdict??"done";if(r!=="done"&&r!=="needs-review")return [];let a=n.items[s.item];if(!a)return [];let l=n.stages.find(u=>u.id===a.stage)?.gate;if(!l||!l.requires.some(u=>u!=="human"))return [];if(N(n,a)!==s.role)return [];let f=b(n,l.id,void 0,s.role);return [{rule:"conflict-of-interest",severity:"error",item:a.id,message:`role "${s.role}" authored "${a.id}" and may not pass gate "${l.id}" on it`,fix:`hand the gate to another approver: ${f.join(", ")||"(register one)"}`}]}}]}function fe(t,e,o){let n=[];for(let i of [...Y(e),...e.rules])n.push(...i.check(t,o));return n}function ue(t,e,o,n){let i=fe(t,e,o),s=i.filter(r=>r.severity==="error");return s.length&&b$1("rule-violation",`${o.type} violates ${s.map(r=>r.rule).join(", ")}: ${s.map(r=>r.message).join("; ")}`,s.map(r=>r.fix).join("; "),{rule:s[0].rule,items:s.map(r=>r.item).filter(r=>!!r)}),{state:n(t),warnings:i.filter(r=>r.severity==="warning")}}function st(t){let e=t.methodology,o=e.validateConfig(t.config),n=t.stages??e.defaultStages(o),i=t.roles??e.defaultRoles(o),s=t.now!==void 0?{methodology:e.name,config:o,stages:n,roles:i,now:t.now}:{methodology:e.name,config:o,stages:n,roles:i},r=F(s);return G(r,e.requiredCapabilities,e.exclusiveCapabilities),ue(r,e,{type:"init",by:t.by??"system"},a=>a)}export{Z as A,V as B,Ce as C,re as D,N as E,se as F,Ne as G,Be as H,_e as I,Te as J,z as K,Ve as L,Q as M,de as N,X as O,U as P,ce as Q,Ue as R,Y as S,fe as T,ue as U,st as V,v as a,F as b,k as c,ge as d,q as e,we as f,ye as g,H as h,j as i,b as j,ve as k,G as l,L as m,M as n,te as o,oe as p,ne as q,ie as r,W as s,$e as t,be as u,$ as v,Ie as w,J as x,Oe as y,T as z};//# sourceMappingURL=chunk-D7U3ES2L.mjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-D7U3ES2L.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
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","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","addEvidence","evidence","raiseBlocker","reason","owner","blockerId","lastTransitionTo","status","t","clearBlocker","b","blockers","stillBlocked","prev","toStatus","dropRole","_r","noRole","clearRole","itemId","advanceItem","wantsReview","evaluatePolicies","policies","out","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","note","item0","q","onFail","ZERO_SPENT","addSpent","spent","acc","remaining","budget","isExhausted","estimateTokens","weight","fallbackPerWeight","w","samples","iw","x","y","mid","median","openIteration","assignRole","reviewers","resourceCapsFor","caps","toExNodes","items","present","node","plan","methodology","opts","all","candidates","readyAll","po","options","firstBatch","metrics","flow","ExFlow","n","details","ExFlowRuntimeError","ready","inProgress","perClass","cls","iteration","tokensLeft","limit","dispatched","target","stage","est","coreRulesFor","action","handoff","verdict","validateAction","applyAction","reduce","errors","init","m","config","stages","stateInput"],"mappings":"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","file":"chunk-D7U3ES2L.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","import { assertId, fail } from \"./errors.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 },\n now,\n );\n}\n\nexport type ItemPatch = Partial<\n Omit<WorkItem, \"id\" | \"stage\" | \"status\" | \"transitions\" | \"evidence\" | \"blockers\">\n>;\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\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 updated: WorkItem = {\n ...item,\n status: \"blocked\",\n blockers: [...item.blockers, { id: blockerId, reason, owner, raisedAt: at }],\n transitions:\n item.status === \"blocked\"\n ? item.transitions\n : [\n ...item.transitions,\n {\n from: { stage: item.stage, status: item.status },\n to: { stage: item.stage, status: \"blocked\" },\n at,\n by,\n },\n ],\n };\n const next = putItem(state, updated);\n return appendEvent(next, \"blocker.raised\", by, { id, blocker: blockerId, reason, owner }, at);\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): 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 updated: WorkItem = {\n ...(dropRole && !stillBlocked ? (noRole as WorkItem) : item),\n blockers,\n stage: stillBlocked ? item.stage : toStage,\n status: stillBlocked ? \"blocked\" : toStatus,\n transitions: stillBlocked\n ? item.transitions\n : [\n ...item.transitions,\n {\n from: { stage: item.stage, status: \"blocked\" },\n to: { stage: toStage, status: toStatus },\n at,\n by,\n },\n ],\n };\n const next = putItem(state, updated);\n return appendEvent(next, \"blocker.cleared\", by, { id, blocker: blockerId }, at);\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 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 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 (!item.evidence.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 (!item.evidence.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, clearRole, getItem, moveItem, raiseBlocker } from \"./items.ts\";\nimport { approverIds } from \"./roles.ts\";\nimport { appendEvent, nowOf } from \"./state.ts\";\nimport type {\n Gate,\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 for (const kind of gate.evidence) {\n if (!item.evidence.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): 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 next = advanceItem(next, id, by, false, 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 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 function estimateTokens(\n state: WorkflowState,\n weight: number | undefined,\n fallbackPerWeight = 20000,\n): number {\n const w = weight ?? 1;\n const samples: number[] = [];\n for (const a of state.accounting) {\n const iw = state.items[a.item]?.weight;\n if (iw === undefined || iw <= 0) continue;\n samples.push((a.tokensIn + a.tokensOut) / iw);\n }\n if (samples.length === 0) return 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(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 { 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(state: WorkflowState, item: WorkItem): 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 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(items: WorkItem[], state: WorkflowState): ExNode<NodeData>[] {\n const present = new Set(items.map((i) => i.id));\n return items.map((i) => {\n const role = assignRole(state, i);\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 if (i.priority !== undefined) node.priority = i.priority;\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\";\nexport interface PlanResult {\n state: WorkflowState;\n dispatched: WorkItem[];\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) return { state, dispatched: [], reason: \"no-candidates\" };\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\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)) 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 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 let tokensLeft = iteration ? remaining(iteration.budget, iteration.spent).tokens : undefined;\n const limit = Math.min(opts.max ?? Infinity, po.concurrencyCap ?? Infinity);\n\n const dispatched: WorkItem[] = [];\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 target =\n item.status === \"todo\" && po.dispatchStage !== undefined ? po.dispatchStage : item.stage;\n const stage = stageOf(state, target);\n if (evaluatePolicies(state, item, stage.entryPolicy).length > 0) continue;\n if (\n stage.wipLimit !== undefined &&\n inProgress.filter((i) => i.stage === stage.id).length +\n dispatched.filter((d) => d.stage === stage.id).length >=\n stage.wipLimit\n ) {\n reason = \"wip-full\";\n continue;\n }\n const role = assignRole(state, item);\n const cls = role.resourceClass ?? role.id;\n if (caps[cls] !== undefined && (perClass[cls] ?? 0) >= caps[cls]!) {\n reason = \"wip-full\";\n continue;\n }\n if (tokensLeft !== undefined) {\n const est = estimateTokens(state, item.weight, opts.fallbackTokensPerWeight);\n if (est > tokensLeft) {\n reason = \"budget-exhausted\";\n continue;\n }\n tokensLeft -= est;\n }\n perClass[cls] = (perClass[cls] ?? 0) + 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 && 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, metrics },\n at,\n );\n return reason ? { state: next, dispatched, reason } : { state: next, dispatched };\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 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 { createState } 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"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {c as c$1,b as b$2}from'./chunk-B7MP6Y3W.mjs';import {l}from'./chunk-ROH3RYBI.mjs';import {f,T,d as d$1,N,H,s,u,t,V}from'./chunk-D7U3ES2L.mjs';import {c,e,d,g,f as f$1,b as b$3}from'./chunk-VGD4V5BA.mjs';import {a,b as b$1}from'./chunk-2FRRD6A3.mjs';import {stat,readFile}from'fs/promises';import h from'path';var v={scrum:l},p=["exwf init <scrum> --config <file> [--roles <file>]","exwf add <item.json> [--by who] exwf edit <id> <patch.json> [--by who]","exwf next [--max n] exwf complete <id> <handoff.json> --tokens-in n --tokens-out n --duration-ms n --model m","exwf ceremony <name> [input.json] [--by who]","exwf decide <pendingId> approve|reject [--by who] [--note text]","exwf status | board | metrics | pending | lessons","exwf validate <action.json> exwf role add <manifest.json> | role list"];function F(r){let t=[],m={};for(let i=0;i<r.length;i++){let w=r[i];if(w.startsWith("--")){let e=w.slice(2),c=r[i+1];c!==void 0&&!c.startsWith("--")?(m[e]=c,i++):m[e]="true";}else t.push(w);}return {positional:t,flags:m}}async function x(r){try{return JSON.parse(await readFile(r,"utf8"))}catch(t){return b$1("invalid-input",`cannot read JSON from ${r}: ${t.message}`,"check the path and that the file is valid JSON")}}function b(r){let t=Object.hasOwn(v,r.methodology)?v[r.methodology]:void 0;return t||b$1("config-invalid",`methodology "${r.methodology}" is not available in this build`,`available: ${Object.keys(v).join(", ")}`),t()}function O(r,t){let m=Number(r[t]);return Number.isFinite(m)||b$1("invalid-input",`--${t} must be a number (got ${JSON.stringify(r[t])})`,`pass --${t} <n>`),m}var B=new Set(["init","add","edit","next","complete","ceremony","decide"]);async function st(r,t){let[m,i]=F(r).positional,w=m!==void 0&&(B.has(m)||m==="role"&&i==="add");try{return w?await c(t,()=>L(r,t)):await L(r,t)}catch(e){if(e instanceof a)return {exit:1,out:{ok:false,error:e.toJSON()}};throw e}}async function L(r,t$1){let{positional:m,flags:i}=F(r),[w,...e$1]=m,c=i.by??"human",l=new Date().toISOString();switch(w){case "init":{let[o]=e$1,n=o&&Object.hasOwn(v,o)?v[o]:void 0;if(!n||!i.config)return {exit:2,out:{ok:false,usage:p}};try{await stat(b$3(t$1)),b$1("invalid-input",`${b$3(t$1)} already exists`,"delete .workflow/state.json to start over");}catch(d){if(d instanceof a||d.code!=="ENOENT")throw d}let s=await x(h.resolve(t$1,i.config)),a$1=i.roles?await x(h.resolve(t$1,i.roles)):void 0,f=V(a$1?{methodology:n(),config:s,roles:a$1,by:c,now:l}:{methodology:n(),config:s,by:c,now:l});return await d(t$1,f.state),{exit:0,out:{ok:true,warnings:f.warnings,state:{methodology:f.state.methodology,stages:f.state.stages.map(d=>d.id),roles:Object.keys(f.state.roles)}}}}case "add":{if(!e$1[0])return {exit:2,out:{ok:false,usage:p}};let o=await e(t$1),n=await x(h.resolve(t$1,e$1[0])),s$1=t(o,n,c,l);return await d(t$1,s$1),{exit:0,out:{ok:true,item:s(s$1,n.id)}}}case "edit":{if(!e$1[0]||!e$1[1])return {exit:2,out:{ok:false,usage:p}};let o=await e(t$1),n=u(o,e$1[0],await x(h.resolve(t$1,e$1[1])),c,l);return await d(t$1,n),{exit:0,out:{ok:true,item:s(n,e$1[0])}}}case "next":{let o=await e(t$1),n=i.max?{max:O(i,"max"),now:l}:{now:l},s=b$2(o,b(o),n);await d(t$1,s.state);for(let a of s.briefs)await f$1(t$1,a);return {exit:0,out:{ok:true,reason:s.reason??null,briefs:s.briefs}}}case "complete":{if(!e$1[0]||!e$1[1])return {exit:2,out:{ok:false,usage:p}};let o=await e(t$1),n=await x(h.resolve(t$1,e$1[1]));n.item!==e$1[0]&&b$1("handoff-invalid",`handoff.item "${n.item}" differs from the command's item "${e$1[0]}"`,"make them match");let s$1=i.role??n.role,a=O(i,"duration-ms"),f={item:e$1[0],role:s$1,model:i.model??"",tokensIn:O(i,"tokens-in"),tokensOut:O(i,"tokens-out"),durationMs:a,startedAt:new Date(Date.parse(l)-a).toISOString(),endedAt:l},d$1=c$1(o,b(o),{...n,role:s$1},f,l);return await d(t$1,d$1.state),await g(t$1,n,d$1.state.events.length),{exit:0,out:{ok:true,warnings:d$1.warnings,item:s(d$1.state,e$1[0])}}}case "ceremony":{if(!e$1[0])return {exit:2,out:{ok:false,usage:p}};let o=await e(t$1),n=b(o),s=Object.hasOwn(n.ceremonies,e$1[0])?n.ceremonies[e$1[0]]:void 0;s||b$1("unknown-ceremony",`"${e$1[0]}" is not a ${n.name} ceremony`,`available: ${Object.keys(n.ceremonies).join(", ")}`);let a=e$1[1]?await x(h.resolve(t$1,e$1[1])):{},f=s(o,{...a,by:c,now:l});return await d(t$1,f.state),{exit:0,out:{ok:true,warnings:f.warnings,lastEvent:d$1(f.state)}}}case "decide":{if(!e$1[0]||e$1[1]!=="approve"&&e$1[1]!=="reject")return {exit:2,out:{ok:false,usage:p}};let o=await e(t$1),n=o.pending.find(a=>a.id===e$1[0]),s$1=H(o,e$1[0],e$1[1],c,i.note??"",l);return await d(t$1,s$1),{exit:0,out:{ok:true,item:n?.item?s(s$1,n.item):null}}}case "status":{let o=await e(t$1),n={todo:0,in_progress:0,blocked:0,review:0,awaiting_human:0,done:0,dropped:0};for(let s of Object.values(o.items))n[s.status]+=1;return {exit:0,out:{ok:true,methodology:o.methodology,openIteration:N(o)??null,counts:n,pending:o.pending,lastEvent:d$1(o)}}}case "board":{let o=await e(t$1);return {exit:0,out:{ok:true,columns:o.stages.map(s=>({stage:s.id,wipLimit:s.wipLimit??null,items:Object.values(o.items).filter(a=>a.stage===s.id&&a.status!=="dropped").map(a=>({id:a.id,title:a.title,status:a.status,role:a.role??null,age:a.transitions.length?Date.parse(l)-Date.parse(a.transitions[a.transitions.length-1].at):null}))}))}}}case "metrics":{let o=await e(t$1);return {exit:0,out:{ok:true,metrics:b(o).metrics(o)}}}case "pending":return {exit:0,out:{ok:true,pending:(await e(t$1)).pending}};case "lessons":return {exit:0,out:{ok:true,lessons:(await e(t$1)).lessons}};case "validate":{if(!e$1[0])return {exit:2,out:{ok:false,usage:p}};let o=await e(t$1),n=await x(h.resolve(t$1,e$1[0]));return {exit:0,out:{ok:true,violations:T(o,b(o),n)}}}case "role":{let o=await e(t$1);if(e$1[0]==="list")return {exit:0,out:{ok:true,roles:Object.keys(o.roles),detail:o.roles}};if(e$1[0]==="add"&&e$1[1]){let n=f(o,await x(h.resolve(t$1,e$1[1])),c,l);return await d(t$1,n),{exit:0,out:{ok:true,roles:Object.keys(n.roles)}}}return {exit:2,out:{ok:false,usage:p}}}default:return {exit:2,out:{ok:false,usage:p}}}}export{p as a,F as b,st as c};//# sourceMappingURL=chunk-DZ7AN6H5.mjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-DZ7AN6H5.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/commands.ts"],"names":["METHODOLOGIES","scrum","USAGE","parseArgs","argv","positional","flags","a","key","val","readJson","file","readFile","e","fail","methodologyOf","state","f","num","v","WRITERS","runCommand","cwd","cmd","sub","writes","withStateLock","execute","WorkflowError","rest","by","now","name","stat","statePath","config","path","roles","res","init","saveState","s","loadState","item","s2","addItem","getItem","editItem","opts","next","b","saveBrief","handoff","role","durationMs","acc","complete","saveHandoff","m","c","input","lastEvent","entry","p","decide","counts","i","openIteration","st","action","validateAction","registerRole"],"mappings":"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","file":"chunk-DZ7AN6H5.mjs","sourcesContent":["import { readFile, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport {\n loadState,\n saveBrief,\n saveHandoff,\n saveState,\n statePath,\n withStateLock,\n} from \"../adapters/file.ts\";\nimport { next as planNext } from \"../brief.ts\";\nimport { complete } from \"../complete.ts\";\nimport { WorkflowError, fail } from \"../errors.ts\";\nimport { decide } from \"../gates.ts\";\nimport { addItem, editItem, getItem, type ItemPatch } from \"../items.ts\";\nimport { init, validateAction } from \"../methodology.ts\";\nimport { openIteration } from \"../planner.ts\";\nimport { registerRole } from \"../roles.ts\";\nimport { lastEvent } from \"../state.ts\";\nimport { scrum } from \"../scrum/index.ts\";\nimport type {\n Accounting,\n Action,\n Handoff,\n ItemStatus,\n Methodology,\n NewItem,\n Role,\n WorkflowState,\n} from \"../types.ts\";\n\nconst METHODOLOGIES: Record<string, () => Methodology> = { scrum: scrum as () => Methodology };\n\nexport const USAGE = [\n \"exwf init <scrum> --config <file> [--roles <file>]\",\n \"exwf add <item.json> [--by who] exwf edit <id> <patch.json> [--by who]\",\n \"exwf next [--max n] exwf complete <id> <handoff.json> --tokens-in n --tokens-out n --duration-ms n --model m\",\n \"exwf ceremony <name> [input.json] [--by who]\",\n \"exwf decide <pendingId> approve|reject [--by who] [--note text]\",\n \"exwf status | board | metrics | pending | lessons\",\n \"exwf validate <action.json> exwf role add <manifest.json> | role list\",\n];\n\nexport interface Parsed {\n positional: string[];\n flags: Record<string, string>;\n}\nexport function parseArgs(argv: string[]): Parsed {\n const positional: string[] = [];\n const flags: Record<string, string> = {};\n for (let i = 0; i < argv.length; i++) {\n const a = argv[i]!;\n if (a.startsWith(\"--\")) {\n const key = a.slice(2);\n const val = argv[i + 1];\n if (val !== undefined && !val.startsWith(\"--\")) {\n flags[key] = val;\n i++;\n } else flags[key] = \"true\";\n } else positional.push(a);\n }\n return { positional, flags };\n}\n\nasync function readJson<T>(file: string): Promise<T> {\n try {\n return JSON.parse(await readFile(file, \"utf8\")) as T;\n } catch (e) {\n return fail(\n \"invalid-input\",\n `cannot read JSON from ${file}: ${(e as Error).message}`,\n \"check the path and that the file is valid JSON\",\n );\n }\n}\n\nfunction methodologyOf(state: WorkflowState): Methodology {\n const f = Object.hasOwn(METHODOLOGIES, state.methodology)\n ? METHODOLOGIES[state.methodology]\n : undefined;\n if (!f)\n fail(\n \"config-invalid\",\n `methodology \"${state.methodology}\" is not available in this build`,\n `available: ${Object.keys(METHODOLOGIES).join(\", \")}`,\n );\n return f();\n}\n\nfunction num(flags: Record<string, string>, key: string): number {\n const v = Number(flags[key]);\n if (!Number.isFinite(v))\n fail(\n \"invalid-input\",\n `--${key} must be a number (got ${JSON.stringify(flags[key])})`,\n `pass --${key} <n>`,\n );\n return v;\n}\n\nexport interface CommandResult {\n exit: 0 | 1 | 2;\n out: unknown;\n}\n\n/** Commands that load, change and save the state: they run under .workflow/state.lock. */\nconst WRITERS = new Set([\"init\", \"add\", \"edit\", \"next\", \"complete\", \"ceremony\", \"decide\"]);\n\nexport async function runCommand(argv: string[], cwd: string): Promise<CommandResult> {\n const [cmd, sub] = parseArgs(argv).positional;\n const writes = cmd !== undefined && (WRITERS.has(cmd) || (cmd === \"role\" && sub === \"add\"));\n try {\n return writes ? await withStateLock(cwd, () => execute(argv, cwd)) : await execute(argv, cwd);\n } catch (e) {\n if (e instanceof WorkflowError) return { exit: 1, out: { ok: false, error: e.toJSON() } };\n throw e;\n }\n}\n\nasync function execute(argv: string[], cwd: string): Promise<CommandResult> {\n const { positional, flags } = parseArgs(argv);\n const [cmd, ...rest] = positional;\n const by = flags[\"by\"] ?? \"human\";\n const now = new Date().toISOString();\n switch (cmd) {\n case \"init\": {\n const [name] = rest;\n const f = name && Object.hasOwn(METHODOLOGIES, name) ? METHODOLOGIES[name] : undefined;\n if (!f || !flags[\"config\"]) return { exit: 2, out: { ok: false, usage: USAGE } };\n try {\n await stat(statePath(cwd));\n fail(\n \"invalid-input\",\n `${statePath(cwd)} already exists`,\n \"delete .workflow/state.json to start over\",\n );\n } catch (e) {\n if (e instanceof WorkflowError) throw e;\n if ((e as NodeJS.ErrnoException).code !== \"ENOENT\") throw e;\n }\n const config = await readJson<unknown>(path.resolve(cwd, flags[\"config\"]));\n const roles = flags[\"roles\"]\n ? await readJson<Role[]>(path.resolve(cwd, flags[\"roles\"]))\n : undefined;\n const res = init(\n roles\n ? { methodology: f(), config, roles, by, now }\n : { methodology: f(), config, by, now },\n );\n await saveState(cwd, res.state);\n return {\n exit: 0,\n out: {\n ok: true,\n warnings: res.warnings,\n state: {\n methodology: res.state.methodology,\n stages: res.state.stages.map((s) => s.id),\n roles: Object.keys(res.state.roles),\n },\n },\n };\n }\n case \"add\": {\n if (!rest[0]) return { exit: 2, out: { ok: false, usage: USAGE } };\n const state = await loadState(cwd);\n const item = await readJson<NewItem>(path.resolve(cwd, rest[0]));\n const s2 = addItem(state, item, by, now);\n await saveState(cwd, s2);\n return { exit: 0, out: { ok: true, item: getItem(s2, item.id) } };\n }\n case \"edit\": {\n if (!rest[0] || !rest[1]) return { exit: 2, out: { ok: false, usage: USAGE } };\n const state = await loadState(cwd);\n const s2 = editItem(\n state,\n rest[0],\n await readJson<ItemPatch>(path.resolve(cwd, rest[1])),\n by,\n now,\n );\n await saveState(cwd, s2);\n return { exit: 0, out: { ok: true, item: getItem(s2, rest[0]) } };\n }\n case \"next\": {\n const state = await loadState(cwd);\n const opts = flags[\"max\"] ? { max: num(flags, \"max\"), now } : { now };\n const res = planNext(state, methodologyOf(state), opts);\n await saveState(cwd, res.state);\n for (const b of res.briefs) await saveBrief(cwd, b);\n return { exit: 0, out: { ok: true, reason: res.reason ?? null, briefs: res.briefs } };\n }\n case \"complete\": {\n if (!rest[0] || !rest[1]) return { exit: 2, out: { ok: false, usage: USAGE } };\n const state = await loadState(cwd);\n const handoff = await readJson<Handoff>(path.resolve(cwd, rest[1]));\n if (handoff.item !== rest[0])\n fail(\n \"handoff-invalid\",\n `handoff.item \"${handoff.item}\" differs from the command's item \"${rest[0]}\"`,\n \"make them match\",\n );\n const role = flags[\"role\"] ?? handoff.role;\n const durationMs = num(flags, \"duration-ms\");\n const acc: Accounting = {\n item: rest[0],\n role,\n model: flags[\"model\"] ?? \"\",\n tokensIn: num(flags, \"tokens-in\"),\n tokensOut: num(flags, \"tokens-out\"),\n durationMs,\n startedAt: new Date(Date.parse(now) - durationMs).toISOString(),\n endedAt: now,\n };\n const res = complete(state, methodologyOf(state), { ...handoff, role }, acc, now);\n await saveState(cwd, res.state);\n await saveHandoff(cwd, handoff, res.state.events.length);\n return {\n exit: 0,\n out: { ok: true, warnings: res.warnings, item: getItem(res.state, rest[0]) },\n };\n }\n case \"ceremony\": {\n if (!rest[0]) return { exit: 2, out: { ok: false, usage: USAGE } };\n const state = await loadState(cwd);\n const m = methodologyOf(state);\n const c = Object.hasOwn(m.ceremonies, rest[0]) ? m.ceremonies[rest[0]] : undefined;\n if (!c)\n fail(\n \"unknown-ceremony\",\n `\"${rest[0]}\" is not a ${m.name} ceremony`,\n `available: ${Object.keys(m.ceremonies).join(\", \")}`,\n );\n const input = rest[1]\n ? await readJson<Record<string, unknown>>(path.resolve(cwd, rest[1]))\n : {};\n const res = c(state, { ...input, by, now });\n await saveState(cwd, res.state);\n return {\n exit: 0,\n out: { ok: true, warnings: res.warnings, lastEvent: lastEvent(res.state) },\n };\n }\n case \"decide\": {\n if (!rest[0] || (rest[1] !== \"approve\" && rest[1] !== \"reject\"))\n return { exit: 2, out: { ok: false, usage: USAGE } };\n const state = await loadState(cwd);\n const entry = state.pending.find((p) => p.id === rest[0]);\n const s2 = decide(state, rest[0], rest[1], by, flags[\"note\"] ?? \"\", now);\n await saveState(cwd, s2);\n return { exit: 0, out: { ok: true, item: entry?.item ? getItem(s2, entry.item) : null } };\n }\n case \"status\": {\n const state = await loadState(cwd);\n const counts: Record<ItemStatus, number> = {\n todo: 0,\n in_progress: 0,\n blocked: 0,\n review: 0,\n awaiting_human: 0,\n done: 0,\n dropped: 0,\n };\n for (const i of Object.values(state.items)) counts[i.status] += 1;\n return {\n exit: 0,\n out: {\n ok: true,\n methodology: state.methodology,\n openIteration: openIteration(state) ?? null,\n counts,\n pending: state.pending,\n lastEvent: lastEvent(state),\n },\n };\n }\n case \"board\": {\n const state = await loadState(cwd);\n const columns = state.stages.map((st) => ({\n stage: st.id,\n wipLimit: st.wipLimit ?? null,\n items: Object.values(state.items)\n .filter((i) => i.stage === st.id && i.status !== \"dropped\")\n .map((i) => ({\n id: i.id,\n title: i.title,\n status: i.status,\n role: i.role ?? null,\n age: i.transitions.length\n ? Date.parse(now) - Date.parse(i.transitions[i.transitions.length - 1]!.at)\n : null,\n })),\n }));\n return { exit: 0, out: { ok: true, columns } };\n }\n case \"metrics\": {\n const state = await loadState(cwd);\n return { exit: 0, out: { ok: true, metrics: methodologyOf(state).metrics(state) } };\n }\n case \"pending\":\n return { exit: 0, out: { ok: true, pending: (await loadState(cwd)).pending } };\n case \"lessons\":\n return { exit: 0, out: { ok: true, lessons: (await loadState(cwd)).lessons } };\n case \"validate\": {\n if (!rest[0]) return { exit: 2, out: { ok: false, usage: USAGE } };\n const state = await loadState(cwd);\n const action = await readJson<Action>(path.resolve(cwd, rest[0]));\n return {\n exit: 0,\n out: { ok: true, violations: validateAction(state, methodologyOf(state), action) },\n };\n }\n case \"role\": {\n const state = await loadState(cwd);\n if (rest[0] === \"list\")\n return {\n exit: 0,\n out: { ok: true, roles: Object.keys(state.roles), detail: state.roles },\n };\n if (rest[0] === \"add\" && rest[1]) {\n const s2 = registerRole(state, await readJson<Role>(path.resolve(cwd, rest[1])), by, now);\n await saveState(cwd, s2);\n return { exit: 0, out: { ok: true, roles: Object.keys(s2.roles) } };\n }\n return { exit: 2, out: { ok: false, usage: USAGE } };\n }\n default:\n return { exit: 2, out: { ok: false, usage: USAGE } };\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-KIQOUUEZ.mjs"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunk5XAKW64K_cjs=require('./chunk-5XAKW64K.cjs'),chunkS3BXVHO7_cjs=require('./chunk-S3BXVHO7.cjs'),exsorted=require('exsorted');function L(n,e,...r){if(e==="human")return true;let i=chunk5XAKW64K_cjs.e(n,e);return !!i&&r.some(p=>chunk5XAKW64K_cjs.h(i,p))}function D(n,e,...r){if(!L(n,e,...r)){let i=Object.values(n.roles).filter(p=>r.some(l=>chunk5XAKW64K_cjs.h(p,l))).map(p=>p.id);chunkS3BXVHO7_cjs.b("missing-capability",`"${e}" lacks capability ${r.map(p=>`"${p}"`).join(" or ")}`,`run this as one of: ${i.join(", ")||"human"}`);}}var ge=["todo","in_progress","blocked","review","awaiting_human","done","dropped"];function ye(n){let e=n.events.filter(r=>r.type==="sprint.closed"&&r.payload.reason!=="cancel");return e.length===0?null:e.reduce((r,i)=>r+i.payload.doneWeight,0)/e.length}function ae(n){let e=chunk5XAKW64K_cjs.N(n),r=Object.fromEntries(ge.map(o=>[o,0])),i=[],p=0;for(let o of e?.committed??[]){let t=n.items[o];if(t){r[t.status]+=1,t.status!=="done"&&(p+=t.weight??0);for(let a of t.blockers)a.clearedAt||i.push({item:o,blocker:a.id,owner:a.owner,reason:a.reason});}}let l=e?.spent??{tokens:0,turns:0,wallclockMs:0},y=e?chunk5XAKW64K_cjs.K(e.budget,e.spent):{},u=ye(n),h="unknown";if(e&&u!==null&&e.budget.tokens){let o=(y.tokens??0)/e.budget.tokens;h=p<=u*o?"on-track":"at-risk";}let s=n.lessons.filter(o=>o.status==="raised").length;return {sprint:e?.id??null,goal:e?.goal??null,byStatus:r,blockers:i,spent:l,remaining:y,remainingWeight:p,raisedLessons:s,velocity:u,forecast:h}}function J(n){for(let e=n.iterations.length-1;e>=0;e--){let r=n.iterations[e];if(r.endedAt!==void 0)return r}}function F(n,e){return n.events.find(r=>r.type==="sprint.closed"&&r.payload.id===e)?.seq??Number.POSITIVE_INFINITY}function he(n){let e=new Set(J(n)?.carryover??[]),r=Object.values(n.items).filter(i=>i.stage==="backlog"&&i.status==="todo"&&i.type!=="question");return exsorted.timSort([...r],(i,p)=>{let l=e.has(i.id)?1:0,y=e.has(p.id)?1:0;return l!==y?y-l:(p.priority??0)-(i.priority??0)})}function re(n,e){let r=chunk5XAKW64K_cjs.s(n,e);(r.stage!=="backlog"||r.status!=="todo")&&chunkS3BXVHO7_cjs.b("invalid-input",`item "${e}" is not in the Product Backlog (${r.stage}/${r.status})`,"only backlog items can be committed",{items:[e]}),chunk5XAKW64K_cjs.C(n,r,chunk5XAKW64K_cjs.n(n,"backlog").exitPolicy,"enter the Sprint Backlog");}function ie(n,e,r,i,p){let l=n;for(let y of Object.values(n.items))y.type!=="question"||y.parent===void 0||!e.includes(y.parent)||y.status==="done"||y.status==="dropped"||((y.stage!=="sprint"||y.status!=="todo")&&(l=chunk5XAKW64K_cjs.v(l,y.id,{stage:"sprint",status:"todo"},i,p)),l=chunk5XAKW64K_cjs.q(l,y.id,u=>({...u,iteration:r})));return l}function se(n,e){return {...n,config:{...O(n),definitionOfDone:e},stages:n.stages.map(r=>r.id==="review"?{...r,exitPolicy:e}:r)}}function be(n,e){let r=[],i=0;for(let p of he(n)){if(e.tokens!==void 0){let l=chunk5XAKW64K_cjs.M(n,p.weight);if(i+l>e.tokens)break;i+=l;}else if(e.turns!==void 0&&r.length>=e.turns)break;r.push(p.id);}return r}function U(n){let e=(o,t,a,m)=>chunk5XAKW64K_cjs.U(o,n(),{type:t,by:a.by,payload:a},f=>m(f,chunk5XAKW64K_cjs.a(a.now)));return {refine:(o,t)=>{D(o,t.by,"define-acceptance","deliver");let a=t.items??[],m=t.split??[];return a.length===0&&m.length===0&&chunkS3BXVHO7_cjs.b("invalid-input","refine needs items[] or split[]","pass at least one patch or split"),e(o,"ceremony.refine",t,(f,c)=>{for(let{id:d,patch:v}of a)f=chunk5XAKW64K_cjs.u(f,d,v,t.by,c);for(let d of m){chunk5XAKW64K_cjs.s(f,d.from);for(let v of d.into)f=chunk5XAKW64K_cjs.t(f,{...v,parent:d.from},t.by,c);f=chunk5XAKW64K_cjs.v(f,d.from,{status:"dropped"},t.by,c);}return chunk5XAKW64K_cjs.c(f,"ceremony.refine",t.by,{edited:a.map(d=>d.id),split:m.map(d=>({from:d.from,into:d.into.map(v=>v.id)}))},c)})},plan:(o,t)=>{D(o,t.by,"facilitate");let a=t.goal;(typeof a!="string"||a.trim()==="")&&chunkS3BXVHO7_cjs.b("invalid-input","sprint planning needs a non-empty goal","state the Sprint Goal in one sentence");let m=O(o),f=t.budget??m.sprintBudget,c=t.items==="auto"?be(o,f):t.items;Array.isArray(c)||chunkS3BXVHO7_cjs.b("invalid-input",'sprint planning needs items: string[] or "auto"','pass ["A","B"] or "auto"'),c.length===0&&chunkS3BXVHO7_cjs.b("invalid-input","no backlog items fit the sprint","refine the backlog (acceptance + estimates) or raise the budget in config");for(let d of c)re(o,d);return e(o,"ceremony.plan",t,(d,v)=>{let w=`S${d.iterations.length+1}`,q=J(d),g=c.filter(S=>q?.carryover.includes(S));for(let S of c)d=chunk5XAKW64K_cjs.v(d,S,{stage:"sprint",status:"todo"},t.by,v),d=chunk5XAKW64K_cjs.q(d,S,B=>({...B,iteration:w}));d=ie(d,c,w,t.by,v);let P=c.reduce((S,B)=>S+(d.items[B]?.weight??0),0);return d={...d,iterations:[...d.iterations,{id:w,goal:a,budget:f,spent:{tokens:0,turns:0,wallclockMs:0},startedAt:v,committed:[...c],carryover:g}]},chunk5XAKW64K_cjs.c(d,"sprint.opened",t.by,{id:w,goal:a,committed:c,committedWeight:P,budget:f},v)})},commit:(o,t)=>{let a=chunk5XAKW64K_cjs.N(o);a||chunkS3BXVHO7_cjs.b("invalid-input","no open sprint to commit into","run the plan ceremony first");let m=t.items;(!Array.isArray(m)||m.length===0)&&chunkS3BXVHO7_cjs.b("invalid-input","commit needs items[]",'pass ["A"]');let f=new Set;for(let c of m)f.has(c)&&chunkS3BXVHO7_cjs.b("invalid-input",`item "${c}" appears twice in items[]`,"list each item once",{items:[c]}),f.add(c),chunk5XAKW64K_cjs.s(o,c),a.committed.includes(c)&&chunkS3BXVHO7_cjs.b("invalid-input",`item "${c}" is already committed to ${a.id}`,"nothing to do",{items:[c]}),re(o,c);return e(o,"ceremony.commit",t,(c,d)=>{for(let v of m)c=chunk5XAKW64K_cjs.v(c,v,{stage:"sprint",status:"todo"},t.by,d),c=chunk5XAKW64K_cjs.q(c,v,w=>({...w,iteration:a.id}));return c=ie(c,m,a.id,t.by,d),c={...c,iterations:c.iterations.map(v=>v.id===a.id?{...v,committed:[...v.committed,...m]}:v)},chunk5XAKW64K_cjs.c(c,"sprint.committed",t.by,{id:a.id,items:m,goalImpact:t.goalImpact??null},d)})},uncommit:(o,t)=>{D(o,t.by,"order-backlog");let a=chunk5XAKW64K_cjs.N(o);a||chunkS3BXVHO7_cjs.b("invalid-input","no open sprint","nothing to uncommit from");let m=t.items;(!Array.isArray(m)||m.length===0)&&chunkS3BXVHO7_cjs.b("invalid-input","uncommit needs items[]",'pass ["A"]');for(let f of m)chunk5XAKW64K_cjs.s(o,f).status==="done"&&chunkS3BXVHO7_cjs.b("invalid-input",`item "${f}" is done`,"finished work cannot be uncommitted",{items:[f]});for(let f of m)a.committed.includes(f)||chunkS3BXVHO7_cjs.b("invalid-input",`item "${f}" is not committed to ${a.id}`,`committed: ${a.committed.join(", ")}`,{items:[f]});return e(o,"ceremony.uncommit",t,(f,c)=>{for(let d of m)f=chunk5XAKW64K_cjs.v(f,d,{stage:"backlog",status:"todo"},t.by,c),f=chunk5XAKW64K_cjs.r(f,d,["iteration","role"]);return f={...f,iterations:f.iterations.map(d=>d.id===a.id?{...d,committed:d.committed.filter(v=>!m.includes(v))}:d)},chunk5XAKW64K_cjs.c(f,"sprint.uncommitted",t.by,{id:a.id,items:m,reason:t.reason??""},c)})},daily:(o,t)=>e(o,"ceremony.daily",t,(a,m)=>chunk5XAKW64K_cjs.c(a,"daily",t.by,ae(a),m)),review:(o,t)=>{let a=chunk5XAKW64K_cjs.N(o);a||chunkS3BXVHO7_cjs.b("invalid-input","no open sprint to review","run the plan ceremony first");let m=chunk5XAKW64K_cjs.j(o,"sprint-review");t.by!=="human"&&!m.includes(t.by)&&chunkS3BXVHO7_cjs.b("gate-unmet",`"${t.by}" may not accept the Sprint Review`,`run review as "human" or as ${m.join(", ")||"a role with canApprove sprint-review"}`,{rule:"sprint-review"});let f=t.feedback??[];return e(o,"ceremony.review",t,(c,d)=>{for(let w of f)c=chunk5XAKW64K_cjs.t(c,{...w,stage:"backlog"},t.by,d);let v=a.committed.filter(w=>c.items[w]?.status==="done");return c=chunk5XAKW64K_cjs.c(c,"increment",t.by,{sprint:a.id,done:v,goalMet:t.goalMet===true,accepted:t.accepted===true,feedback:f.map(w=>w.id)},d),T(c,"review",d)})},retro:(o,t)=>{D(o,t.by,"facilitate");let a=J(o);a||chunkS3BXVHO7_cjs.b("invalid-input","no closed sprint to retrospect","close the sprint (review or cancel) first"),chunk5XAKW64K_cjs.N(o)&&chunkS3BXVHO7_cjs.b("invalid-input","a sprint is still open","retro runs between sprints; review or cancel the open one");let m=F(o,a.id);o.events.some(g=>g.type==="retro"&&g.seq>m)&&chunkS3BXVHO7_cjs.b("invalid-input",`sprint ${a.id} already has a retrospective`,"plan the next sprint");let f=t.lessons??[],c=t.adopt??[],d=t.dismiss??[],v=t.dodChanges,w=[...c.map(g=>g.id),...d],q=w.find((g,P)=>w.indexOf(g)!==P);q&&chunkS3BXVHO7_cjs.b("invalid-input",`lesson "${q}" is referenced more than once`,"adopt or dismiss each lesson once");for(let g of w){let P=o.lessons.find(S=>S.id===g);P||chunkS3BXVHO7_cjs.b("invalid-input",`no lesson "${g}"`,`raised lessons: ${o.lessons.filter(S=>S.status==="raised").map(S=>S.id).join(", ")||"(none)"}`),P.status!=="raised"&&chunkS3BXVHO7_cjs.b("invalid-input",`lesson "${g}" is already ${P.status}`,"only raised lessons can be adopted or dismissed");}return e(o,"ceremony.retro",t,(g,P)=>{let S=[],B=[],H=[],E=false,K=k=>{if(k)if(k.kind==="agreement")g.agreements.includes(k.text)||(g={...g,agreements:[...g.agreements,k.text]}),B.push(k.text);else if(k.kind==="dod"){let W=O(g).definitionOfDone;W.some(_=>JSON.stringify(_)===JSON.stringify(k.policy))||(E=true,g=se(g,[...W,k.policy]));}else k.kind==="backlog"&&(g=chunk5XAKW64K_cjs.t(g,{...k.item,stage:"backlog",tags:[...k.item.tags??[],"retro"]},t.by,P),H.push(k.item.id));};for(let k of f){let W=`L${g.lessons.length+1}`,_={id:W,at:P,text:k.text,scope:k.scope,status:"adopted",from:t.by};k.suggestedChange&&(_.suggestedChange=k.suggestedChange),g={...g,lessons:[...g.lessons,_]},S.push(W),K(k.suggestedChange);}for(let k of c)g={...g,lessons:g.lessons.map(W=>W.id===k.id?{...W,status:"adopted",...k.suggestedChange?{suggestedChange:k.suggestedChange}:{}}:W)},S.push(k.id),K(k.suggestedChange??g.lessons.find(W=>W.id===k.id)?.suggestedChange);for(let k of d)g={...g,lessons:g.lessons.map(W=>W.id===k?{...W,status:"dismissed"}:W)};return v&&(E=true,g=se(g,v)),chunk5XAKW64K_cjs.c(g,"retro",t.by,{sprint:a.id,adopted:S,dismissed:d,agreements:B,dodChanged:E,backlogAdded:H},P)})},cancel:(o,t)=>{D(o,t.by,"order-backlog");let a=chunk5XAKW64K_cjs.N(o);return a||chunkS3BXVHO7_cjs.b("invalid-input","no open sprint to cancel","nothing to do"),e(o,"ceremony.cancel",t,(m,f)=>(m=chunk5XAKW64K_cjs.c(m,"sprint.cancelled",t.by,{id:a.id,reason:t.reason??""},f),T(m,"cancel",f)))}}}var ke=new Set(["never","po-only","any"]);function ce(n){let e=n??{},r=e.sprintBudget;(!r||typeof r!="object"||r.tokens===void 0&&r.turns===void 0&&r.wallclockMs===void 0)&&chunkS3BXVHO7_cjs.b("config-invalid","scrum config.sprintBudget must define tokens, turns or wallclockMs",'e.g. { "sprintBudget": { "tokens": 400000, "turns": 60 } }'),(typeof e.productGoal!="string"||e.productGoal.trim()==="")&&chunkS3BXVHO7_cjs.b("config-invalid","scrum config.productGoal must be a non-empty string","state the Product Goal in one sentence"),Array.isArray(e.definitionOfDone)||chunkS3BXVHO7_cjs.b("config-invalid","scrum config.definitionOfDone must be a Policy[]",'e.g. [{ "kind": "evidence", "evidenceKind": "test-output" }]');let i=e.refinementSharePct??10;(typeof i!="number"||i<0||i>100)&&chunkS3BXVHO7_cjs.b("config-invalid","scrum config.refinementSharePct must be 0..100","omit it for the default 10");let p=e.allowMidSprintAdd??"po-only";(typeof p!="string"||!ke.has(p))&&chunkS3BXVHO7_cjs.b("config-invalid",`scrum config.allowMidSprintAdd must be never | po-only | any (got ${JSON.stringify(p)})`,'use "po-only" unless you have a reason');let l=e.inProgressWipLimit;l!==void 0&&(typeof l!="number"||l<1)&&chunkS3BXVHO7_cjs.b("config-invalid","scrum config.inProgressWipLimit must be a positive number","omit it for no limit");let y={sprintBudget:r,productGoal:e.productGoal,definitionOfDone:e.definitionOfDone,refinementSharePct:i,allowMidSprintAdd:p};return l!==void 0&&(y.inProgressWipLimit=l),y}var M=(n,e)=>e===0?0:n/e;function de(n){let e=n.events.filter(s=>s.type==="sprint.closed").map(s=>s.payload),r=e.filter(s=>s.reason!=="cancel"),i=r.map(s=>s.doneWeight),p=r.reduce((s,o)=>s+o.doneWeight,0),l=r.reduce((s,o)=>s+o.committedWeight,0),y=n.events.filter(s=>s.type==="increment").map(s=>s.payload),u=e.filter(s=>s.budget.tokens!==void 0),h=r.reduce((s,o)=>s+o.spent.tokens,0);return {velocity:i,meanVelocity:M(i.reduce((s,o)=>s+o,0),i.length),burndown:n.events.filter(s=>s.type==="daily").map(s=>s.payload.remainingWeight),commitmentReliability:M(p,l),sprintGoalHitRate:M(y.filter(s=>s.goalMet).length,y.length),carryoverRatio:M(e.reduce((s,o)=>s+o.carryover.length,0),e.reduce((s,o)=>s+o.done.length+o.carryover.length,0)),budgetUtilisation:M(u.reduce((s,o)=>s+o.spent.tokens,0),u.reduce((s,o)=>s+(o.budget.tokens??0),0)),costPerPoint:M(h,p)}}function le(){return [{id:"product-owner",name:"Product Owner",modelTier:"large",capabilities:["order-backlog","define-acceptance","escalate"],canApprove:["sprint-review"],inputs:["stakeholder-needs","product-goal"],outputs:["ordered-backlog","acceptance-criteria"],do_not:["do not implement items yourself"]},{id:"scrum-master",name:"Scrum Master",modelTier:"large",capabilities:["facilitate","escalate"],canApprove:[],inputs:["board","blockers"],outputs:["ceremony-records","lessons"],do_not:["do not reorder the Product Backlog","do not assign work; the planner pulls"]},{id:"developer",name:"Developer",modelTier:"small",capabilities:["deliver","review","verify"],canApprove:[],inputs:["brief"],outputs:["code","test-output"],do_not:["do not change acceptance criteria","do not touch items outside your brief"]}]}var R=(n,e,r,i,p)=>p?{rule:n,severity:e,item:p,message:r,fix:i}:{rule:n,severity:e,message:r,fix:i};function me(n){for(let e=n.iterations.length-1;e>=0;e--){let r=n.iterations[e];if(r.endedAt!==void 0)return r}}function pe(){return [{id:"one-open-sprint",severity:"error",check:(u,h)=>h.type==="ceremony.plan"&&chunk5XAKW64K_cjs.N(u)?[R("one-open-sprint","error",`sprint ${chunk5XAKW64K_cjs.N(u).id} is still open`,"review or cancel it before planning the next sprint")]:[]},{id:"retro-before-plan",severity:"error",check:(u,h)=>{if(h.type!=="ceremony.plan")return [];let s=me(u);if(!s)return [];let o=F(u,s.id);if(u.events.some(a=>a.type==="retro"&&a.seq>o))return [];let t=s.outcome==="cancelled"?"warning":"error";return [R("retro-before-plan",t,`sprint ${s.id} has no retrospective yet`,"run the retro ceremony first (lessons may be empty)")]}},{id:"sprint-budget-fixed",severity:"error",check:(u,h)=>{if(h.type!=="ceremony.plan")return [];let s=h.payload?.budget;return s===void 0||JSON.stringify(s)===JSON.stringify(O(u).sprintBudget)?[]:[R("sprint-budget-fixed","error","sprint length is fixed by config.sprintBudget","change sprintBudget in the config between sprints instead of per plan")]}},{id:"scope-protects-goal",severity:"error",check:(u,h)=>{if(h.type!=="ceremony.commit")return [];let s=O(u),o=h.payload??{};return s.allowMidSprintAdd==="never"?[R("scope-protects-goal","error","mid-sprint additions are disabled",'set allowMidSprintAdd to "po-only" or wait for the next sprint')]:s.allowMidSprintAdd==="po-only"&&!L(u,h.by,"order-backlog")?[R("scope-protects-goal","error",`"${h.by}" may not add work mid-sprint`,"ask the Product Owner (order-backlog) to commit it")]:o.goalImpact!=="none"?[R("scope-protects-goal","error",`adding work with goalImpact "${o.goalImpact??"unset"}" endangers the Sprint Goal`,'only commit items with goalImpact: "none"; otherwise cancel and re-plan')]:[]}},{id:"po-orders-backlog",severity:"error",check:(u,h)=>h.type!=="ceremony.refine"||L(u,h.by,"order-backlog")?[]:((h.payload??{}).items??[]).filter(o=>o.patch.priority!==void 0).map(o=>R("po-orders-backlog","error",`"${h.by}" may not change the priority of "${o.id}"`,"only the Product Owner orders the backlog; drop priority from the patch",o.id))},{id:"dod-not-weakened",severity:"error",check:(u,h)=>h.type==="ceremony.retro"&&h.payload?.dodChanges!==void 0&&chunk5XAKW64K_cjs.N(u)?[R("dod-not-weakened","error","Definition of Done cannot change while a sprint is open","close the sprint first; DoD changes apply to the next sprint")]:[]},{id:"carryover-reestimated",severity:"error",check:(u,h)=>{if(h.type!=="ceremony.plan")return [];let s=h.payload?.items;if(!Array.isArray(s))return [];let o=me(u);if(!o)return [];let t=F(u,o.id);return s.filter(a=>o.carryover.includes(a)&&!u.events.some(m=>m.type==="item.edited"&&m.seq>t&&m.payload.id===a&&m.payload.changed.includes("weight"))).map(a=>R("carryover-reestimated","error",`carried-over item "${a}" was not re-estimated after ${o.id}`,"refine it with a new weight before committing",a))}}]}function ue(n){let e={id:"in_progress",name:"In progress",entryPolicy:[{kind:"dependencies-done"}],exitPolicy:[]};return n.inProgressWipLimit!==void 0&&(e.wipLimit=n.inProgressWipLimit),[{id:"backlog",name:"Product Backlog",entryPolicy:[],exitPolicy:[{kind:"acceptance-written"},{kind:"estimate-present"}]},{id:"sprint",name:"Sprint Backlog",entryPolicy:[],exitPolicy:[]},e,{id:"review",name:"Review",entryPolicy:[],exitPolicy:n.definitionOfDone,review:true},{id:"done",name:"Increment",entryPolicy:[],exitPolicy:[]}]}var ve={backlog:"Product Backlog",item:"Product Backlog Item",stage:"Column",iteration:"Sprint",increment:"Increment",ceremony:"Scrum Event",gate:"Sprint Review"};function O(n){return n.config}function we(n,e,r){let i=n,p=chunk5XAKW64K_cjs.s(i,e).blockers.filter(y=>!y.clearedAt);if(p.length){i=chunk5XAKW64K_cjs.q(i,e,y=>({...y,blockers:y.blockers.map(u=>u.clearedAt?u:{...u,clearedAt:r})}));for(let y of p)i=chunk5XAKW64K_cjs.c(i,"blocker.cleared","system",{id:e,blocker:y.id,reason:"sprint closed"},r);}for(let y of i.pending.filter(u=>u.item===e))i={...i,pending:i.pending.filter(u=>u.id!==y.id)},i=chunk5XAKW64K_cjs.c(i,"pending.dropped","system",{id:y.id,item:e,reason:"sprint closed"},r);let l=chunk5XAKW64K_cjs.s(i,e);return (l.stage!=="backlog"||l.status!=="todo")&&(i=chunk5XAKW64K_cjs.v(i,e,{stage:"backlog",status:"todo"},"system",r)),chunk5XAKW64K_cjs.r(i,e,l.type==="question"?["iteration"]:["iteration","role"])}function T(n,e,r){let i=chunk5XAKW64K_cjs.N(n);if(!i)return n;let p=i.committed.map(t=>chunk5XAKW64K_cjs.s(n,t)),l=p.filter(t=>t.status==="done").map(t=>t.id),y=p.filter(t=>t.status==="dropped").map(t=>t.id),u=p.filter(t=>t.status!=="done"&&t.status!=="dropped").map(t=>t.id),h=Object.values(n.items).filter(t=>t.type==="question"&&t.parent!==void 0&&u.includes(t.parent)&&t.status!=="done"&&t.status!=="dropped").map(t=>t.id),s=n;for(let t of [...u,...h])s=we(s,t,r);let o=t=>t.reduce((a,m)=>a+(n.items[m]?.weight??0),0);return s={...s,iterations:s.iterations.map(t=>{if(t.id!==i.id)return t;let{closing:a,...m}=t;return {...m,endedAt:r,outcome:e==="cancel"?"cancelled":"completed",carryover:u}})},chunk5XAKW64K_cjs.c(s,"sprint.closed","system",{id:i.id,reason:e,done:l,carryover:u,carriedQuestions:h,dropped:y,doneWeight:o(l),committedWeight:o(i.committed),spent:i.spent,budget:i.budget},r)}function Se(){return {name:"scrum",vocabulary:ve,validateConfig:ce,defaultStages:ue,defaultRoles:le,requiredCapabilities:["order-backlog","facilitate","deliver"],exclusiveCapabilities:["order-backlog"],plannerOptions(n){let e=O(n).inProgressWipLimit;return e===void 0?{schedulerMode:"level",dispatchStage:"in_progress"}:{schedulerMode:"level",dispatchStage:"in_progress",concurrencyCap:e}},candidates(n){let e=chunk5XAKW64K_cjs.N(n);return !e||e.closing?[]:Object.values(n.items).filter(r=>r.iteration===e.id&&(r.status==="todo"||r.status==="review")&&(r.stage==="sprint"||r.stage==="review"))},invariants(n,e){let r=chunk5XAKW64K_cjs.N(n),i=O(n),p=r?chunk5XAKW64K_cjs.K(r.budget,r.spent):{};return [`Sprint Goal: ${r?.goal??"(no open sprint)"}; Product Goal: ${i.productGoal}`,`Budget remaining: ${JSON.stringify(p)}; stop and hand off when it is gone`,`Definition of Done: ${i.definitionOfDone.map(l=>l.kind==="evidence"?`evidence ${l.evidenceKind}`:l.kind).join(", ")||"(none)"}`,`Do not change the scope of "${e.id}" or its acceptance criteria; raise open_questions instead`]},ceremonies:U(Se),rules:pe(),metrics:n=>({...de(n)}),humanDefaults:{gates:["sprint-review"]},afterComplete(n,e,r){let i=chunk5XAKW64K_cjs.N(n);return !i||!i.closing&&!chunk5XAKW64K_cjs.L(i.budget,i.spent)?n:Object.values(n.items).some(l=>l.iteration===i.id&&l.status==="in_progress")?i.closing?n:chunk5XAKW64K_cjs.c({...n,iterations:n.iterations.map(l=>l.id===i.id?{...l,closing:true}:l)},"sprint.closing","system",{id:i.id},r):T(n,"budget",r)}}}exports.a=L;exports.b=ae;exports.c=U;exports.d=ce;exports.e=de;exports.f=le;exports.g=pe;exports.h=ue;exports.i=ve;exports.j=O;exports.k=T;exports.l=Se;//# sourceMappingURL=chunk-LPQSNYYT.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-LPQSNYYT.cjs.map
|