ex-workflow 0.4.0-stage → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +58 -2
- package/README.md +68 -32
- package/dist/adapters/index.cjs +1 -1
- package/dist/adapters/index.mjs +1 -1
- package/dist/{roles-BLBRKhUZ.d.ts → budget-Cx63FX2K.d.ts} +9 -2
- package/dist/{roles-aneKYJ3Z.d.cts → budget-JyNKxP5N.d.cts} +9 -2
- package/dist/chunk-3KFQPSRX.mjs +2 -0
- package/dist/chunk-3KFQPSRX.mjs.map +1 -0
- package/dist/chunk-5PHK72VM.cjs +2 -0
- package/dist/chunk-5PHK72VM.cjs.map +1 -0
- package/dist/chunk-5TXYMLBF.mjs +3 -0
- package/dist/chunk-5TXYMLBF.mjs.map +1 -0
- package/dist/chunk-7IG6EQI4.mjs +6 -0
- package/dist/chunk-7IG6EQI4.mjs.map +1 -0
- package/dist/chunk-CYXVGHQM.cjs +2 -0
- package/dist/chunk-CYXVGHQM.cjs.map +1 -0
- package/dist/chunk-FKTCGQYB.cjs +2 -0
- package/dist/chunk-FKTCGQYB.cjs.map +1 -0
- package/dist/chunk-HIHMBMB5.cjs +2 -0
- package/dist/chunk-HIHMBMB5.cjs.map +1 -0
- package/dist/chunk-MQWMQ4PD.mjs +2 -0
- package/dist/chunk-MQWMQ4PD.mjs.map +1 -0
- package/dist/chunk-QDMEM62U.mjs +2 -0
- package/dist/chunk-QDMEM62U.mjs.map +1 -0
- package/dist/chunk-U3OXAO67.mjs +2 -0
- package/dist/chunk-U3OXAO67.mjs.map +1 -0
- package/dist/chunk-UZQV73X7.mjs +2 -0
- package/dist/chunk-UZQV73X7.mjs.map +1 -0
- package/dist/chunk-VXH2FAKV.cjs +2 -0
- package/dist/chunk-VXH2FAKV.cjs.map +1 -0
- package/dist/chunk-WOGK54HB.cjs +3 -0
- package/dist/chunk-WOGK54HB.cjs.map +1 -0
- package/dist/chunk-XMO2RCXB.cjs +2 -0
- package/dist/chunk-XMO2RCXB.cjs.map +1 -0
- package/dist/chunk-YBHHICTZ.mjs +2 -0
- package/dist/chunk-YBHHICTZ.mjs.map +1 -0
- package/dist/chunk-YJN4JEJU.cjs +2 -0
- package/dist/chunk-YJN4JEJU.cjs.map +1 -0
- package/dist/chunk-YRATJT7P.cjs +6 -0
- package/dist/chunk-YRATJT7P.cjs.map +1 -0
- package/dist/chunk-Z2G7DGDF.mjs +2 -0
- package/dist/chunk-Z2G7DGDF.mjs.map +1 -0
- package/dist/cli/bin.cjs +1 -1
- package/dist/cli/bin.mjs +1 -1
- package/dist/cli/index.cjs +1 -1
- package/dist/cli/index.mjs +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +35 -12
- package/dist/index.d.ts +35 -12
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/kanban/index.cjs +1 -1
- package/dist/kanban/index.mjs +1 -1
- package/dist/schema/index.cjs +1 -1
- package/dist/schema/index.mjs +1 -1
- package/dist/scrum/index.cjs +1 -1
- package/dist/scrum/index.d.cts +18 -3
- package/dist/scrum/index.d.ts +18 -3
- package/dist/scrum/index.mjs +1 -1
- package/dist/types.d.cts +23 -1
- package/dist/types.d.ts +23 -1
- package/dist/waterfall/index.cjs +1 -1
- package/dist/waterfall/index.d.cts +4 -1
- package/dist/waterfall/index.d.ts +4 -1
- package/dist/waterfall/index.mjs +1 -1
- package/package.json +1 -1
- package/dist/chunk-36M6OVUJ.mjs +0 -2
- package/dist/chunk-36M6OVUJ.mjs.map +0 -1
- package/dist/chunk-7KF5K3L7.cjs +0 -2
- package/dist/chunk-7KF5K3L7.cjs.map +0 -1
- package/dist/chunk-CWBH7H52.cjs +0 -2
- package/dist/chunk-CWBH7H52.cjs.map +0 -1
- package/dist/chunk-DXC2RSN5.cjs +0 -3
- package/dist/chunk-DXC2RSN5.cjs.map +0 -1
- package/dist/chunk-GATJZYTB.mjs +0 -2
- package/dist/chunk-GATJZYTB.mjs.map +0 -1
- package/dist/chunk-GFH2FEZH.mjs +0 -2
- package/dist/chunk-GFH2FEZH.mjs.map +0 -1
- package/dist/chunk-HHC5EZ54.cjs +0 -2
- package/dist/chunk-HHC5EZ54.cjs.map +0 -1
- package/dist/chunk-KSKEFYY7.cjs +0 -2
- package/dist/chunk-KSKEFYY7.cjs.map +0 -1
- package/dist/chunk-KUUIAKEJ.cjs +0 -2
- package/dist/chunk-KUUIAKEJ.cjs.map +0 -1
- package/dist/chunk-L2ZN6HEL.mjs +0 -2
- package/dist/chunk-L2ZN6HEL.mjs.map +0 -1
- package/dist/chunk-NDORREWR.mjs +0 -2
- package/dist/chunk-NDORREWR.mjs.map +0 -1
- package/dist/chunk-NZ2DIDOD.mjs +0 -2
- package/dist/chunk-NZ2DIDOD.mjs.map +0 -1
- package/dist/chunk-OHSQ52DW.mjs +0 -6
- package/dist/chunk-OHSQ52DW.mjs.map +0 -1
- package/dist/chunk-RSKZVOYC.cjs +0 -6
- package/dist/chunk-RSKZVOYC.cjs.map +0 -1
- package/dist/chunk-S22CPYXJ.mjs +0 -3
- package/dist/chunk-S22CPYXJ.mjs.map +0 -1
- package/dist/chunk-SHAPFMVP.mjs +0 -2
- package/dist/chunk-SHAPFMVP.mjs.map +0 -1
- package/dist/chunk-SJRRQZ3R.cjs +0 -2
- package/dist/chunk-SJRRQZ3R.cjs.map +0 -1
- package/dist/chunk-UM5X2JHB.cjs +0 -2
- package/dist/chunk-UM5X2JHB.cjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/schema/generated.ts","../src/schema/validate.ts","../src/schema/index.ts"],"names":["CORE_DEFINITIONS","SCRUM_DEFINITIONS","KANBAN_DEFINITIONS","WATERFALL_DEFINITIONS","DEFS","kindOf","v","isType","t","show","s","esc","key","same","a","b","err","path","keyword","message","expected","found","resolve","ref","root","fail","name","def","rank","errors","branchPath","own","e","collapse","branches","first","candidate","consts","c","validate","schema","value","walk","out","types","items","i","obj","prop","at","known","best","failed","branch","merged","assertValid","what","more","DRAFT_07","document","definitions","workflowStateSchema","roleSchema","newItemSchema","itemPatchSchema","handoffSchema","scrumConfigSchema","kanbanConfigSchema","waterfallConfigSchema"],"mappings":"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","file":"chunk-WOGK54HB.cjs","sourcesContent":["// GENERATED by scripts/gen-schema.mjs from src/types.ts and src/{scrum,kanban,waterfall}/config.ts.\n// Do not edit. Run `pnpm schema:gen`; `pnpm schema:check` fails the build when this file is stale.\nimport type { JsonSchema } from \"./types.ts\";\n\nexport const CORE_DEFINITIONS: Record<string, JsonSchema> = {\n Accounting: {\n type: \"object\",\n properties: {\n item: {\n type: \"string\",\n },\n role: {\n type: \"string\",\n },\n model: {\n type: \"string\",\n },\n tokensIn: {\n type: \"number\",\n },\n tokensOut: {\n type: \"number\",\n },\n durationMs: {\n type: \"number\",\n },\n startedAt: {\n type: \"string\",\n },\n endedAt: {\n type: \"string\",\n },\n estimate: {\n type: \"boolean\",\n },\n },\n required: [\n \"item\",\n \"role\",\n \"model\",\n \"tokensIn\",\n \"tokensOut\",\n \"durationMs\",\n \"startedAt\",\n \"endedAt\",\n ],\n additionalProperties: false,\n },\n Baseline: {\n type: \"object\",\n properties: {\n phase: {\n type: \"string\",\n },\n version: {\n type: \"number\",\n },\n at: {\n type: \"string\",\n },\n approvedBy: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n itemSnapshot: {\n type: \"object\",\n additionalProperties: {\n $ref: \"#/definitions/WorkItem\",\n },\n },\n },\n required: [\"phase\", \"version\", \"at\", \"approvedBy\", \"itemSnapshot\"],\n additionalProperties: false,\n },\n Blocker: {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n },\n reason: {\n type: \"string\",\n },\n owner: {\n type: \"string\",\n },\n raisedAt: {\n type: \"string\",\n },\n clearedAt: {\n type: \"string\",\n },\n },\n required: [\"id\", \"reason\", \"owner\", \"raisedAt\"],\n additionalProperties: false,\n },\n Budget: {\n type: \"object\",\n properties: {\n tokens: {\n type: \"number\",\n },\n turns: {\n type: \"number\",\n },\n wallclockMs: {\n type: \"number\",\n },\n },\n additionalProperties: false,\n },\n Capability: {\n type: \"string\",\n enum: [\n \"order-backlog\",\n \"define-acceptance\",\n \"facilitate\",\n \"deliver\",\n \"review\",\n \"verify\",\n \"approve-gate\",\n \"manage-flow\",\n \"control-change\",\n \"escalate\",\n ],\n },\n ClassOfService: {\n type: \"string\",\n enum: [\"expedite\", \"fixed-date\", \"standard\", \"intangible\"],\n },\n Event: {\n type: \"object\",\n properties: {\n seq: {\n type: \"number\",\n },\n at: {\n type: \"string\",\n },\n type: {\n type: \"string\",\n },\n by: {\n type: \"string\",\n },\n payload: {},\n },\n required: [\"seq\", \"at\", \"type\", \"by\", \"payload\"],\n additionalProperties: false,\n },\n Evidence: {\n type: \"object\",\n properties: {\n kind: {\n type: \"string\",\n },\n ref: {\n type: \"string\",\n },\n by: {\n type: \"string\",\n },\n at: {\n type: \"string\",\n },\n },\n required: [\"kind\", \"ref\", \"by\", \"at\"],\n additionalProperties: false,\n },\n Gate: {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n },\n requires: {\n type: \"array\",\n items: {\n $ref: \"#/definitions/GateRequirement\",\n },\n },\n evidence: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n onFail: {\n anyOf: [\n {\n type: \"object\",\n properties: {\n action: {\n type: \"string\",\n const: \"block\",\n },\n },\n required: [\"action\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n action: {\n type: \"string\",\n const: \"return-to\",\n },\n stage: {\n type: \"string\",\n },\n },\n required: [\"action\", \"stage\"],\n additionalProperties: false,\n },\n ],\n },\n },\n required: [\"id\", \"requires\", \"evidence\", \"onFail\"],\n additionalProperties: false,\n },\n GateRequirement: {\n anyOf: [\n {\n type: \"string\",\n const: \"human\",\n },\n {\n type: \"object\",\n properties: {\n capability: {\n type: \"string\",\n },\n },\n required: [\"capability\"],\n additionalProperties: false,\n },\n ],\n },\n Handoff: {\n type: \"object\",\n properties: {\n item: {\n type: \"string\",\n },\n role: {\n type: \"string\",\n },\n produced: {\n type: \"array\",\n items: {\n type: \"object\",\n properties: {\n kind: {\n type: \"string\",\n },\n ref: {\n type: \"string\",\n },\n },\n required: [\"kind\", \"ref\"],\n additionalProperties: false,\n },\n },\n notes: {\n type: \"string\",\n },\n do_not: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n open_questions: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n verdict: {\n $ref: \"#/definitions/Verdict\",\n },\n follow_ups: {\n type: \"array\",\n items: {\n $ref: \"#/definitions/NewItem\",\n },\n },\n lessons: {\n type: \"array\",\n items: {\n type: \"object\",\n properties: {\n text: {\n type: \"string\",\n },\n scope: {\n type: \"string\",\n enum: [\"policy\", \"skill\", \"memory\", \"spec\", \"review\"],\n },\n },\n required: [\"text\", \"scope\"],\n additionalProperties: false,\n },\n },\n },\n required: [\"item\", \"role\", \"produced\", \"notes\", \"do_not\", \"open_questions\"],\n additionalProperties: false,\n },\n ImpactAnalysis: {\n type: \"object\",\n properties: {\n summary: {\n type: \"string\",\n },\n reopen: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n weight: {\n type: \"number\",\n },\n },\n required: [\"summary\", \"reopen\", \"weight\"],\n additionalProperties: false,\n },\n ItemPatch: {\n type: \"object\",\n properties: {\n type: {\n $ref: \"#/definitions/ItemType\",\n },\n title: {\n type: \"string\",\n },\n description: {\n type: \"string\",\n },\n dependsOn: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n priority: {\n type: \"number\",\n },\n weight: {\n type: \"number\",\n },\n deadline: {\n type: \"string\",\n },\n classOfService: {\n $ref: \"#/definitions/ClassOfService\",\n },\n role: {\n type: \"string\",\n },\n parent: {\n type: \"string\",\n },\n acceptance: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n iteration: {\n type: \"string\",\n },\n traces: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n tags: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n affects: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n phase: {\n type: \"string\",\n },\n impactAnalysis: {\n $ref: \"#/definitions/ImpactAnalysis\",\n },\n },\n additionalProperties: false,\n },\n ItemStatus: {\n type: \"string\",\n enum: [\"todo\", \"in_progress\", \"blocked\", \"review\", \"awaiting_human\", \"done\", \"dropped\"],\n },\n ItemType: {\n type: \"string\",\n enum: [\"epic\", \"story\", \"task\", \"bug\", \"change-request\", \"deliverable\", \"question\"],\n },\n Iteration: {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n },\n goal: {\n type: \"string\",\n },\n budget: {\n $ref: \"#/definitions/Budget\",\n },\n spent: {\n $ref: \"#/definitions/Spent\",\n },\n startedAt: {\n type: \"string\",\n },\n endedAt: {\n type: \"string\",\n },\n committed: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n carryover: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n outcome: {\n type: \"string\",\n enum: [\"completed\", \"cancelled\"],\n },\n closing: {\n type: \"boolean\",\n },\n },\n required: [\"id\", \"goal\", \"budget\", \"spent\", \"startedAt\", \"committed\", \"carryover\"],\n additionalProperties: false,\n },\n Lesson: {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n },\n at: {\n type: \"string\",\n },\n text: {\n type: \"string\",\n },\n scope: {\n type: \"string\",\n enum: [\"policy\", \"skill\", \"memory\", \"spec\", \"review\"],\n },\n status: {\n type: \"string\",\n enum: [\"raised\", \"adopted\", \"dismissed\"],\n },\n from: {\n type: \"string\",\n },\n item: {\n type: \"string\",\n },\n suggestedChange: {\n $ref: \"#/definitions/LessonChange\",\n },\n },\n required: [\"id\", \"at\", \"text\", \"scope\", \"status\"],\n additionalProperties: false,\n },\n LessonChange: {\n anyOf: [\n {\n type: \"object\",\n properties: {\n kind: {\n type: \"string\",\n const: \"agreement\",\n },\n text: {\n type: \"string\",\n },\n replaces: {\n type: \"string\",\n },\n },\n required: [\"kind\", \"text\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n kind: {\n type: \"string\",\n const: \"dod\",\n },\n policy: {\n $ref: \"#/definitions/Policy\",\n },\n },\n required: [\"kind\", \"policy\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n kind: {\n type: \"string\",\n const: \"backlog\",\n },\n item: {\n $ref: \"#/definitions/NewItem\",\n },\n },\n required: [\"kind\", \"item\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n kind: {\n type: \"string\",\n const: \"skill\",\n },\n note: {\n type: \"string\",\n },\n },\n required: [\"kind\", \"note\"],\n additionalProperties: false,\n },\n ],\n },\n MethodologyName: {\n type: \"string\",\n enum: [\"scrum\", \"kanban\", \"waterfall\"],\n },\n ModelTier: {\n type: \"string\",\n enum: [\"small\", \"medium\", \"large\"],\n },\n NewItem: {\n type: \"object\",\n additionalProperties: false,\n properties: {\n stage: {\n type: \"string\",\n },\n type: {\n $ref: \"#/definitions/ItemType\",\n },\n description: {\n type: \"string\",\n },\n dependsOn: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n priority: {\n type: \"number\",\n },\n weight: {\n type: \"number\",\n },\n deadline: {\n type: \"string\",\n },\n classOfService: {\n $ref: \"#/definitions/ClassOfService\",\n },\n role: {\n type: \"string\",\n },\n parent: {\n type: \"string\",\n },\n acceptance: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n iteration: {\n type: \"string\",\n },\n traces: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n tags: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n affects: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n phase: {\n type: \"string\",\n },\n impactAnalysis: {\n $ref: \"#/definitions/ImpactAnalysis\",\n },\n id: {\n type: \"string\",\n },\n title: {\n type: \"string\",\n },\n },\n required: [\"id\", \"title\"],\n },\n PendingHuman: {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n },\n kind: {\n type: \"string\",\n enum: [\"gate\", \"decision\"],\n },\n item: {\n type: \"string\",\n },\n gate: {\n type: \"string\",\n },\n question: {\n type: \"string\",\n },\n raisedAt: {\n type: \"string\",\n },\n },\n required: [\"id\", \"kind\", \"question\", \"raisedAt\"],\n additionalProperties: false,\n },\n Phase: {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n },\n name: {\n type: \"string\",\n },\n deliverables: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n gate: {\n $ref: \"#/definitions/Gate\",\n },\n status: {\n type: \"string\",\n enum: [\"pending\", \"open\", \"baselined\", \"reopened\"],\n },\n budget: {\n $ref: \"#/definitions/Budget\",\n },\n produced: {\n type: \"array\",\n items: {\n $ref: \"#/definitions/Produced\",\n },\n },\n },\n required: [\"id\", \"name\", \"deliverables\", \"gate\", \"status\"],\n additionalProperties: false,\n },\n Policy: {\n anyOf: [\n {\n type: \"object\",\n properties: {\n kind: {\n type: \"string\",\n const: \"evidence\",\n },\n evidenceKind: {\n type: \"string\",\n },\n },\n required: [\"kind\", \"evidenceKind\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n kind: {\n type: \"string\",\n const: \"acceptance-written\",\n },\n },\n required: [\"kind\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n kind: {\n type: \"string\",\n const: \"estimate-present\",\n },\n },\n required: [\"kind\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n kind: {\n type: \"string\",\n const: \"no-open-blockers\",\n },\n },\n required: [\"kind\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n kind: {\n type: \"string\",\n const: \"dependencies-done\",\n },\n },\n required: [\"kind\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n kind: {\n type: \"string\",\n const: \"custom\",\n },\n id: {\n type: \"string\",\n },\n description: {\n type: \"string\",\n },\n },\n required: [\"kind\", \"id\", \"description\"],\n additionalProperties: false,\n },\n ],\n },\n Produced: {\n type: \"object\",\n properties: {\n kind: {\n type: \"string\",\n },\n ref: {\n type: \"string\",\n },\n by: {\n type: \"string\",\n },\n at: {\n type: \"string\",\n },\n },\n required: [\"kind\", \"ref\", \"by\", \"at\"],\n additionalProperties: false,\n },\n Role: {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n },\n name: {\n type: \"string\",\n },\n modelTier: {\n $ref: \"#/definitions/ModelTier\",\n },\n resourceClass: {\n type: \"string\",\n },\n maxConcurrent: {\n type: \"number\",\n },\n capabilities: {\n type: \"array\",\n items: {\n $ref: \"#/definitions/Capability\",\n },\n },\n canApprove: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n inputs: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n outputs: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n do_not: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n constraints: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n },\n required: [\n \"id\",\n \"name\",\n \"modelTier\",\n \"capabilities\",\n \"canApprove\",\n \"inputs\",\n \"outputs\",\n \"do_not\",\n ],\n additionalProperties: false,\n },\n Spent: {\n type: \"object\",\n properties: {\n tokens: {\n type: \"number\",\n },\n turns: {\n type: \"number\",\n },\n wallclockMs: {\n type: \"number\",\n },\n },\n required: [\"tokens\", \"turns\", \"wallclockMs\"],\n additionalProperties: false,\n },\n Stage: {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n },\n name: {\n type: \"string\",\n },\n wipLimit: {\n type: \"number\",\n },\n entryPolicy: {\n type: \"array\",\n items: {\n $ref: \"#/definitions/Policy\",\n },\n },\n exitPolicy: {\n type: \"array\",\n items: {\n $ref: \"#/definitions/Policy\",\n },\n },\n gate: {\n $ref: \"#/definitions/Gate\",\n },\n commitmentPoint: {\n type: \"boolean\",\n },\n deliveryPoint: {\n type: \"boolean\",\n },\n review: {\n type: \"boolean\",\n },\n },\n required: [\"id\", \"name\", \"entryPolicy\", \"exitPolicy\"],\n additionalProperties: false,\n },\n Transition: {\n type: \"object\",\n properties: {\n from: {\n type: \"object\",\n properties: {\n stage: {\n type: \"string\",\n },\n status: {\n $ref: \"#/definitions/ItemStatus\",\n },\n },\n required: [\"stage\", \"status\"],\n additionalProperties: false,\n },\n to: {\n type: \"object\",\n properties: {\n stage: {\n type: \"string\",\n },\n status: {\n $ref: \"#/definitions/ItemStatus\",\n },\n },\n required: [\"stage\", \"status\"],\n additionalProperties: false,\n },\n at: {\n type: \"string\",\n },\n by: {\n type: \"string\",\n },\n },\n required: [\"from\", \"to\", \"at\", \"by\"],\n additionalProperties: false,\n },\n Verdict: {\n type: \"string\",\n enum: [\"done\", \"blocked\", \"needs-review\", \"rework\", \"escalate\"],\n },\n WorkItem: {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n },\n type: {\n $ref: \"#/definitions/ItemType\",\n },\n title: {\n type: \"string\",\n },\n description: {\n type: \"string\",\n },\n dependsOn: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n priority: {\n type: \"number\",\n },\n weight: {\n type: \"number\",\n },\n deadline: {\n type: \"string\",\n },\n classOfService: {\n $ref: \"#/definitions/ClassOfService\",\n },\n stage: {\n type: \"string\",\n },\n status: {\n $ref: \"#/definitions/ItemStatus\",\n },\n role: {\n type: \"string\",\n },\n parent: {\n type: \"string\",\n },\n acceptance: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n evidence: {\n type: \"array\",\n items: {\n $ref: \"#/definitions/Evidence\",\n },\n },\n blockers: {\n type: \"array\",\n items: {\n $ref: \"#/definitions/Blocker\",\n },\n },\n transitions: {\n type: \"array\",\n items: {\n $ref: \"#/definitions/Transition\",\n },\n },\n iteration: {\n type: \"string\",\n },\n traces: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n tags: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n affects: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n phase: {\n type: \"string\",\n },\n impactAnalysis: {\n $ref: \"#/definitions/ImpactAnalysis\",\n },\n },\n required: [\n \"id\",\n \"type\",\n \"title\",\n \"dependsOn\",\n \"stage\",\n \"status\",\n \"acceptance\",\n \"evidence\",\n \"blockers\",\n \"transitions\",\n ],\n additionalProperties: false,\n },\n WorkflowState: {\n type: \"object\",\n properties: {\n version: {\n type: \"number\",\n const: 1,\n },\n methodology: {\n $ref: \"#/definitions/MethodologyName\",\n },\n config: {},\n items: {\n type: \"object\",\n additionalProperties: {\n $ref: \"#/definitions/WorkItem\",\n },\n },\n stages: {\n type: \"array\",\n items: {\n $ref: \"#/definitions/Stage\",\n },\n },\n roles: {\n type: \"object\",\n additionalProperties: {\n $ref: \"#/definitions/Role\",\n },\n },\n iterations: {\n type: \"array\",\n items: {\n $ref: \"#/definitions/Iteration\",\n },\n },\n phases: {\n type: \"array\",\n items: {\n $ref: \"#/definitions/Phase\",\n },\n },\n baseline: {\n $ref: \"#/definitions/Baseline\",\n },\n baselines: {\n type: \"array\",\n items: {\n $ref: \"#/definitions/Baseline\",\n },\n },\n events: {\n type: \"array\",\n items: {\n $ref: \"#/definitions/Event\",\n },\n },\n accounting: {\n type: \"array\",\n items: {\n $ref: \"#/definitions/Accounting\",\n },\n },\n pending: {\n type: \"array\",\n items: {\n $ref: \"#/definitions/PendingHuman\",\n },\n },\n lessons: {\n type: \"array\",\n items: {\n $ref: \"#/definitions/Lesson\",\n },\n },\n agreements: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n },\n required: [\n \"version\",\n \"methodology\",\n \"config\",\n \"items\",\n \"stages\",\n \"roles\",\n \"iterations\",\n \"events\",\n \"accounting\",\n \"pending\",\n \"lessons\",\n \"agreements\",\n ],\n additionalProperties: false,\n },\n};\n\nexport const SCRUM_DEFINITIONS: Record<string, JsonSchema> = {\n Budget: {\n type: \"object\",\n properties: {\n tokens: {\n type: \"number\",\n },\n turns: {\n type: \"number\",\n },\n wallclockMs: {\n type: \"number\",\n },\n },\n additionalProperties: false,\n },\n EstimateMode: {\n type: \"string\",\n enum: [\"per-weight\", \"per-call\"],\n },\n Policy: {\n anyOf: [\n {\n type: \"object\",\n properties: {\n kind: {\n type: \"string\",\n const: \"evidence\",\n },\n evidenceKind: {\n type: \"string\",\n },\n },\n required: [\"kind\", \"evidenceKind\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n kind: {\n type: \"string\",\n const: \"acceptance-written\",\n },\n },\n required: [\"kind\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n kind: {\n type: \"string\",\n const: \"estimate-present\",\n },\n },\n required: [\"kind\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n kind: {\n type: \"string\",\n const: \"no-open-blockers\",\n },\n },\n required: [\"kind\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n kind: {\n type: \"string\",\n const: \"dependencies-done\",\n },\n },\n required: [\"kind\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n kind: {\n type: \"string\",\n const: \"custom\",\n },\n id: {\n type: \"string\",\n },\n description: {\n type: \"string\",\n },\n },\n required: [\"kind\", \"id\", \"description\"],\n additionalProperties: false,\n },\n ],\n },\n ScrumConfig: {\n type: \"object\",\n properties: {\n sprintBudget: {\n $ref: \"#/definitions/Budget\",\n },\n productGoal: {\n type: \"string\",\n },\n definitionOfDone: {\n type: \"array\",\n items: {\n $ref: \"#/definitions/Policy\",\n },\n },\n refinementSharePct: {\n type: \"number\",\n },\n allowMidSprintAdd: {\n type: \"string\",\n enum: [\"never\", \"po-only\", \"any\"],\n },\n inProgressWipLimit: {\n type: \"number\",\n },\n autoClose: {\n type: \"boolean\",\n },\n estimateMode: {\n $ref: \"#/definitions/EstimateMode\",\n },\n fallbackTokensPerWeight: {\n type: \"number\",\n },\n },\n required: [\n \"sprintBudget\",\n \"productGoal\",\n \"definitionOfDone\",\n \"refinementSharePct\",\n \"allowMidSprintAdd\",\n ],\n additionalProperties: false,\n },\n};\n\nexport const KANBAN_DEFINITIONS: Record<string, JsonSchema> = {\n ClassConfig: {\n type: \"object\",\n properties: {\n wipBypass: {\n type: \"number\",\n },\n sle: {\n $ref: \"#/definitions/ServiceLevel\",\n },\n },\n additionalProperties: false,\n },\n KanbanColumn: {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n },\n name: {\n type: \"string\",\n },\n wipLimit: {\n type: \"number\",\n },\n policies: {\n type: \"array\",\n items: {\n $ref: \"#/definitions/Policy\",\n },\n },\n commitmentPoint: {\n type: \"boolean\",\n },\n deliveryPoint: {\n type: \"boolean\",\n },\n review: {\n type: \"boolean\",\n },\n },\n required: [\"id\", \"name\", \"policies\"],\n additionalProperties: false,\n },\n KanbanConfig: {\n type: \"object\",\n properties: {\n columns: {\n type: \"array\",\n items: {\n $ref: \"#/definitions/KanbanColumn\",\n },\n },\n classesOfService: {\n type: \"object\",\n properties: {\n expedite: {\n $ref: \"#/definitions/ClassConfig\",\n },\n \"fixed-date\": {\n $ref: \"#/definitions/ClassConfig\",\n },\n standard: {\n $ref: \"#/definitions/ClassConfig\",\n },\n intangible: {\n $ref: \"#/definitions/ClassConfig\",\n },\n },\n additionalProperties: false,\n },\n fairness: {\n type: \"object\",\n properties: {\n aging: {\n type: \"boolean\",\n },\n maxDeferralRounds: {\n type: \"number\",\n },\n },\n required: [\"aging\", \"maxDeferralRounds\"],\n additionalProperties: false,\n },\n cadences: {\n type: \"object\",\n properties: {\n replenishment: {\n type: \"object\",\n properties: {\n everyTurns: {\n type: \"number\",\n },\n },\n additionalProperties: false,\n },\n \"delivery-planning\": {\n type: \"object\",\n properties: {\n everyTurns: {\n type: \"number\",\n },\n },\n additionalProperties: false,\n },\n \"service-delivery-review\": {\n type: \"object\",\n properties: {\n everyTurns: {\n type: \"number\",\n },\n },\n additionalProperties: false,\n },\n \"operations-review\": {\n type: \"object\",\n properties: {\n everyTurns: {\n type: \"number\",\n },\n },\n additionalProperties: false,\n },\n \"risk-review\": {\n type: \"object\",\n properties: {\n everyTurns: {\n type: \"number\",\n },\n },\n additionalProperties: false,\n },\n \"strategy-review\": {\n type: \"object\",\n properties: {\n everyTurns: {\n type: \"number\",\n },\n },\n additionalProperties: false,\n },\n },\n additionalProperties: false,\n },\n throughputWindowMs: {\n type: \"number\",\n },\n maxExpedite: {\n type: \"number\",\n },\n },\n required: [\n \"columns\",\n \"classesOfService\",\n \"fairness\",\n \"cadences\",\n \"throughputWindowMs\",\n \"maxExpedite\",\n ],\n additionalProperties: false,\n },\n Policy: {\n anyOf: [\n {\n type: \"object\",\n properties: {\n kind: {\n type: \"string\",\n const: \"evidence\",\n },\n evidenceKind: {\n type: \"string\",\n },\n },\n required: [\"kind\", \"evidenceKind\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n kind: {\n type: \"string\",\n const: \"acceptance-written\",\n },\n },\n required: [\"kind\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n kind: {\n type: \"string\",\n const: \"estimate-present\",\n },\n },\n required: [\"kind\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n kind: {\n type: \"string\",\n const: \"no-open-blockers\",\n },\n },\n required: [\"kind\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n kind: {\n type: \"string\",\n const: \"dependencies-done\",\n },\n },\n required: [\"kind\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n kind: {\n type: \"string\",\n const: \"custom\",\n },\n id: {\n type: \"string\",\n },\n description: {\n type: \"string\",\n },\n },\n required: [\"kind\", \"id\", \"description\"],\n additionalProperties: false,\n },\n ],\n },\n ServiceLevel: {\n type: \"object\",\n properties: {\n percentile: {\n type: \"number\",\n },\n targetMs: {\n type: \"number\",\n },\n },\n required: [\"percentile\", \"targetMs\"],\n additionalProperties: false,\n },\n};\n\nexport const WATERFALL_DEFINITIONS: Record<string, JsonSchema> = {\n Budget: {\n type: \"object\",\n properties: {\n tokens: {\n type: \"number\",\n },\n turns: {\n type: \"number\",\n },\n wallclockMs: {\n type: \"number\",\n },\n },\n additionalProperties: false,\n },\n Gate: {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n },\n requires: {\n type: \"array\",\n items: {\n $ref: \"#/definitions/GateRequirement\",\n },\n },\n evidence: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n onFail: {\n anyOf: [\n {\n type: \"object\",\n properties: {\n action: {\n type: \"string\",\n const: \"block\",\n },\n },\n required: [\"action\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n action: {\n type: \"string\",\n const: \"return-to\",\n },\n stage: {\n type: \"string\",\n },\n },\n required: [\"action\", \"stage\"],\n additionalProperties: false,\n },\n ],\n },\n },\n required: [\"id\", \"requires\", \"evidence\", \"onFail\"],\n additionalProperties: false,\n },\n GateRequirement: {\n anyOf: [\n {\n type: \"string\",\n const: \"human\",\n },\n {\n type: \"object\",\n properties: {\n capability: {\n type: \"string\",\n },\n },\n required: [\"capability\"],\n additionalProperties: false,\n },\n ],\n },\n WaterfallConfig: {\n type: \"object\",\n properties: {\n phases: {\n type: \"array\",\n items: {\n $ref: \"#/definitions/WaterfallPhaseConfig\",\n },\n },\n changeControl: {\n type: \"object\",\n properties: {\n requiresImpactAnalysis: {\n type: \"boolean\",\n },\n approvers: {\n type: \"array\",\n items: {\n $ref: \"#/definitions/GateRequirement\",\n },\n },\n },\n required: [\"requiresImpactAnalysis\", \"approvers\"],\n additionalProperties: false,\n },\n traceability: {\n type: \"object\",\n properties: {\n from: {\n type: \"string\",\n },\n to: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n },\n required: [\"from\", \"to\"],\n additionalProperties: false,\n },\n humanGates: {\n anyOf: [\n {\n type: \"string\",\n const: \"all\",\n },\n {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n ],\n },\n fallbackTokensPerWeight: {\n type: \"number\",\n },\n },\n required: [\"phases\", \"changeControl\", \"traceability\", \"humanGates\"],\n additionalProperties: false,\n },\n WaterfallPhaseConfig: {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n },\n name: {\n type: \"string\",\n },\n deliverables: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n gate: {\n $ref: \"#/definitions/Gate\",\n },\n budget: {\n $ref: \"#/definitions/Budget\",\n },\n deliverBy: {\n type: \"string\",\n },\n },\n required: [\"id\", \"name\", \"deliverables\", \"gate\"],\n additionalProperties: false,\n },\n};\n","import { fail } from \"../errors.ts\";\nimport type { JsonSchema, SchemaError } from \"./types.ts\";\n\nconst DEFS = \"#/definitions/\";\n\nfunction kindOf(v: unknown): string {\n if (v === null) return \"null\";\n if (Array.isArray(v)) return \"array\";\n return typeof v;\n}\nfunction isType(t: string, v: unknown): boolean {\n if (t === \"integer\") return typeof v === \"number\" && Number.isInteger(v);\n return kindOf(v) === t;\n}\nfunction show(v: unknown): string {\n const s = JSON.stringify(v);\n if (s === undefined) return String(v);\n return s.length > 60 ? `${s.slice(0, 57)}...` : s;\n}\n/** JSON-pointer escaping for one key. */\nfunction esc(key: string): string {\n return key.replace(/~/g, \"~0\").replace(/\\//g, \"~1\");\n}\nfunction same(a: unknown, b: unknown): boolean {\n return JSON.stringify(a) === JSON.stringify(b);\n}\nfunction err(\n path: string,\n keyword: string,\n message: string,\n expected: string,\n found: string,\n): SchemaError {\n return { path: path === \"\" ? \"/\" : path, keyword, message, expected, found };\n}\n\nfunction resolve(ref: string, root: JsonSchema): JsonSchema {\n if (!ref.startsWith(DEFS))\n fail(\n \"invalid-input\",\n `schema $ref ${JSON.stringify(ref)} is not #/definitions/<name>`,\n \"regenerate the schema with pnpm schema:gen\",\n );\n const name = ref.slice(DEFS.length);\n const def =\n root.definitions && Object.hasOwn(root.definitions, name) ? root.definitions[name] : undefined;\n if (!def)\n fail(\n \"invalid-input\",\n `schema $ref ${JSON.stringify(ref)} names no definition`,\n \"regenerate the schema with pnpm schema:gen\",\n );\n return def;\n}\n\n/**\n * Misfit of one anyOf branch (lower is a better fit): a `type` error at the branch's own path (the value is the\n * wrong kind entirely) weighs 1000, a `const` mismatch (a discriminator) 100, anything else 1.\n */\nfunction rank(errors: SchemaError[], branchPath: string): number {\n const own = branchPath === \"\" ? \"/\" : branchPath;\n return errors.reduce(\n (n, e) => n + (e.keyword === \"type\" && e.path === own ? 1000 : e.keyword === \"const\" ? 100 : 1),\n 0,\n );\n}\n\n/** When every failed branch has a `const` error at one pointer (the discriminator), report that once as an enum. */\nfunction collapse(branches: SchemaError[][]): SchemaError | undefined {\n const first = branches[0]?.filter((e) => e.keyword === \"const\") ?? [];\n for (const candidate of first) {\n const consts = branches.map((b) =>\n b.find((e) => e.keyword === \"const\" && e.path === candidate.path),\n );\n if (consts.some((c) => c === undefined)) continue;\n const expected = [...new Set(consts.map((c) => c?.expected))].join(\" | \");\n return {\n path: candidate.path,\n keyword: \"enum\",\n message: `expected one of ${expected}`,\n expected,\n found: candidate.found,\n };\n }\n return undefined;\n}\n\n/** Validate `value` against `schema` (a document: `$ref`s resolve against its `definitions`). Returns every error found. */\nexport function validate(schema: JsonSchema, value: unknown): SchemaError[] {\n return walk(schema, value, schema, \"\");\n}\n\nfunction walk(schema: JsonSchema, value: unknown, root: JsonSchema, path: string): SchemaError[] {\n if (schema.$ref !== undefined) return walk(resolve(schema.$ref, root), value, root, path);\n const out: SchemaError[] = [];\n if (schema.type !== undefined) {\n const types = Array.isArray(schema.type) ? schema.type : [schema.type];\n if (!types.some((t) => isType(t, value))) {\n const expected = types.join(\" | \");\n return [\n err(path, \"type\", `expected ${expected}, got ${kindOf(value)}`, expected, show(value)),\n ];\n }\n }\n if (schema.const !== undefined && !same(value, schema.const))\n out.push(err(path, \"const\", `expected ${show(schema.const)}`, show(schema.const), show(value)));\n if (schema.enum !== undefined && !schema.enum.some((e) => same(e, value))) {\n const expected = schema.enum.map(show).join(\" | \");\n out.push(err(path, \"enum\", `expected one of ${expected}`, expected, show(value)));\n }\n if (typeof value === \"number\") {\n if (schema.minimum !== undefined && value < schema.minimum)\n out.push(\n err(path, \"minimum\", `expected >= ${schema.minimum}`, `>= ${schema.minimum}`, show(value)),\n );\n if (schema.maximum !== undefined && value > schema.maximum)\n out.push(\n err(path, \"maximum\", `expected <= ${schema.maximum}`, `<= ${schema.maximum}`, show(value)),\n );\n }\n if (typeof value === \"string\") {\n if (schema.minLength !== undefined && value.length < schema.minLength)\n out.push(\n err(\n path,\n \"minLength\",\n `expected at least ${schema.minLength} characters`,\n `length >= ${schema.minLength}`,\n show(value),\n ),\n );\n if (schema.pattern !== undefined && !new RegExp(schema.pattern, \"u\").test(value))\n out.push(\n err(\n path,\n \"pattern\",\n `expected to match /${schema.pattern}/`,\n `/${schema.pattern}/`,\n show(value),\n ),\n );\n }\n if (Array.isArray(value) && schema.items !== undefined) {\n const items = schema.items;\n value.forEach((v, i) => out.push(...walk(items, v, root, `${path}/${i}`)));\n }\n if (kindOf(value) === \"object\") {\n const obj = value as Record<string, unknown>;\n for (const [key, v] of Object.entries(obj)) {\n const prop =\n schema.properties && Object.hasOwn(schema.properties, key)\n ? schema.properties[key]\n : undefined;\n const at = `${path}/${esc(key)}`;\n if (prop) out.push(...walk(prop, v, root, at));\n else if (schema.additionalProperties === false) {\n const known = Object.keys(schema.properties ?? {}).join(\", \");\n out.push(\n err(\n at,\n \"additionalProperties\",\n `unknown property ${JSON.stringify(key)}`,\n known ? `one of ${known}` : \"no properties\",\n key,\n ),\n );\n } else if (typeof schema.additionalProperties === \"object\")\n out.push(...walk(schema.additionalProperties, v, root, at));\n }\n for (const key of schema.required ?? [])\n if (!Object.hasOwn(obj, key))\n out.push(\n err(\n `${path}/${esc(key)}`,\n \"required\",\n `missing required property ${JSON.stringify(key)}`,\n \"present\",\n \"absent\",\n ),\n );\n }\n if (schema.anyOf !== undefined) {\n let best: SchemaError[] | undefined;\n const failed: SchemaError[][] = [];\n for (const branch of schema.anyOf) {\n const errors = walk(branch, value, root, path);\n if (errors.length === 0) {\n best = [];\n break;\n }\n failed.push(errors);\n if (best === undefined || rank(errors, path) < rank(best, path)) best = errors;\n }\n const merged = best && best.length > 0 ? collapse(failed) : undefined;\n if (merged) out.push(merged);\n else if (best) out.push(...best);\n }\n return out;\n}\n\n/** Throw WorkflowError(\"invalid-input\") describing the first problem when `value` does not match `schema`. */\nexport function assertValid(schema: JsonSchema, value: unknown, what: string): void {\n const errors = validate(schema, value);\n const first = errors[0];\n if (!first) return;\n const more = errors.length > 1 ? ` (+${errors.length - 1} more)` : \"\";\n fail(\n \"invalid-input\",\n `${what} does not match its schema: ${first.path} ${first.message}${more}`,\n `fix ${what} at ${first.path}: expected ${first.expected}, found ${first.found}`,\n );\n}\n","import {\n CORE_DEFINITIONS,\n KANBAN_DEFINITIONS,\n SCRUM_DEFINITIONS,\n WATERFALL_DEFINITIONS,\n} from \"./generated.ts\";\nimport type { JsonSchema, JsonSchemaDocument } from \"./types.ts\";\n\nexport const DRAFT_07 = \"http://json-schema.org/draft-07/schema#\";\n\nfunction document(name: string, definitions: Record<string, JsonSchema>): JsonSchemaDocument {\n return { $schema: DRAFT_07, $ref: `#/definitions/${name}`, definitions };\n}\n\n/** `.workflow/state.json` */\nexport const workflowStateSchema = document(\"WorkflowState\", CORE_DEFINITIONS);\n/** a role manifest (`.workflow/roles/*.json`, `exwf role add`) */\nexport const roleSchema = document(\"Role\", CORE_DEFINITIONS);\n/** `exwf add <item.json>` */\nexport const newItemSchema = document(\"NewItem\", CORE_DEFINITIONS);\n/** `exwf edit <id> <patch.json>` */\nexport const itemPatchSchema = document(\"ItemPatch\", CORE_DEFINITIONS);\n/** `exwf complete <id> <handoff.json>` */\nexport const handoffSchema = document(\"Handoff\", CORE_DEFINITIONS);\n/** `exwf init scrum --config` / the scrum-master policy.json */\nexport const scrumConfigSchema = document(\"ScrumConfig\", SCRUM_DEFINITIONS);\nexport const kanbanConfigSchema = document(\"KanbanConfig\", KANBAN_DEFINITIONS);\nexport const waterfallConfigSchema = document(\"WaterfallConfig\", WATERFALL_DEFINITIONS);\n\nexport { validate, assertValid } from \"./validate.ts\";\nexport type { JsonSchema, JsonSchemaDocument, SchemaError } from \"./types.ts\";\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunkS3BXVHO7_cjs=require('./chunk-S3BXVHO7.cjs'),exFlow=require('ex-flow');function S(t){return t??new Date().toISOString()}function Y(t){let e=new Set;for(let o of t.stages)e.has(o.id)&&chunkS3BXVHO7_cjs.b("config-invalid",`duplicate stage id "${o.id}"`,"give every stage a unique id"),e.add(o.id);let n={};for(let o of t.roles)chunkS3BXVHO7_cjs.c(o.id,"role id"),Object.hasOwn(n,o.id)&&chunkS3BXVHO7_cjs.b("duplicate-role",`duplicate role id "${o.id}"`,"give every role a unique id"),n[o.id]=o;let i=S(t.now);return {version:1,methodology:t.methodology,config:t.config,items:{},stages:t.stages,roles:n,iterations:[],events:[{seq:1,at:i,type:"state.created",by:"system",payload:{methodology:t.methodology}}],accounting:[],pending:[],lessons:[],agreements:[]}}function m(t,e,n,i,o){let s={seq:(t.events[t.events.length-1]?.seq??0)+1,at:S(o),type:e,by:n,payload:i};return {...t,events:[...t.events,s]}}function Ce(t,e){for(let n=t.events.length-1;n>=0;n--){let i=t.events[n];if(e===void 0||i.type===e)return i}}function P(t,e){return Object.hasOwn(t.roles,e)?t.roles[e]:void 0}var ke=new Set(["in_progress","review","blocked"]);function Pe(t,e,n,i){chunkS3BXVHO7_cjs.c(e.id,"role id"),P(t,e.id)&&chunkS3BXVHO7_cjs.b("duplicate-role",`role "${e.id}" already exists`,`use a different id or retireRole("${e.id}") first`);let o={...t,roles:{...t.roles,[e.id]:e}};return m(o,"role.registered",n,{role:e.id,capabilities:e.capabilities},i)}function qe(t,e,n,i){P(t,e)||chunkS3BXVHO7_cjs.b("unknown-role",`role "${e}" does not exist`,`registered roles: ${Object.keys(t.roles).join(", ")||"(none)"}`);let o=Object.values(t.items).filter(s=>s.role===e&&ke.has(s.status)).map(s=>s.id);o.length&&chunkS3BXVHO7_cjs.b("role-has-open-items",`role "${e}" still holds ${o.length} open item(s)`,`complete or reassign ${o.join(", ")} before retiring the role`,{items:o});let r={...t.roles};return delete r[e],m({...t,roles:r},"role.retired",n,{role:e},i)}function G(t,e){return t.capabilities.includes(e)}function F(t,e){return Object.values(t.roles).filter(n=>G(n,e))}function q(t,e,n,i){return Object.values(t.roles).filter(o=>o.id!==i&&o.canApprove.includes(e)&&(n===void 0||o.capabilities.includes(n))).map(o=>o.id)}function Be(t,e){return F(t,"approve-gate").filter(n=>n.canApprove.includes(e))}function ee(t,e,n){for(let i of e)F(t,i).length===0&&chunkS3BXVHO7_cjs.b("missing-capability",`no registered role has capability "${i}"`,`register a role whose capabilities include "${i}" (registerRole) before init`);for(let i of n){let o=F(t,i);o.length>1&&chunkS3BXVHO7_cjs.b("exclusive-capability",`capability "${i}" must belong to exactly one role but is held by ${o.map(r=>r.id).join(", ")}`,`remove "${i}" from all but one role`);}}function te(t,e){return e.length===0?[]:Object.values(t.roles).filter(n=>e.every(i=>G(n,i)))}function we(t,e,...n){if(e==="human")return true;let i=P(t,e);return !!i&&n.some(o=>G(i,o))}function Ne(t,e,...n){if(!we(t,e,...n)){let i=Object.values(t.roles).filter(o=>n.some(r=>G(o,r))).map(o=>o.id);chunkS3BXVHO7_cjs.b("missing-capability",`"${e}" lacks capability ${n.map(o=>`"${o}"`).join(" or ")}`,`run this as one of: human${i.map(o=>`, ${o}`).join("")}`);}}function H(t,e){let n=t.stages.find(i=>i.id===e);return n||chunkS3BXVHO7_cjs.b("unknown-stage",`stage "${e}" does not exist`,`stages are: ${t.stages.map(i=>i.id).join(" \u2192 ")}`),n}function he(t,e){let n=t.stages.findIndex(i=>i.id===e);return n<0&&H(t,e),t.stages[n+1]}function ye(t,e){return t.stages[t.stages.length-1]?.id===e}function B(t,e){return {...t,items:{...t.items,[e.id]:e}}}function ve(t,e,n){return B(t,n(j(t,e)))}function xe(t,e,n){return ve(t,e,i=>{let o={...i};for(let r of n)delete o[r];return o})}function j(t,e){let n=Object.hasOwn(t.items,e)?t.items[e]:void 0;return n||chunkS3BXVHO7_cjs.b("unknown-item",`item "${e}" does not exist`,`add it with addItem first; known items: ${Object.keys(t.items).join(", ")||"(none)"}`,{items:[e]}),n}function V(t,e,n){let i=e.filter(o=>!Object.hasOwn(t.items,o));i.length&&chunkS3BXVHO7_cjs.b("unknown-item",`${n} refers to unknown item(s) ${i.join(", ")}`,"add those items first or remove the reference",{items:i});}function Fe(t,e,n,i){chunkS3BXVHO7_cjs.c(e.id,"item id"),Object.hasOwn(t.items,e.id)&&chunkS3BXVHO7_cjs.b("duplicate-item",`item "${e.id}" already exists`,"use editItem to change it, or pick a new id",{items:[e.id]});let o=t.stages[0];o||chunkS3BXVHO7_cjs.b("config-invalid","state has no stages","create the state with at least one stage");let r=e.stage??o.id;H(t,r),V(t,e.dependsOn??[],`item "${e.id}".dependsOn`),e.affects&&V(t,e.affects,`item "${e.id}".affects`),e.parent!==void 0&&V(t,[e.parent],`item "${e.id}".parent`),e.role!==void 0&&!Object.hasOwn(t.roles,e.role)&&chunkS3BXVHO7_cjs.b("unknown-role",`role "${e.role}" does not exist`,`registered roles: ${Object.keys(t.roles).join(", ")}`);let{stage:s,...a}=e,l={type:"task",acceptance:[],dependsOn:[],...a,id:e.id,title:e.title,stage:r,status:"todo",evidence:[],blockers:[],transitions:[]},c=B(t,l);return m(c,"item.added",n,{id:l.id,type:l.type,stage:l.stage,weight:l.weight??null,priority:l.priority??null,phase:l.phase??null,parent:l.parent??null},i)}function Ve(t,e,n,i,o){let r=j(t,e);n.dependsOn&&V(t,n.dependsOn,`item "${e}".dependsOn`),n.affects&&V(t,n.affects,`item "${e}".affects`),n.parent!==void 0&&V(t,[n.parent],`item "${e}".parent`),n.role!==void 0&&!Object.hasOwn(t.roles,n.role)&&chunkS3BXVHO7_cjs.b("unknown-role",`role "${n.role}" does not exist`,`registered roles: ${Object.keys(t.roles).join(", ")}`);let s=Object.keys(n).filter(c=>JSON.stringify(n[c])!==JSON.stringify(r[c]));s.length===0&&chunkS3BXVHO7_cjs.b("no-op",`editItem("${e}") changes nothing`,"pass at least one field with a different value",{items:[e]});let a={...r};for(let c of s)a[c]=n[c];let l=B(t,a);return m(l,"item.edited",i,{id:e,changed:s},o)}function M(t,e,n,i,o){let r=j(t,e),s=n.stage??r.stage;H(t,s),(r.status==="done"||r.status==="dropped")&&chunkS3BXVHO7_cjs.b("invalid-transition",`item "${e}" is ${r.status} and cannot move`,"create a new item (or a change-request) instead of reopening a finished one",{items:[e]}),s===r.stage&&n.status===r.status&&chunkS3BXVHO7_cjs.b("no-op",`item "${e}" is already ${r.status} in "${s}"`,"choose a different stage or status",{items:[e]});let a=S(o),l={...r,stage:s,status:n.status,transitions:[...r.transitions,{from:{stage:r.stage,status:r.status},to:{stage:s,status:n.status},at:a,by:i}]},c=B(t,l);return m(c,"item.transition",i,{id:e,from:{stage:r.stage,status:r.status},to:{stage:s,status:n.status}},a)}function K(t,e){let n=0,i=false;for(let o=t.events.length-1;o>=0;o--){let r=t.events[o];if(r.payload?.id===e.id){if(r.type==="item.rework"){i=true;break}r.type==="item.evidence"&&n++;}}return i?e.evidence.slice(Math.max(0,e.evidence.length-n)):e.evidence}function He(t,e,n,i){let o=j(t,e),r=S(i),s={...o,evidence:[...o.evidence,{...n,at:r}]},a=B(t,s);return m(a,"item.evidence",n.by,{id:e,kind:n.kind,ref:n.ref},r)}function oe(t,e,n,i,o,r){let s=j(t,e),a=S(r),l=`${e}-b${s.blockers.length+1}`,c=s.status==="blocked"?null:{from:{stage:s.stage,status:s.status},to:{stage:s.stage,status:"blocked"},at:a,by:o},p={...s,status:"blocked",blockers:[...s.blockers,{id:l,reason:n,owner:i,raisedAt:a}],transitions:c?[...s.transitions,c]:s.transitions},g=B(t,p);return m(g,"blocker.raised",o,{id:e,blocker:l,reason:n,owner:i,transition:c&&{from:c.from,to:c.to}},a)}function ne(t,e){for(let n=t.transitions.length-1;n>=0;n--){let i=t.transitions[n];if(i.to.status===e)return i}}function Le(t,e,n,i,o,r){let s=j(t,e),a=s.blockers.findIndex(x=>x.id===n&&!x.clearedAt);a<0&&chunkS3BXVHO7_cjs.b("invalid-input",`item "${e}" has no open blocker "${n}"`,`open blockers: ${s.blockers.filter(x=>!x.clearedAt).map(x=>x.id).join(", ")||"(none)"}`,{items:[e]});let l=S(o),c=s.blockers.map((x,D)=>D===a?{...x,clearedAt:l}:x),p=c.some(x=>!x.clearedAt),g=ne(s,"blocked")?.from.status??"todo",u=s.stage,k=g,y=false;g==="in_progress"?(k="todo",u=ne(s,"in_progress")?.from.stage??s.stage):g==="awaiting_human"&&(k=H(t,s.stage).review?"review":"todo",y=true);let{role:W,...R}=s,v=p?null:{from:{stage:s.stage,status:"blocked"},to:{stage:u,status:k},at:l,by:i},E={...y&&!p?R:s,blockers:c,stage:p?s.stage:u,status:p?"blocked":k,transitions:v?[...s.transitions,v]:s.transitions},N=B(t,E);return m(N,"blocker.cleared",i,{id:e,blocker:n,transition:v&&{from:v.from,to:v.to},note:r??null},l)}function Q(t,e){return xe(t,e,["role"])}function ie(t,e,n,i,o){let r=j(t,e),s=he(t,r.stage);if(!s)return M(t,e,{status:"done"},n,o);if(ye(t,s.id))return M(t,e,{stage:s.id,status:"done"},n,o);let a=i||s.review===true?"review":"todo";return Q(M(t,e,{stage:s.id,status:a},n,o),e)}var Se=t=>t.agreements.length===0?"(none)":t.agreements.map(e=>`"${e}"`).join(", ");function re(t,e,n){return chunkS3BXVHO7_cjs.b("invalid-input",`no working agreement ${JSON.stringify(e)} to ${n}`,`current agreements: ${Se(t)}; name one of them exactly`)}function Ze(t,e,n,i){if(e.replaces===e.text)return t;let o=t;return e.replaces!==void 0&&((typeof e.replaces!="string"||!o.agreements.includes(e.replaces))&&re(o,e.replaces,"replace"),o={...o,agreements:o.agreements.filter(r=>r!==e.replaces)},o=m(o,"agreement.retired",n,{text:e.replaces,replacedBy:e.text},i)),o.agreements.includes(e.text)||(o={...o,agreements:[...o.agreements,e.text]}),o}function ze(t,e,n,i){(typeof e!="string"||!t.agreements.includes(e))&&re(t,e,"retire");let o={...t,agreements:t.agreements.filter(r=>r!==e)};return m(o,"agreement.retired",n,{text:e,replacedBy:null},i)}function U(t,e,n){let i=[],o=K(t,e),r=(s,a,l)=>i.push({rule:s,severity:"error",item:e.id,message:a,fix:l});for(let s of n)switch(s.kind){case "evidence":o.some(a=>a.kind===s.evidenceKind)||r("policy:evidence",`item "${e.id}" has no evidence of kind "${s.evidenceKind}"`,`attach evidence { kind: "${s.evidenceKind}" } via addEvidence or in the handoff.produced`);break;case "acceptance-written":e.acceptance.length===0&&r("policy:acceptance-written",`item "${e.id}" has no acceptance criteria`,"editItem with a non-empty acceptance[] (needs define-acceptance)");break;case "estimate-present":e.weight===void 0&&r("policy:estimate-present",`item "${e.id}" has no weight`,"editItem with a weight (story points)");break;case "no-open-blockers":{let a=e.blockers.filter(l=>!l.clearedAt);a.length&&r("policy:no-open-blockers",`item "${e.id}" has ${a.length} open blocker(s)`,`clearBlocker ${a.map(l=>l.id).join(", ")}`);break}case "dependencies-done":{let a=e.dependsOn.filter(l=>t.items[l]?.status!=="done");a.length&&r("policy:dependencies-done",`item "${e.id}" depends on unfinished ${a.join(", ")}`,`finish ${a.join(", ")} first`);break}case "custom":o.some(a=>a.kind===`policy:${s.id}`)||r(`policy:custom:${s.id}`,`item "${e.id}" has not satisfied "${s.description}"`,`attach evidence { kind: "policy:${s.id}" } when it is satisfied`);break}return i}function Ye(t,e,n,i){let o=U(t,e,n);o.length&&chunkS3BXVHO7_cjs.b("policy-unmet",`item "${e.id}" cannot ${i}: ${o.length} polic${o.length===1?"y":"ies"} unmet`,o.map(r=>r.fix).join("; "),{items:[e.id]});}function be(t,e){let n=new Map(t.stages.map((o,r)=>[o.id,r])),i=n.get(e.stage);if(i!==void 0)for(let o=e.transitions.length-1;o>=0;o--){let r=e.transitions[o],s=n.get(r.from.stage);if(r.to.status==="in_progress"&&s!==void 0&&s<i)return r}}function L(t,e){let n=be(t,e);if(n)return n.by;for(let i=e.transitions.length-1;i>=0;i--){let o=e.transitions[i];if(o.to.status==="in_progress")return o.by}}function $e(t,e,n,i){let o=[],r=K(t,e);for(let a of n.evidence)r.some(l=>l.kind===a)||o.push({rule:"gate:evidence",severity:"error",item:e.id,message:`gate "${n.id}" needs evidence "${a}" on item "${e.id}"`,fix:`attach evidence { kind: "${a}" } before approving`});if(o.length)return {outcome:"fail",violations:o};let s=false;for(let a of n.requires){if(a==="human"){i!=="human"&&(s=true);continue}if(!q(t,n.id,a.capability).includes(i)){o.push({rule:"gate:capability",severity:"error",item:e.id,message:`"${i}" may not approve gate "${n.id}" (needs capability "${a.capability}" and canApprove "${n.id}")`,fix:`approve as one of: ${q(t,n.id,a.capability).join(", ")||"(no role qualifies; register one)"}`});continue}let c=L(t,e);if(c!==void 0&&c===i){let p=q(t,n.id,a.capability,i);o.push({rule:"conflict-of-interest",severity:"error",item:e.id,message:`role "${i}" did the work on "${e.id}" and may not approve it`,fix:`approve as a different role: ${p.join(", ")||"(register another approver)"}`});}}return o.length?{outcome:"fail",violations:o}:s?{outcome:"human"}:{outcome:"pass"}}function rt(t,e,n){let i=S(n),o=`p${t.events.filter(a=>a.type==="pending.raised").length+1}`,r={...e,id:o,raisedAt:i},s={...t,pending:[...t.pending,r]};return e.item&&j(s,e.item).status!=="awaiting_human"&&(s=M(s,e.item,{status:"awaiting_human"},"system",i)),m(s,"pending.raised","system",{id:o,kind:e.kind,item:e.item??null,gate:e.gate??null},i)}function st(t,e,n,i,o,r,s){n!=="approve"&&n!=="reject"&&chunkS3BXVHO7_cjs.b("invalid-input",`decision must be "approve" or "reject" (got ${JSON.stringify(n)})`,"pass approve or reject");let a=t.pending.find(u=>u.id===e);a||chunkS3BXVHO7_cjs.b("unknown-pending",`no pending decision "${e}"`,`open decisions: ${t.pending.map(u=>u.id).join(", ")||"(none)"}`);let l=a.kind==="gate"&&a.item?j(t,a.item):void 0,c=l&&(t.stages.find(u=>a.gate!==void 0&&u.gate?.id===a.gate)?.gate??t.stages.find(u=>u.id===l.stage)?.gate);l&&c&&i!=="human"&&(c.requires.includes("human")?void 0:$e(t,l,c,i))?.outcome!=="pass"&&chunkS3BXVHO7_cjs.b("gate-unmet",`"${i}" may not decide gate "${c.id}" on "${l.id}"`,`decide as one of: human${c.requires.flatMap(k=>k==="human"?[]:q(t,c.id,k.capability)).map(k=>`, ${k}`).join("")}`,{items:[l.id],rule:"gate"});let p=S(r),g={...t,pending:t.pending.filter(u=>u.id!==e)};if(g=m(g,"pending.decided",i,{id:e,decision:n,note:o,item:a.item??null,gate:a.gate??null},p),l){let u=l.id,k=a.gate??c?.id??null;if(n==="approve"){let y=false;for(let W=t.events.length-1;W>=0;W--){let R=t.events[W];if(!(R.type!=="item.completed"||R.payload.id!==u)){y=R.payload.verdict==="needs-review";break}}g=ie(g,u,i,y,p),g=m(g,"gate.passed",i,{item:u,gate:k},p);}else {let y=c?.onFail??{action:"block"};y.action==="return-to"?g=Q(M(g,u,{stage:y.stage,status:"todo"},i,p),u):g=oe(g,u,`gate "${k??"?"}" rejected: ${o||"no reason given"}`,i,i,p),g=m(g,"gate.failed",i,{item:u,gate:k,note:o},p);}}return s?.afterDecide&&(g=s.afterDecide(g,a,n,i,o,p)),g}var lt={tokens:0,turns:0,wallclockMs:0};function dt(t,e){return {tokens:t.tokens+e.tokensIn+e.tokensOut,turns:t.turns+1,wallclockMs:t.wallclockMs+e.durationMs}}function se(t,e){let n={};return t.tokens!==void 0&&(n.tokens=Math.max(0,t.tokens-e.tokens)),t.turns!==void 0&&(n.turns=Math.max(0,t.turns-e.turns)),t.wallclockMs!==void 0&&(n.wallclockMs=Math.max(0,t.wallclockMs-e.wallclockMs)),n}function ct(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 ae(t,e,n=2e4,i="per-weight"){let o=e??1,r=[];for(let l of t.accounting){if(l.estimate===true)continue;let c=l.tokensIn+l.tokensOut;if(i==="per-call"){r.push(c);continue}let p=t.items[l.item]?.weight;p===void 0||p<=0||r.push(c/p);}if(r.length===0)return i==="per-call"?n:n*o;r.sort((l,c)=>l-c);let s=Math.floor(r.length/2),a=r.length%2?r[s]:(r[s-1]+r[s])/2;return Math.round(i==="per-call"?a:a*o)}function Z(t){return t.iterations.find(e=>e.endedAt===void 0)}function de(t,e,n){if(e.role){let r=P(t,e.role);return r||chunkS3BXVHO7_cjs.b("unknown-role",`item "${e.id}" is assigned to unknown role "${e.role}"`,"editItem with an existing role id"),r}let i=n?n(e):void 0;if(i!==void 0){let r=P(t,i);return r||chunkS3BXVHO7_cjs.b("unknown-role",`the methodology picked unknown role "${i}" for item "${e.id}"`,`registered roles: ${Object.keys(t.roles).join(", ")||"(none)"}`,{items:[e.id]}),r}if(e.status==="review"){let r=L(t,e),s=F(t,"review"),l=s.find(c=>c.id!==r)??(s.length===1?s[0]:void 0);return l||chunkS3BXVHO7_cjs.b("missing-capability",`no role has capability "review" for item "${e.id}"`,"register a role with capability review",{items:[e.id]}),l}let o=F(t,"deliver")[0];return o||chunkS3BXVHO7_cjs.b("missing-capability",`no role has capability "deliver" for item "${e.id}"`,"register a role with capability deliver",{items:[e.id]}),o}function le(t){let e={};for(let n of Object.values(t.roles))n.maxConcurrent!==void 0&&(e[n.resourceClass??n.id]=n.maxConcurrent);return e}function Ie(t,e,n,i){let o=new Set(t.map(r=>r.id));return t.map(r=>{let s=de(e,r,i),a={id:r.id,data:{id:r.id},dependsOn:r.dependsOn.filter(c=>o.has(c)),resourceClass:s.resourceClass??s.id},l=n?n(r):r.priority;return l!==void 0&&(a.priority=l),r.weight!==void 0&&(a.weight=r.weight),r.deadline!==void 0&&(a.deadline=Date.parse(r.deadline)),a})}function vt(t,e,n={}){let i=S(n.now),o=e.candidates(t),r=o.filter(d=>d.dependsOn.every(w=>t.items[w]?.status==="done"||o.some(b=>b.id===w))),s=o.filter(d=>d.dependsOn.every(w=>t.items[w]?.status==="done"));if(r.length===0)return {state:t,dispatched:[],skipped:[],reason:Z(t)?.closing?"budget-exhausted":"no-candidates"};let a=e.plannerOptions(t),l={schedulerMode:a.schedulerMode,resourceCaps:le(t)};if(a.concurrencyCap!==void 0&&(l.concurrencyCap=a.concurrencyCap),a.fairnessPolicy!==void 0&&(l.fairnessPolicy=a.fairnessPolicy),a.maxDeferralRounds!==void 0&&(l.maxDeferralRounds=a.maxDeferralRounds),a.deadlineStrategy!==void 0&&(l.deadlineStrategy=a.deadlineStrategy),a.weightStrategy!==void 0&&(l.weightStrategy=a.weightStrategy),a.tieBreaker!==void 0){let d=a.tieBreaker;l.tieBreaker=(w,b)=>d(t.items[w.data.id],t.items[b.data.id]);}let c,p;try{let d=new exFlow.ExFlow(l);for(let b of Ie(r,t,a.priorityOf,a.roleFor))d.addEntity(b);let w=d.resolveExecutionDetails();c=(w.plan.batches[0]??[]).map(b=>b.id),p=w.metrics;}catch(d){throw d instanceof exFlow.ExFlowRuntimeError&&chunkS3BXVHO7_cjs.b("planner-error",`ex-flow refused the graph: [${d.code}] ${d.message}`,"fix the item graph (cycles, duplicate ids) with editItem; see diagnostics in the message",{items:r.map(w=>w.id)}),d}let g=c.map(d=>t.items[d]).filter(d=>d.dependsOn.every(w=>t.items[w]?.status==="done")),u=Object.values(t.items).filter(d=>d.status==="in_progress"),k=new Set(a.wipCounts??["in_progress"]),y=Object.values(t.items).filter(d=>k.has(d.status)),W={};for(let d of u){let w=d.role?P(t,d.role):void 0,b=w?w.resourceClass??w.id:"?";W[b]=(W[b]??0)+1;}let R=le(t),v=Z(t),E=v?se(v.budget,v.spent):{},N=E.tokens,x=v?Object.values(t.items).filter(d=>(d.iteration===v.id||v.committed.includes(d.id))&&d.status==="in_progress").length:0,D=E.turns===void 0?void 0:E.turns-x,ue=E.wallclockMs!==void 0&&E.wallclockMs<=0,pe=a.estimateMode??"per-weight",ge=n.fallbackTokensPerWeight??a.fallbackTokensPerWeight,me=Math.min(n.max??1/0,a.concurrencyCap??1/0),C=[],O=[],h,$=t;for(let d of g){if(C.length>=me){h="wip-full";break}let w=typeof a.dispatchStage=="function"?a.dispatchStage(d):a.dispatchStage,b=d.status==="todo"&&w!==void 0?w:d.stage,T=H(t,b),X=d.type==="question"?[]:U(t,d,T.entryPolicy);if(X.length>0){O.push({id:d.id,reason:"entry-policy",detail:X.map(I=>I.message).join("; ")});continue}let z=a.wipLimitOf?a.wipLimitOf(T,d):T.wipLimit;if(z!==void 0&&y.filter(I=>I.stage===T.id&&I.id!==d.id).length+C.filter(I=>I.stage===T.id).length>=z){h="wip-full",O.push({id:d.id,reason:"wip",detail:`stage "${T.id}" is at its WIP limit of ${z}`});continue}let J=de(t,d,a.roleFor),A=J.resourceClass??J.id;if(R[A]!==void 0&&(W[A]??0)>=R[A]){h="wip-full",O.push({id:d.id,reason:"resource-cap",detail:`resource class "${A}" is at its cap of ${R[A]}`});continue}if(D!==void 0&&D<=0){h="budget-exhausted",O.push({id:d.id,reason:"budget",detail:`turns budget spent: ${v.spent.turns} used + ${x+C.length} in flight of ${v.budget.turns}`});continue}if(ue){h="budget-exhausted",O.push({id:d.id,reason:"budget",detail:"wall-clock budget spent"});continue}if(N!==void 0){let I=ae(t,d.weight,ge,pe);if(I>N){h="budget-exhausted",O.push({id:d.id,reason:"budget",detail:`needs about ${I} tokens, ${N} left in the iteration`});continue}N-=I;}W[A]=(W[A]??0)+1,D!==void 0&&(D-=1),$=M($,d.id,{stage:b,status:"in_progress"},J.id,i),$={...$,items:{...$.items,[d.id]:{...$.items[d.id],role:J.id}}},C.push($.items[d.id]);}return h===void 0&&O.some(d=>d.reason==="entry-policy")&&(h="policy-blocked"),h===void 0&&C.length<s.length&&(h="wip-full"),C.length===0&&h===void 0&&(h="no-candidates"),$=m($,"planner.resolved","planner",{dispatched:C.map(d=>d.id),reason:h??null,skipped:O,metrics:p},i),h?{state:$,dispatched:C,skipped:O,reason:h}:{state:$,dispatched:C,skipped:O}}function ce(t){return [{id:"separation-lost",severity:"warning",check(i,o){return o.type!=="init"&&o.type!=="role.register"?[]:te(i,t.requiredCapabilities).map(r=>({rule:"separation-lost",severity:"warning",message:`role "${r.id}" holds every required capability (${t.requiredCapabilities.join(", ")}); no separation of duties`,fix:"fine for a solo operator; otherwise split capabilities across roles"}))}},{id:"conflict-of-interest",severity:"error",check(i,o){if(o.type!=="complete")return [];let r=o.payload?.handoff;if(!r)return [];let s=r.verdict??"done";if(s!=="done"&&s!=="needs-review")return [];let a=i.items[r.item];if(!a)return [];let l=i.stages.find(p=>p.id===a.stage)?.gate;if(!l||!l.requires.some(p=>p!=="human"))return [];if(L(i,a)!==r.role)return [];let c=q(i,l.id,void 0,r.role);return [{rule:"conflict-of-interest",severity:"error",item:a.id,message:`role "${r.role}" authored "${a.id}" and may not pass gate "${l.id}" on it`,fix:`hand the gate to another approver: ${c.join(", ")||"(register one)"}`}]}}]}function je(t,e,n){let i=[];for(let o of [...ce(e),...e.rules])i.push(...o.check(t,n));return i}function fe(t,e,n,i){let o=je(t,e,n),r=o.filter(s=>s.severity==="error");return r.length&&chunkS3BXVHO7_cjs.b("rule-violation",`${n.type} violates ${r.map(s=>s.rule).join(", ")}: ${r.map(s=>s.message).join("; ")}`,r.map(s=>s.fix).join("; "),{rule:r[0].rule,items:r.map(s=>s.item).filter(s=>!!s)}),{state:i(t),warnings:o.filter(s=>s.severity==="warning")}}function Ct(t){let e=t.methodology,n=e.validateConfig(t.config),i=t.stages??e.defaultStages(n),o=t.roles??e.defaultRoles(n),r=t.now!==void 0?{methodology:e.name,config:n,stages:i,roles:o,now:t.now}:{methodology:e.name,config:n,stages:i,roles:o},s=Y(r);return ee(s,e.requiredCapabilities,e.exclusiveCapabilities),fe(s,e,{type:"init",by:t.by??"system"},a=>a)}function Mt(t,e,n,i,o){(typeof n!="object"||n===null||Array.isArray(n)||Object.keys(n).length===0)&&chunkS3BXVHO7_cjs.b("invalid-input","config patch must be a non-empty object",'pass e.g. { "sprintBudget": { "tokens": 1500000 } } to exwf config set');let r=Z(t);r&&chunkS3BXVHO7_cjs.b("invalid-input",`config cannot change while ${r.id} is open`,"close it first (exwf ceremony review or cancel; a waterfall phase closes at its gate), then run exwf config set");let s=(e.lockedConfigKeys??[]).filter(u=>Object.hasOwn(n,u));s.length&&chunkS3BXVHO7_cjs.b("invalid-input",`config key(s) ${s.join(", ")} cannot change after init`,e.name==="kanban"?"use the service-delivery-review cadence for columns and classes of service":"start a new workflow with exwf init to change them");let a=t.config??{},l=e.validateConfig({...a,...n}),c=Object.keys(n).filter(u=>!Object.hasOwn(l,u));c.length&&chunkS3BXVHO7_cjs.b("invalid-input",`unknown config key(s) ${c.join(", ")}`,`known keys: ${Object.keys(l).join(", ")}`);let p=Object.keys(n).filter(u=>JSON.stringify(a[u])!==JSON.stringify(l[u]));p.length===0&&chunkS3BXVHO7_cjs.b("no-op","config patch changes nothing","pass at least one key with a different value to exwf config set");let g=u=>Object.fromEntries(p.map(k=>[k,u[k]]));return fe(t,e,{type:"config.change",by:i,payload:{patch:n}},u=>{let k=S(o),y=m({...u,config:l},"config.changed",i,{changed:p,before:g(a),after:g(l)},k);return e.afterConfigChange&&(y=e.afterConfigChange(y,k)),y})}exports.A=Le;exports.B=Q;exports.C=ie;exports.D=Ze;exports.E=ze;exports.F=U;exports.G=Ye;exports.H=be;exports.I=L;exports.J=$e;exports.K=rt;exports.L=st;exports.M=lt;exports.N=dt;exports.O=se;exports.P=ct;exports.Q=ae;exports.R=Z;exports.S=de;exports.T=le;exports.U=Ie;exports.V=vt;exports.W=ce;exports.X=je;exports.Y=fe;exports.Z=Ct;exports._=Mt;exports.a=S;exports.b=Y;exports.c=m;exports.d=Ce;exports.e=P;exports.f=Pe;exports.g=qe;exports.h=G;exports.i=F;exports.j=q;exports.k=Be;exports.l=ee;exports.m=te;exports.n=we;exports.o=Ne;exports.p=H;exports.q=he;exports.r=ye;exports.s=ve;exports.t=xe;exports.u=j;exports.v=Fe;exports.w=Ve;exports.x=M;exports.y=He;exports.z=oe;//# sourceMappingURL=chunk-XMO2RCXB.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-XMO2RCXB.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/state.ts","../src/roles.ts","../src/items.ts","../src/agreements.ts","../src/policies.ts","../src/gates.ts","../src/budget.ts","../src/planner.ts","../src/rules.ts","../src/methodology.ts"],"names":["nowOf","now","createState","input","seenStages","st","fail","roles","r","assertId","at","appendEvent","state","type","by","payload","ev","lastEvent","i","roleOf","id","OPEN","registerRole","role","next","retireRole","roleId","open","hasCapability","cap","rolesWith","approverIds","gateId","except","approversFor","requireCapabilities","required","exclusive","holders","separationLost","c","canDo","caps","requireCap","h","stageOf","stageId","s","nextStageOf","idx","isTerminalStage","putItem","item","patchItem","fn","getItem","stripItemFields","keys","copy","k","it","assertKnownItems","ids","what","missing","d","addItem","firstStage","_s","rest","editItem","patch","changed","updated","moveItem","to","toStage","freshEvidence","after","found","addEvidence","evidence","raiseBlocker","reason","owner","blockerId","t","lastTransitionTo","status","clearBlocker","note","b","blockers","stillBlocked","prev","toStatus","dropRole","_r","noRole","clearRole","itemId","advanceItem","wantsReview","listed","a","absent","text","applyAgreement","change","retireAgreement","evaluatePolicies","policies","out","fresh","v","rule","message","fix","p","e","notDone","assertPolicies","context","unmet","u","lastDispatchBefore","order","here","from","authorOf","before","checkGate","gate","violations","kind","needsHuman","req","author","others","raisePending","pending","entry","decide","pendingId","decision","methodology","item0","q","onFail","ZERO_SPENT","addSpent","spent","acc","remaining","budget","isExhausted","estimateTokens","weight","fallbackPerWeight","mode","w","samples","total","iw","x","y","mid","median","openIteration","assignRole","roleFor","picked","reviewers","resourceCapsFor","toExNodes","items","priorityOf","present","node","pr","plan","opts","all","candidates","readyAll","po","options","tb","firstBatch","metrics","flow","ExFlow","n","details","ExFlowRuntimeError","ready","inProgress","wipCounts","occupying","perClass","cls","iteration","left","tokensLeft","inFlight","turnsLeft","clockOut","estimateMode","fallback","limit","dispatched","skipped","pulledTo","target","stage","limitHere","est","coreRulesFor","action","handoff","verdict","validateAction","applyAction","reduce","errors","init","m","config","stages","stateInput","changeConfig","locked","unknown","pick","o","s2"],"mappings":"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","file":"chunk-XMO2RCXB.cjs","sourcesContent":["import { assertId, fail } from \"./errors.ts\";\nimport type { Event, MethodologyName, Role, Stage, WorkflowState } from \"./types.ts\";\n\nexport function nowOf(now?: string): string {\n return now ?? new Date().toISOString();\n}\n\nexport interface CreateStateInput {\n methodology: MethodologyName;\n config: unknown;\n stages: Stage[];\n roles: Role[];\n now?: string;\n}\n\nexport function createState(input: CreateStateInput): WorkflowState {\n const seenStages = new Set<string>();\n for (const st of input.stages) {\n if (seenStages.has(st.id))\n fail(\"config-invalid\", `duplicate stage id \"${st.id}\"`, \"give every stage a unique id\");\n seenStages.add(st.id);\n }\n const roles: Record<string, Role> = {};\n for (const r of input.roles) {\n assertId(r.id, \"role id\");\n if (Object.hasOwn(roles, r.id))\n fail(\"duplicate-role\", `duplicate role id \"${r.id}\"`, \"give every role a unique id\");\n roles[r.id] = r;\n }\n const at = nowOf(input.now);\n return {\n version: 1,\n methodology: input.methodology,\n config: input.config,\n items: {},\n stages: input.stages,\n roles,\n iterations: [],\n events: [\n {\n seq: 1,\n at,\n type: \"state.created\",\n by: \"system\",\n payload: { methodology: input.methodology },\n },\n ],\n accounting: [],\n pending: [],\n lessons: [],\n agreements: [],\n };\n}\n\nexport function appendEvent(\n state: WorkflowState,\n type: string,\n by: string,\n payload: unknown,\n now?: string,\n): WorkflowState {\n const last = state.events[state.events.length - 1];\n const ev: Event = { seq: (last?.seq ?? 0) + 1, at: nowOf(now), type, by, payload };\n return { ...state, events: [...state.events, ev] };\n}\n\nexport function lastEvent(state: WorkflowState, type?: string): Event | undefined {\n for (let i = state.events.length - 1; i >= 0; i--) {\n const ev = state.events[i]!;\n if (type === undefined || ev.type === type) return ev;\n }\n return undefined;\n}\n","import { assertId, fail } from \"./errors.ts\";\nimport { appendEvent } from \"./state.ts\";\nimport type { Capability, Role, WorkflowState } from \"./types.ts\";\n\n/** Own-property role lookup (ids such as \"constructor\" never hit the prototype). */\nexport function roleOf(state: WorkflowState, id: string): Role | undefined {\n return Object.hasOwn(state.roles, id) ? state.roles[id] : undefined;\n}\n\nconst OPEN: ReadonlySet<string> = new Set([\"in_progress\", \"review\", \"blocked\"]);\n\nexport function registerRole(\n state: WorkflowState,\n role: Role,\n by: string,\n now?: string,\n): WorkflowState {\n assertId(role.id, \"role id\");\n if (roleOf(state, role.id))\n fail(\n \"duplicate-role\",\n `role \"${role.id}\" already exists`,\n `use a different id or retireRole(\"${role.id}\") first`,\n );\n const next = { ...state, roles: { ...state.roles, [role.id]: role } };\n return appendEvent(\n next,\n \"role.registered\",\n by,\n { role: role.id, capabilities: role.capabilities },\n now,\n );\n}\n\nexport function retireRole(\n state: WorkflowState,\n roleId: string,\n by: string,\n now?: string,\n): WorkflowState {\n if (!roleOf(state, roleId))\n fail(\n \"unknown-role\",\n `role \"${roleId}\" does not exist`,\n `registered roles: ${Object.keys(state.roles).join(\", \") || \"(none)\"}`,\n );\n const open = Object.values(state.items)\n .filter((i) => i.role === roleId && OPEN.has(i.status))\n .map((i) => i.id);\n if (open.length)\n fail(\n \"role-has-open-items\",\n `role \"${roleId}\" still holds ${open.length} open item(s)`,\n `complete or reassign ${open.join(\", \")} before retiring the role`,\n { items: open },\n );\n const roles = { ...state.roles };\n delete roles[roleId];\n return appendEvent({ ...state, roles }, \"role.retired\", by, { role: roleId }, now);\n}\n\nexport function hasCapability(role: Role, cap: Capability): boolean {\n return role.capabilities.includes(cap);\n}\n\nexport function rolesWith(state: WorkflowState, cap: Capability): Role[] {\n return Object.values(state.roles).filter((r) => hasCapability(r, cap));\n}\n\n/** Ids of roles that may approve `gateId`, optionally holding `cap` and excluding one id. */\nexport function approverIds(\n state: WorkflowState,\n gateId: string,\n cap?: string,\n except?: string,\n): string[] {\n return Object.values(state.roles)\n .filter(\n (r) =>\n r.id !== except &&\n r.canApprove.includes(gateId) &&\n (cap === undefined || (r.capabilities as readonly string[]).includes(cap)),\n )\n .map((r) => r.id);\n}\n\nexport function approversFor(state: WorkflowState, gateId: string): Role[] {\n return rolesWith(state, \"approve-gate\").filter((r) => r.canApprove.includes(gateId));\n}\n\nexport function requireCapabilities(\n state: WorkflowState,\n required: Capability[],\n exclusive: Capability[],\n): void {\n for (const cap of required) {\n if (rolesWith(state, cap).length === 0) {\n fail(\n \"missing-capability\",\n `no registered role has capability \"${cap}\"`,\n `register a role whose capabilities include \"${cap}\" (registerRole) before init`,\n );\n }\n }\n for (const cap of exclusive) {\n const holders = rolesWith(state, cap);\n if (holders.length > 1) {\n fail(\n \"exclusive-capability\",\n `capability \"${cap}\" must belong to exactly one role but is held by ${holders.map((r) => r.id).join(\", \")}`,\n `remove \"${cap}\" from all but one role`,\n );\n }\n }\n}\n\nexport function separationLost(state: WorkflowState, required: Capability[]): Role[] {\n if (required.length === 0) return [];\n return Object.values(state.roles).filter((r) => required.every((c) => hasCapability(r, c)));\n}\n\n/** `human` may do anything; a role must hold at least one of `caps`; unknown ids may do nothing. */\nexport function canDo(state: WorkflowState, by: string, ...caps: Capability[]): boolean {\n if (by === \"human\") return true;\n const role = roleOf(state, by);\n return !!role && caps.some((c) => hasCapability(role, c));\n}\n\nexport function requireCap(state: WorkflowState, by: string, ...caps: Capability[]): void {\n if (!canDo(state, by, ...caps)) {\n const holders = Object.values(state.roles)\n .filter((r) => caps.some((c) => hasCapability(r, c)))\n .map((r) => r.id);\n fail(\n \"missing-capability\",\n `\"${by}\" lacks capability ${caps.map((c) => `\"${c}\"`).join(\" or \")}`,\n `run this as one of: human${holders.map((h) => `, ${h}`).join(\"\")}`,\n );\n }\n}\n","import { assertId, fail } from \"./errors.ts\";\nimport type { ItemPatch } from \"./types.ts\";\n\nexport { assertId };\nimport { appendEvent, nowOf } from \"./state.ts\";\nimport type {\n Evidence,\n ItemStatus,\n NewItem,\n Stage,\n Transition,\n WorkItem,\n WorkflowState,\n} from \"./types.ts\";\n\nexport function stageOf(state: WorkflowState, stageId: string): Stage {\n const st = state.stages.find((s) => s.id === stageId);\n if (!st)\n fail(\n \"unknown-stage\",\n `stage \"${stageId}\" does not exist`,\n `stages are: ${state.stages.map((s) => s.id).join(\" → \")}`,\n );\n return st;\n}\n\nexport function nextStageOf(state: WorkflowState, stageId: string): Stage | undefined {\n const idx = state.stages.findIndex((s) => s.id === stageId);\n if (idx < 0) stageOf(state, stageId);\n return state.stages[idx + 1];\n}\n\nexport function isTerminalStage(state: WorkflowState, stageId: string): boolean {\n return state.stages[state.stages.length - 1]?.id === stageId;\n}\n\nfunction putItem(state: WorkflowState, item: WorkItem): WorkflowState {\n return { ...state, items: { ...state.items, [item.id]: item } };\n}\n\n/** Replace one item with `fn(item)`; no event. */\nexport function patchItem(\n state: WorkflowState,\n id: string,\n fn: (item: WorkItem) => WorkItem,\n): WorkflowState {\n return putItem(state, fn(getItem(state, id)));\n}\n\n/** Drop optional fields (iteration, role, ...) from one item; no event. */\nexport function stripItemFields(\n state: WorkflowState,\n id: string,\n keys: Array<\"iteration\" | \"role\">,\n): WorkflowState {\n return patchItem(state, id, (item) => {\n const copy = { ...item };\n for (const k of keys) delete copy[k];\n return copy;\n });\n}\n\nexport function getItem(state: WorkflowState, id: string): WorkItem {\n const it = Object.hasOwn(state.items, id) ? state.items[id] : undefined;\n if (!it)\n fail(\n \"unknown-item\",\n `item \"${id}\" does not exist`,\n `add it with addItem first; known items: ${Object.keys(state.items).join(\", \") || \"(none)\"}`,\n { items: [id] },\n );\n return it;\n}\n\nfunction assertKnownItems(state: WorkflowState, ids: string[], what: string): void {\n const missing = ids.filter((d) => !Object.hasOwn(state.items, d));\n if (missing.length)\n fail(\n \"unknown-item\",\n `${what} refers to unknown item(s) ${missing.join(\", \")}`,\n \"add those items first or remove the reference\",\n { items: missing },\n );\n}\n\nexport function addItem(\n state: WorkflowState,\n input: NewItem,\n by: string,\n now?: string,\n): WorkflowState {\n assertId(input.id, \"item id\");\n if (Object.hasOwn(state.items, input.id))\n fail(\n \"duplicate-item\",\n `item \"${input.id}\" already exists`,\n \"use editItem to change it, or pick a new id\",\n { items: [input.id] },\n );\n const firstStage = state.stages[0];\n if (!firstStage)\n fail(\"config-invalid\", \"state has no stages\", \"create the state with at least one stage\");\n const stageId = input.stage ?? firstStage.id;\n stageOf(state, stageId);\n assertKnownItems(state, input.dependsOn ?? [], `item \"${input.id}\".dependsOn`);\n if (input.affects) assertKnownItems(state, input.affects, `item \"${input.id}\".affects`);\n if (input.parent !== undefined)\n assertKnownItems(state, [input.parent], `item \"${input.id}\".parent`);\n if (input.role !== undefined && !Object.hasOwn(state.roles, input.role))\n fail(\n \"unknown-role\",\n `role \"${input.role}\" does not exist`,\n `registered roles: ${Object.keys(state.roles).join(\", \")}`,\n );\n\n const { stage: _s, ...rest } = input;\n const item: WorkItem = {\n type: \"task\",\n acceptance: [],\n dependsOn: [],\n ...rest,\n id: input.id,\n title: input.title,\n stage: stageId,\n status: \"todo\",\n evidence: [],\n blockers: [],\n transitions: [],\n };\n const next = putItem(state, item);\n return appendEvent(\n next,\n \"item.added\",\n by,\n {\n id: item.id,\n type: item.type,\n stage: item.stage,\n weight: item.weight ?? null,\n priority: item.priority ?? null,\n phase: item.phase ?? null,\n parent: item.parent ?? null,\n },\n now,\n );\n}\n\nexport type { ItemPatch } from \"./types.ts\";\n\nexport function editItem(\n state: WorkflowState,\n id: string,\n patch: ItemPatch,\n by: string,\n now?: string,\n): WorkflowState {\n const item = getItem(state, id);\n if (patch.dependsOn) assertKnownItems(state, patch.dependsOn, `item \"${id}\".dependsOn`);\n if (patch.affects) assertKnownItems(state, patch.affects, `item \"${id}\".affects`);\n if (patch.parent !== undefined) assertKnownItems(state, [patch.parent], `item \"${id}\".parent`);\n if (patch.role !== undefined && !Object.hasOwn(state.roles, patch.role))\n fail(\n \"unknown-role\",\n `role \"${patch.role}\" does not exist`,\n `registered roles: ${Object.keys(state.roles).join(\", \")}`,\n );\n const changed = (Object.keys(patch) as Array<keyof ItemPatch>).filter(\n (k) => JSON.stringify(patch[k]) !== JSON.stringify(item[k]),\n );\n if (changed.length === 0)\n fail(\n \"no-op\",\n `editItem(\"${id}\") changes nothing`,\n \"pass at least one field with a different value\",\n { items: [id] },\n );\n const updated: WorkItem = { ...item };\n for (const k of changed) (updated as unknown as Record<string, unknown>)[k] = patch[k];\n const next = putItem(state, updated);\n return appendEvent(next, \"item.edited\", by, { id, changed }, now);\n}\n\nexport function moveItem(\n state: WorkflowState,\n id: string,\n to: { stage?: string; status: ItemStatus },\n by: string,\n now?: string,\n): WorkflowState {\n const item = getItem(state, id);\n const toStage = to.stage ?? item.stage;\n stageOf(state, toStage);\n if (item.status === \"done\" || item.status === \"dropped\") {\n fail(\n \"invalid-transition\",\n `item \"${id}\" is ${item.status} and cannot move`,\n \"create a new item (or a change-request) instead of reopening a finished one\",\n { items: [id] },\n );\n }\n if (toStage === item.stage && to.status === item.status)\n fail(\n \"no-op\",\n `item \"${id}\" is already ${item.status} in \"${toStage}\"`,\n \"choose a different stage or status\",\n { items: [id] },\n );\n const at = nowOf(now);\n const updated: WorkItem = {\n ...item,\n stage: toStage,\n status: to.status,\n transitions: [\n ...item.transitions,\n {\n from: { stage: item.stage, status: item.status },\n to: { stage: toStage, status: to.status },\n at,\n by,\n },\n ],\n };\n const next = putItem(state, updated);\n return appendEvent(\n next,\n \"item.transition\",\n by,\n {\n id,\n from: { stage: item.stage, status: item.status },\n to: { stage: toStage, status: to.status },\n },\n at,\n );\n}\n\n/** Evidence recorded at or after the item's last `item.rework` event; evidence stays stored, but earlier entries no longer count toward policies or gates. Never-reworked items keep all evidence. */\nexport function freshEvidence(state: WorkflowState, item: WorkItem): Evidence[] {\n // Event order, not timestamps: evidence recorded by an item.evidence event AFTER the item's last\n // item.rework event is fresh. Evidence entries are appended in the same order as those events, so\n // the fresh entries are the last `after` ones. Evidence attached by the rework completion itself\n // precedes its item.rework event and therefore does not count.\n let after = 0;\n let found = false;\n for (let i = state.events.length - 1; i >= 0; i--) {\n const ev = state.events[i]!;\n if ((ev.payload as { id?: string } | null)?.id !== item.id) continue;\n if (ev.type === \"item.rework\") {\n found = true;\n break;\n }\n if (ev.type === \"item.evidence\") after++;\n }\n return found ? item.evidence.slice(Math.max(0, item.evidence.length - after)) : item.evidence;\n}\n\nexport function addEvidence(\n state: WorkflowState,\n id: string,\n evidence: Omit<Evidence, \"at\">,\n now?: string,\n): WorkflowState {\n const item = getItem(state, id);\n const at = nowOf(now);\n const updated: WorkItem = { ...item, evidence: [...item.evidence, { ...evidence, at }] };\n const next = putItem(state, updated);\n return appendEvent(\n next,\n \"item.evidence\",\n evidence.by,\n { id, kind: evidence.kind, ref: evidence.ref },\n at,\n );\n}\n\nexport function raiseBlocker(\n state: WorkflowState,\n id: string,\n reason: string,\n owner: string,\n by: string,\n now?: string,\n): WorkflowState {\n const item = getItem(state, id);\n const at = nowOf(now);\n const blockerId = `${id}-b${item.blockers.length + 1}`;\n const t: Transition | null =\n item.status === \"blocked\"\n ? null\n : {\n from: { stage: item.stage, status: item.status },\n to: { stage: item.stage, status: \"blocked\" },\n at,\n by,\n };\n const updated: WorkItem = {\n ...item,\n status: \"blocked\",\n blockers: [...item.blockers, { id: blockerId, reason, owner, raisedAt: at }],\n transitions: t ? [...item.transitions, t] : item.transitions,\n };\n const next = putItem(state, updated);\n return appendEvent(\n next,\n \"blocker.raised\",\n by,\n { id, blocker: blockerId, reason, owner, transition: t && { from: t.from, to: t.to } },\n at,\n );\n}\n\nfunction lastTransitionTo(item: WorkItem, status: ItemStatus): Transition | undefined {\n for (let i = item.transitions.length - 1; i >= 0; i--) {\n const t = item.transitions[i]!;\n if (t.to.status === status) return t;\n }\n return undefined;\n}\n\nexport function clearBlocker(\n state: WorkflowState,\n id: string,\n blockerId: string,\n by: string,\n now?: string,\n note?: string,\n): WorkflowState {\n const item = getItem(state, id);\n const idx = item.blockers.findIndex((b) => b.id === blockerId && !b.clearedAt);\n if (idx < 0)\n fail(\n \"invalid-input\",\n `item \"${id}\" has no open blocker \"${blockerId}\"`,\n `open blockers: ${\n item.blockers\n .filter((b) => !b.clearedAt)\n .map((b) => b.id)\n .join(\", \") || \"(none)\"\n }`,\n { items: [id] },\n );\n const at = nowOf(now);\n const blockers = item.blockers.map((b, i) => (i === idx ? { ...b, clearedAt: at } : b));\n const stillBlocked = blockers.some((b) => !b.clearedAt);\n const prev = lastTransitionTo(item, \"blocked\")?.from.status ?? \"todo\";\n let toStage = item.stage;\n let toStatus: ItemStatus = prev;\n let dropRole = false;\n if (prev === \"in_progress\") {\n toStatus = \"todo\";\n toStage = lastTransitionTo(item, \"in_progress\")?.from.stage ?? item.stage;\n } else if (prev === \"awaiting_human\") {\n // a rejected human gate: the work is re-dispatched in the current stage\n toStatus = stageOf(state, item.stage).review ? \"review\" : \"todo\";\n dropRole = true;\n }\n const { role: _r, ...noRole } = item;\n const t: Transition | null = stillBlocked\n ? null\n : {\n from: { stage: item.stage, status: \"blocked\" },\n to: { stage: toStage, status: toStatus },\n at,\n by,\n };\n const updated: WorkItem = {\n ...(dropRole && !stillBlocked ? (noRole as WorkItem) : item),\n blockers,\n stage: stillBlocked ? item.stage : toStage,\n status: stillBlocked ? \"blocked\" : toStatus,\n transitions: t ? [...item.transitions, t] : item.transitions,\n };\n const next = putItem(state, updated);\n return appendEvent(\n next,\n \"blocker.cleared\",\n by,\n { id, blocker: blockerId, transition: t && { from: t.from, to: t.to }, note: note ?? null },\n at,\n );\n}\n\n/** Entering a new stage is a new assignment: the role that finished the previous stage is cleared so the planner picks the right one (a reviewer, not the author). */\nexport function clearRole(state: WorkflowState, itemId: string): WorkflowState {\n return stripItemFields(state, itemId, [\"role\"]);\n}\n\n/** Move an item to the next stage (done at the end, review/todo otherwise) and clear its role. */\nexport function advanceItem(\n state: WorkflowState,\n itemId: string,\n by: string,\n wantsReview: boolean,\n now: string,\n): WorkflowState {\n const item = getItem(state, itemId);\n const to = nextStageOf(state, item.stage);\n if (!to) return moveItem(state, itemId, { status: \"done\" }, by, now);\n if (isTerminalStage(state, to.id))\n return moveItem(state, itemId, { stage: to.id, status: \"done\" }, by, now);\n const status = wantsReview || to.review === true ? \"review\" : \"todo\";\n return clearRole(moveItem(state, itemId, { stage: to.id, status }, by, now), itemId);\n}\n","import { fail } from \"./errors.ts\";\nimport { appendEvent } from \"./state.ts\";\nimport type { WorkflowState } from \"./types.ts\";\n\nconst listed = (s: WorkflowState) =>\n s.agreements.length === 0 ? \"(none)\" : s.agreements.map((a) => `\"${a}\"`).join(\", \");\n\nfunction absent(s: WorkflowState, text: unknown, what: string): never {\n return fail(\n \"invalid-input\",\n `no working agreement ${JSON.stringify(text)} to ${what}`,\n `current agreements: ${listed(s)}; name one of them exactly`,\n );\n}\n\n/** Adds an agreement (idempotent); with `replaces`, retires that one in the same step. */\nexport function applyAgreement(\n state: WorkflowState,\n change: { text: string; replaces?: string },\n by: string,\n now: string,\n): WorkflowState {\n if (change.replaces === change.text) return state;\n let s = state;\n if (change.replaces !== undefined) {\n if (typeof change.replaces !== \"string\" || !s.agreements.includes(change.replaces))\n absent(s, change.replaces, \"replace\");\n s = { ...s, agreements: s.agreements.filter((a) => a !== change.replaces) };\n s = appendEvent(\n s,\n \"agreement.retired\",\n by,\n { text: change.replaces, replacedBy: change.text },\n now,\n );\n }\n if (!s.agreements.includes(change.text)) s = { ...s, agreements: [...s.agreements, change.text] };\n return s;\n}\n\n/** Removes an agreement and records why it left (replacedBy null). */\nexport function retireAgreement(\n state: WorkflowState,\n text: string,\n by: string,\n now: string,\n): WorkflowState {\n if (typeof text !== \"string\" || !state.agreements.includes(text)) absent(state, text, \"retire\");\n const s = { ...state, agreements: state.agreements.filter((a) => a !== text) };\n return appendEvent(s, \"agreement.retired\", by, { text, replacedBy: null }, now);\n}\n","import { fail } from \"./errors.ts\";\nimport { freshEvidence } from \"./items.ts\";\nimport type { Policy, Violation, WorkItem, WorkflowState } from \"./types.ts\";\n\nexport function evaluatePolicies(\n state: WorkflowState,\n item: WorkItem,\n policies: Policy[],\n): Violation[] {\n const out: Violation[] = [];\n const fresh = freshEvidence(state, item);\n const v = (rule: string, message: string, fix: string) =>\n out.push({ rule, severity: \"error\", item: item.id, message, fix });\n for (const p of policies) {\n switch (p.kind) {\n case \"evidence\":\n if (!fresh.some((e) => e.kind === p.evidenceKind))\n v(\n \"policy:evidence\",\n `item \"${item.id}\" has no evidence of kind \"${p.evidenceKind}\"`,\n `attach evidence { kind: \"${p.evidenceKind}\" } via addEvidence or in the handoff.produced`,\n );\n break;\n case \"acceptance-written\":\n if (item.acceptance.length === 0)\n v(\n \"policy:acceptance-written\",\n `item \"${item.id}\" has no acceptance criteria`,\n \"editItem with a non-empty acceptance[] (needs define-acceptance)\",\n );\n break;\n case \"estimate-present\":\n if (item.weight === undefined)\n v(\n \"policy:estimate-present\",\n `item \"${item.id}\" has no weight`,\n \"editItem with a weight (story points)\",\n );\n break;\n case \"no-open-blockers\": {\n const open = item.blockers.filter((b) => !b.clearedAt);\n if (open.length)\n v(\n \"policy:no-open-blockers\",\n `item \"${item.id}\" has ${open.length} open blocker(s)`,\n `clearBlocker ${open.map((b) => b.id).join(\", \")}`,\n );\n break;\n }\n case \"dependencies-done\": {\n const notDone = item.dependsOn.filter((d) => state.items[d]?.status !== \"done\");\n if (notDone.length)\n v(\n \"policy:dependencies-done\",\n `item \"${item.id}\" depends on unfinished ${notDone.join(\", \")}`,\n `finish ${notDone.join(\", \")} first`,\n );\n break;\n }\n case \"custom\":\n if (!fresh.some((e) => e.kind === `policy:${p.id}`))\n v(\n `policy:custom:${p.id}`,\n `item \"${item.id}\" has not satisfied \"${p.description}\"`,\n `attach evidence { kind: \"policy:${p.id}\" } when it is satisfied`,\n );\n break;\n }\n }\n return out;\n}\n\nexport function assertPolicies(\n state: WorkflowState,\n item: WorkItem,\n policies: Policy[],\n context: string,\n): void {\n const unmet = evaluatePolicies(state, item, policies);\n if (unmet.length) {\n fail(\n \"policy-unmet\",\n `item \"${item.id}\" cannot ${context}: ${unmet.length} polic${unmet.length === 1 ? \"y\" : \"ies\"} unmet`,\n unmet.map((u) => u.fix).join(\"; \"),\n { items: [item.id] },\n );\n }\n}\n","import { fail } from \"./errors.ts\";\nimport { advanceItem, freshEvidence, clearRole, getItem, moveItem, raiseBlocker } from \"./items.ts\";\nimport { approverIds } from \"./roles.ts\";\nimport { appendEvent, nowOf } from \"./state.ts\";\nimport type {\n Gate,\n Methodology,\n PendingHuman,\n Transition,\n Violation,\n WorkItem,\n WorkflowState,\n} from \"./types.ts\";\n\nexport type GateResult =\n | { outcome: \"pass\" }\n | { outcome: \"human\" }\n | { outcome: \"fail\"; violations: Violation[] };\n\n/** Last in_progress dispatch made from a stage that comes STRICTLY BEFORE the item's current stage in `state.stages` order (unknown stage ids count as not-before). */\nexport function lastDispatchBefore(state: WorkflowState, item: WorkItem): Transition | undefined {\n const order = new Map(state.stages.map((s, i) => [s.id, i] as const));\n const here = order.get(item.stage);\n if (here === undefined) return undefined;\n for (let i = item.transitions.length - 1; i >= 0; i--) {\n const t = item.transitions[i]!;\n const from = order.get(t.from.stage);\n if (t.to.status === \"in_progress\" && from !== undefined && from < here) return t;\n }\n return undefined;\n}\n\n/** Role that did the work the gate guards: the last dispatch made from a stage strictly before the current one (so a reviewer dispatched into the gated stage is not its author); else the last dispatch of any stage; undefined if never dispatched. */\nexport function authorOf(state: WorkflowState, item: WorkItem): string | undefined {\n const before = lastDispatchBefore(state, item);\n if (before) return before.by;\n for (let i = item.transitions.length - 1; i >= 0; i--) {\n const t = item.transitions[i]!;\n if (t.to.status === \"in_progress\") return t.by;\n }\n return undefined;\n}\n\nexport function checkGate(\n state: WorkflowState,\n item: WorkItem,\n gate: Gate,\n by: string,\n): GateResult {\n const violations: Violation[] = [];\n const fresh = freshEvidence(state, item);\n for (const kind of gate.evidence) {\n if (!fresh.some((e) => e.kind === kind)) {\n violations.push({\n rule: \"gate:evidence\",\n severity: \"error\",\n item: item.id,\n message: `gate \"${gate.id}\" needs evidence \"${kind}\" on item \"${item.id}\"`,\n fix: `attach evidence { kind: \"${kind}\" } before approving`,\n });\n }\n }\n if (violations.length) return { outcome: \"fail\", violations };\n\n let needsHuman = false;\n for (const req of gate.requires) {\n if (req === \"human\") {\n if (by !== \"human\") needsHuman = true;\n continue;\n }\n const ok = approverIds(state, gate.id, req.capability).includes(by);\n if (!ok) {\n violations.push({\n rule: \"gate:capability\",\n severity: \"error\",\n item: item.id,\n message: `\"${by}\" may not approve gate \"${gate.id}\" (needs capability \"${req.capability}\" and canApprove \"${gate.id}\")`,\n fix: `approve as one of: ${approverIds(state, gate.id, req.capability).join(\", \") || \"(no role qualifies; register one)\"}`,\n });\n continue;\n }\n const author = authorOf(state, item);\n if (author !== undefined && author === by) {\n const others = approverIds(state, gate.id, req.capability, by);\n violations.push({\n rule: \"conflict-of-interest\",\n severity: \"error\",\n item: item.id,\n message: `role \"${by}\" did the work on \"${item.id}\" and may not approve it`,\n fix: `approve as a different role: ${others.join(\", \") || \"(register another approver)\"}`,\n });\n }\n }\n if (violations.length) return { outcome: \"fail\", violations };\n return needsHuman ? { outcome: \"human\" } : { outcome: \"pass\" };\n}\n\nexport function raisePending(\n state: WorkflowState,\n pending: Omit<PendingHuman, \"id\" | \"raisedAt\">,\n now?: string,\n): WorkflowState {\n const at = nowOf(now);\n const id = `p${state.events.filter((e) => e.type === \"pending.raised\").length + 1}`;\n const entry: PendingHuman = { ...pending, id, raisedAt: at };\n let next: WorkflowState = { ...state, pending: [...state.pending, entry] };\n if (pending.item) {\n const item = getItem(next, pending.item);\n if (item.status !== \"awaiting_human\")\n next = moveItem(next, pending.item, { status: \"awaiting_human\" }, \"system\", at);\n }\n return appendEvent(\n next,\n \"pending.raised\",\n \"system\",\n { id, kind: pending.kind, item: pending.item ?? null, gate: pending.gate ?? null },\n at,\n );\n}\n\nexport function decide(\n state: WorkflowState,\n pendingId: string,\n decision: \"approve\" | \"reject\",\n by: string,\n note: string,\n now?: string,\n methodology?: Methodology,\n): WorkflowState {\n if (decision !== \"approve\" && decision !== \"reject\")\n fail(\n \"invalid-input\",\n `decision must be \"approve\" or \"reject\" (got ${JSON.stringify(decision)})`,\n \"pass approve or reject\",\n );\n const entry = state.pending.find((p) => p.id === pendingId);\n if (!entry)\n fail(\n \"unknown-pending\",\n `no pending decision \"${pendingId}\"`,\n `open decisions: ${state.pending.map((p) => p.id).join(\", \") || \"(none)\"}`,\n );\n const item0 = entry.kind === \"gate\" && entry.item ? getItem(state, entry.item) : undefined;\n const gate =\n item0 &&\n (state.stages.find((s) => entry.gate !== undefined && s.gate?.id === entry.gate)?.gate ??\n state.stages.find((s) => s.id === item0.stage)?.gate);\n if (item0 && gate && by !== \"human\") {\n const res = gate.requires.includes(\"human\") ? undefined : checkGate(state, item0, gate, by);\n if (res?.outcome !== \"pass\")\n fail(\n \"gate-unmet\",\n `\"${by}\" may not decide gate \"${gate.id}\" on \"${item0.id}\"`,\n `decide as one of: human${gate.requires\n .flatMap((q) => (q === \"human\" ? [] : approverIds(state, gate.id, q.capability)))\n .map((r) => `, ${r}`)\n .join(\"\")}`,\n { items: [item0.id], rule: \"gate\" },\n );\n }\n const at = nowOf(now);\n let next: WorkflowState = { ...state, pending: state.pending.filter((p) => p.id !== pendingId) };\n next = appendEvent(\n next,\n \"pending.decided\",\n by,\n { id: pendingId, decision, note, item: entry.item ?? null, gate: entry.gate ?? null },\n at,\n );\n if (item0) {\n const id = item0.id;\n const gateId = entry.gate ?? gate?.id ?? null;\n if (decision === \"approve\") {\n let wantsReview = false;\n for (let i = state.events.length - 1; i >= 0; i--) {\n const e = state.events[i]!;\n if (e.type !== \"item.completed\" || (e.payload as { id?: string }).id !== id) continue;\n wantsReview = (e.payload as { verdict?: string }).verdict === \"needs-review\";\n break;\n }\n next = advanceItem(next, id, by, wantsReview, at);\n next = appendEvent(next, \"gate.passed\", by, { item: id, gate: gateId }, at);\n } else {\n const onFail = gate?.onFail ?? { action: \"block\" as const };\n if (onFail.action === \"return-to\")\n next = clearRole(moveItem(next, id, { stage: onFail.stage, status: \"todo\" }, by, at), id);\n else\n next = raiseBlocker(\n next,\n id,\n `gate \"${gateId ?? \"?\"}\" rejected: ${note || \"no reason given\"}`,\n by,\n by,\n at,\n );\n next = appendEvent(next, \"gate.failed\", by, { item: id, gate: gateId, note }, at);\n }\n }\n if (methodology?.afterDecide) next = methodology.afterDecide(next, entry, decision, by, note, at);\n return next;\n}\n","import type { Accounting, Budget, WorkflowState } from \"./types.ts\";\n\nexport const ZERO_SPENT: Required<Budget> = { tokens: 0, turns: 0, wallclockMs: 0 };\n\nexport function addSpent(spent: Required<Budget>, acc: Accounting): Required<Budget> {\n return {\n tokens: spent.tokens + acc.tokensIn + acc.tokensOut,\n turns: spent.turns + 1,\n wallclockMs: spent.wallclockMs + acc.durationMs,\n };\n}\n\nexport function remaining(budget: Budget, spent: Required<Budget>): Budget {\n const out: Budget = {};\n if (budget.tokens !== undefined) out.tokens = Math.max(0, budget.tokens - spent.tokens);\n if (budget.turns !== undefined) out.turns = Math.max(0, budget.turns - spent.turns);\n if (budget.wallclockMs !== undefined)\n out.wallclockMs = Math.max(0, budget.wallclockMs - spent.wallclockMs);\n return out;\n}\n\nexport function isExhausted(budget: Budget, spent: Required<Budget>): boolean {\n return (\n (budget.tokens !== undefined && spent.tokens >= budget.tokens) ||\n (budget.turns !== undefined && spent.turns >= budget.turns) ||\n (budget.wallclockMs !== undefined && spent.wallclockMs >= budget.wallclockMs)\n );\n}\n\nexport type EstimateMode = \"per-weight\" | \"per-call\";\n\nexport function estimateTokens(\n state: WorkflowState,\n weight: number | undefined,\n fallbackPerWeight = 20000,\n mode: EstimateMode = \"per-weight\",\n): number {\n const w = weight ?? 1;\n const samples: number[] = [];\n for (const a of state.accounting) {\n if (a.estimate === true) continue;\n const total = a.tokensIn + a.tokensOut;\n if (mode === \"per-call\") {\n samples.push(total);\n continue;\n }\n const iw = state.items[a.item]?.weight;\n if (iw === undefined || iw <= 0) continue;\n samples.push(total / iw);\n }\n if (samples.length === 0) return mode === \"per-call\" ? fallbackPerWeight : fallbackPerWeight * w;\n samples.sort((x, y) => x - y);\n const mid = Math.floor(samples.length / 2);\n const median = samples.length % 2 ? samples[mid]! : (samples[mid - 1]! + samples[mid]!) / 2;\n return Math.round(mode === \"per-call\" ? median : median * w);\n}\n","import { ExFlow, ExFlowRuntimeError, type ExFlowOptions, type ExNode } from \"ex-flow\";\nimport { estimateTokens, remaining } from \"./budget.ts\";\nimport { fail } from \"./errors.ts\";\nimport { authorOf } from \"./gates.ts\";\nimport { moveItem, stageOf } from \"./items.ts\";\nimport { evaluatePolicies } from \"./policies.ts\";\nimport { roleOf, rolesWith } from \"./roles.ts\";\nimport { appendEvent, nowOf } from \"./state.ts\";\nimport type { ItemStatus, Iteration, Methodology, Role, WorkItem, WorkflowState } from \"./types.ts\";\n\ntype NodeData = { id: string };\n\nexport function openIteration(state: WorkflowState): Iteration | undefined {\n return state.iterations.find((it) => it.endedAt === undefined);\n}\n\nexport function assignRole(\n state: WorkflowState,\n item: WorkItem,\n roleFor?: (item: WorkItem) => string | undefined,\n): Role {\n if (item.role) {\n const r = roleOf(state, item.role);\n if (!r)\n fail(\n \"unknown-role\",\n `item \"${item.id}\" is assigned to unknown role \"${item.role}\"`,\n \"editItem with an existing role id\",\n );\n return r;\n }\n const picked = roleFor ? roleFor(item) : undefined;\n if (picked !== undefined) {\n const r = roleOf(state, picked);\n if (!r)\n fail(\n \"unknown-role\",\n `the methodology picked unknown role \"${picked}\" for item \"${item.id}\"`,\n `registered roles: ${Object.keys(state.roles).join(\", \") || \"(none)\"}`,\n { items: [item.id] },\n );\n return r;\n }\n if (item.status === \"review\") {\n const author = authorOf(state, item);\n const reviewers = rolesWith(state, \"review\");\n const other = reviewers.find((r) => r.id !== author);\n const r = other ?? (reviewers.length === 1 ? reviewers[0] : undefined);\n if (!r)\n fail(\n \"missing-capability\",\n `no role has capability \"review\" for item \"${item.id}\"`,\n \"register a role with capability review\",\n { items: [item.id] },\n );\n return r;\n }\n const r = rolesWith(state, \"deliver\")[0];\n if (!r)\n fail(\n \"missing-capability\",\n `no role has capability \"deliver\" for item \"${item.id}\"`,\n \"register a role with capability deliver\",\n { items: [item.id] },\n );\n return r;\n}\n\nexport function resourceCapsFor(state: WorkflowState): Record<string, number> {\n const caps: Record<string, number> = {};\n for (const r of Object.values(state.roles)) {\n if (r.maxConcurrent !== undefined) caps[r.resourceClass ?? r.id] = r.maxConcurrent;\n }\n return caps;\n}\n\nexport function toExNodes(\n items: WorkItem[],\n state: WorkflowState,\n priorityOf?: (item: WorkItem) => number | undefined,\n roleFor?: (item: WorkItem) => string | undefined,\n): ExNode<NodeData>[] {\n const present = new Set(items.map((i) => i.id));\n return items.map((i) => {\n const role = assignRole(state, i, roleFor);\n const node: ExNode<NodeData> = {\n id: i.id,\n data: { id: i.id },\n dependsOn: i.dependsOn.filter((d) => present.has(d)),\n resourceClass: role.resourceClass ?? role.id,\n };\n const pr = priorityOf ? priorityOf(i) : i.priority;\n if (pr !== undefined) node.priority = pr;\n if (i.weight !== undefined) node.weight = i.weight;\n if (i.deadline !== undefined) node.deadline = Date.parse(i.deadline);\n return node;\n });\n}\n\nexport interface PlanOptions {\n max?: number;\n now?: string;\n fallbackTokensPerWeight?: number;\n}\nexport type PlanReason = \"no-candidates\" | \"budget-exhausted\" | \"wip-full\" | \"policy-blocked\";\n/** A ready item the planner did not pull, and why. */\nexport interface Skipped {\n id: string;\n reason: \"entry-policy\" | \"wip\" | \"resource-cap\" | \"budget\";\n detail: string;\n}\nexport interface PlanResult {\n state: WorkflowState;\n dispatched: WorkItem[];\n skipped: Skipped[];\n reason?: PlanReason;\n}\n\nexport function plan(\n state: WorkflowState,\n methodology: Methodology,\n opts: PlanOptions = {},\n): PlanResult {\n const at = nowOf(opts.now);\n // an item may enter the graph only if every dependency is done or is itself a candidate (so ex-flow orders it)\n const all = methodology.candidates(state);\n const candidates = all.filter((i) =>\n i.dependsOn.every((d) => state.items[d]?.status === \"done\" || all.some((c) => c.id === d)),\n );\n const readyAll = all.filter((i) => i.dependsOn.every((d) => state.items[d]?.status === \"done\"));\n if (candidates.length === 0)\n return {\n state,\n dispatched: [],\n skipped: [],\n reason: openIteration(state)?.closing ? \"budget-exhausted\" : \"no-candidates\",\n };\n\n const po = methodology.plannerOptions(state);\n const options: ExFlowOptions<NodeData> = {\n schedulerMode: po.schedulerMode,\n resourceCaps: resourceCapsFor(state),\n };\n if (po.concurrencyCap !== undefined) options.concurrencyCap = po.concurrencyCap;\n if (po.fairnessPolicy !== undefined) options.fairnessPolicy = po.fairnessPolicy;\n if (po.maxDeferralRounds !== undefined) options.maxDeferralRounds = po.maxDeferralRounds;\n if (po.deadlineStrategy !== undefined) options.deadlineStrategy = po.deadlineStrategy;\n if (po.weightStrategy !== undefined) options.weightStrategy = po.weightStrategy;\n if (po.tieBreaker !== undefined) {\n const tb = po.tieBreaker;\n options.tieBreaker = (a, b) => tb(state.items[a.data.id]!, state.items[b.data.id]!);\n }\n\n let firstBatch: string[];\n let metrics: unknown;\n try {\n const flow = new ExFlow<NodeData>(options);\n for (const n of toExNodes(candidates, state, po.priorityOf, po.roleFor)) flow.addEntity(n);\n const details = flow.resolveExecutionDetails();\n firstBatch = (details.plan.batches[0] ?? []).map((r) => r.id);\n metrics = details.metrics;\n } catch (e) {\n if (e instanceof ExFlowRuntimeError) {\n fail(\n \"planner-error\",\n `ex-flow refused the graph: [${e.code}] ${e.message}`,\n \"fix the item graph (cycles, duplicate ids) with editItem; see diagnostics in the message\",\n { items: candidates.map((c) => c.id) },\n );\n }\n throw e;\n }\n\n // ready = first batch, but only items whose deps are really done (deps inside the batch are impossible by construction)\n const ready = firstBatch\n .map((id) => state.items[id]!)\n .filter((i) => i.dependsOn.every((d) => state.items[d]?.status === \"done\"));\n const inProgress = Object.values(state.items).filter((i) => i.status === \"in_progress\");\n const wipCounts = new Set<ItemStatus>(po.wipCounts ?? [\"in_progress\"]);\n const occupying = Object.values(state.items).filter((i) => wipCounts.has(i.status));\n const perClass: Record<string, number> = {};\n for (const i of inProgress) {\n const r = i.role ? roleOf(state, i.role) : undefined;\n const cls = r ? (r.resourceClass ?? r.id) : \"?\";\n perClass[cls] = (perClass[cls] ?? 0) + 1;\n }\n const caps = resourceCapsFor(state);\n const iteration = openIteration(state);\n const left = iteration ? remaining(iteration.budget, iteration.spent) : {};\n let tokensLeft = left.tokens;\n const inFlight = iteration\n ? Object.values(state.items).filter(\n (i) =>\n (i.iteration === iteration.id || iteration.committed.includes(i.id)) &&\n i.status === \"in_progress\",\n ).length\n : 0;\n let turnsLeft = left.turns === undefined ? undefined : left.turns - inFlight;\n const clockOut = left.wallclockMs !== undefined && left.wallclockMs <= 0;\n const estimateMode = po.estimateMode ?? \"per-weight\";\n const fallback = opts.fallbackTokensPerWeight ?? po.fallbackTokensPerWeight;\n const limit = Math.min(opts.max ?? Infinity, po.concurrencyCap ?? Infinity);\n\n const dispatched: WorkItem[] = [];\n const skipped: Skipped[] = [];\n let reason: PlanReason | undefined;\n let next = state;\n for (const item of ready) {\n if (dispatched.length >= limit) {\n reason = \"wip-full\";\n break;\n }\n const pulledTo =\n typeof po.dispatchStage === \"function\" ? po.dispatchStage(item) : po.dispatchStage;\n const target = item.status === \"todo\" && pulledTo !== undefined ? pulledTo : item.stage;\n const stage = stageOf(state, target);\n // questions are answered, not delivered: like exit policies and gates, entry policies do not apply\n const violations =\n item.type === \"question\" ? [] : evaluatePolicies(state, item, stage.entryPolicy);\n if (violations.length > 0) {\n skipped.push({\n id: item.id,\n reason: \"entry-policy\",\n detail: violations.map((v) => v.message).join(\"; \"),\n });\n continue;\n }\n const limitHere = po.wipLimitOf ? po.wipLimitOf(stage, item) : stage.wipLimit;\n if (\n limitHere !== undefined &&\n occupying.filter((i) => i.stage === stage.id && i.id !== item.id).length +\n dispatched.filter((d) => d.stage === stage.id).length >=\n limitHere\n ) {\n reason = \"wip-full\";\n skipped.push({\n id: item.id,\n reason: \"wip\",\n detail: `stage \"${stage.id}\" is at its WIP limit of ${limitHere}`,\n });\n continue;\n }\n const role = assignRole(state, item, po.roleFor);\n const cls = role.resourceClass ?? role.id;\n if (caps[cls] !== undefined && (perClass[cls] ?? 0) >= caps[cls]!) {\n reason = \"wip-full\";\n skipped.push({\n id: item.id,\n reason: \"resource-cap\",\n detail: `resource class \"${cls}\" is at its cap of ${caps[cls]}`,\n });\n continue;\n }\n if (turnsLeft !== undefined && turnsLeft <= 0) {\n reason = \"budget-exhausted\";\n skipped.push({\n id: item.id,\n reason: \"budget\",\n detail: `turns budget spent: ${iteration!.spent.turns} used + ${inFlight + dispatched.length} in flight of ${iteration!.budget.turns}`,\n });\n continue;\n }\n if (clockOut) {\n reason = \"budget-exhausted\";\n skipped.push({ id: item.id, reason: \"budget\", detail: \"wall-clock budget spent\" });\n continue;\n }\n if (tokensLeft !== undefined) {\n const est = estimateTokens(state, item.weight, fallback, estimateMode);\n if (est > tokensLeft) {\n reason = \"budget-exhausted\";\n skipped.push({\n id: item.id,\n reason: \"budget\",\n detail: `needs about ${est} tokens, ${tokensLeft} left in the iteration`,\n });\n continue;\n }\n tokensLeft -= est;\n }\n perClass[cls] = (perClass[cls] ?? 0) + 1;\n if (turnsLeft !== undefined) turnsLeft -= 1;\n next = moveItem(next, item.id, { stage: target, status: \"in_progress\" }, role.id, at);\n next = {\n ...next,\n items: { ...next.items, [item.id]: { ...next.items[item.id]!, role: role.id } },\n };\n dispatched.push(next.items[item.id]!);\n }\n if (reason === undefined && skipped.some((x) => x.reason === \"entry-policy\"))\n reason = \"policy-blocked\";\n if (reason === undefined && dispatched.length < readyAll.length) reason = \"wip-full\";\n if (dispatched.length === 0 && reason === undefined) reason = \"no-candidates\";\n next = appendEvent(\n next,\n \"planner.resolved\",\n \"planner\",\n { dispatched: dispatched.map((d) => d.id), reason: reason ?? null, skipped, metrics },\n at,\n );\n return reason\n ? { state: next, dispatched, skipped, reason }\n : { state: next, dispatched, skipped };\n}\n","import { authorOf } from \"./gates.ts\";\nimport { approverIds, separationLost } from \"./roles.ts\";\nimport type { Action, Handoff, Methodology, Rule, Violation } from \"./types.ts\";\n\nexport function coreRulesFor(methodology: Pick<Methodology, \"requiredCapabilities\">): Rule[] {\n const separation: Rule = {\n id: \"separation-lost\",\n severity: \"warning\",\n check(state, action: Action): Violation[] {\n if (action.type !== \"init\" && action.type !== \"role.register\") return [];\n return separationLost(state, methodology.requiredCapabilities).map((r) => ({\n rule: \"separation-lost\",\n severity: \"warning\" as const,\n message: `role \"${r.id}\" holds every required capability (${methodology.requiredCapabilities.join(\", \")}); no separation of duties`,\n fix: \"fine for a solo operator; otherwise split capabilities across roles\",\n }));\n },\n };\n const coi: Rule = {\n id: \"conflict-of-interest\",\n severity: \"error\",\n check(state, action: Action): Violation[] {\n // dormant by design: completions reach rules as \"item.complete\" (spec §22 B02), so this match never fires\n if (action.type !== \"complete\") return [];\n const handoff = (action.payload as { handoff?: Handoff } | undefined)?.handoff;\n if (!handoff) return [];\n const verdict = handoff.verdict ?? \"done\";\n if (verdict !== \"done\" && verdict !== \"needs-review\") return [];\n const item = state.items[handoff.item];\n if (!item) return [];\n const gate = state.stages.find((s) => s.id === item.stage)?.gate;\n if (!gate || !gate.requires.some((q) => q !== \"human\")) return [];\n if (authorOf(state, item) !== handoff.role) return [];\n const others = approverIds(state, gate.id, undefined, handoff.role);\n return [\n {\n rule: \"conflict-of-interest\",\n severity: \"error\",\n item: item.id,\n message: `role \"${handoff.role}\" authored \"${item.id}\" and may not pass gate \"${gate.id}\" on it`,\n fix: `hand the gate to another approver: ${others.join(\", \") || \"(register one)\"}`,\n },\n ];\n },\n };\n return [separation, coi];\n}\n","import { fail } from \"./errors.ts\";\nimport { requireCapabilities } from \"./roles.ts\";\nimport { coreRulesFor } from \"./rules.ts\";\nimport { openIteration } from \"./planner.ts\";\nimport { appendEvent, createState, nowOf } from \"./state.ts\";\nimport type {\n Action,\n ApplyResult,\n Methodology,\n Role,\n Stage,\n Violation,\n WorkflowState,\n} from \"./types.ts\";\n\nexport function validateAction(\n state: WorkflowState,\n methodology: Methodology,\n action: Action,\n): Violation[] {\n const out: Violation[] = [];\n for (const rule of [...coreRulesFor(methodology), ...methodology.rules])\n out.push(...rule.check(state, action));\n return out;\n}\n\nexport function applyAction(\n state: WorkflowState,\n methodology: Methodology,\n action: Action,\n reduce: (s: WorkflowState) => WorkflowState,\n): ApplyResult {\n const violations = validateAction(state, methodology, action);\n const errors = violations.filter((v) => v.severity === \"error\");\n if (errors.length) {\n fail(\n \"rule-violation\",\n `${action.type} violates ${errors.map((e) => e.rule).join(\", \")}: ${errors.map((e) => e.message).join(\"; \")}`,\n errors.map((e) => e.fix).join(\"; \"),\n { rule: errors[0]!.rule, items: errors.map((e) => e.item).filter((x): x is string => !!x) },\n );\n }\n return { state: reduce(state), warnings: violations.filter((v) => v.severity === \"warning\") };\n}\n\nexport interface InitInput<C> {\n methodology: Methodology<C>;\n config: unknown;\n roles?: Role[];\n stages?: Stage[];\n by?: string;\n now?: string;\n}\n\nexport function init<C>(input: InitInput<C>): ApplyResult {\n const m = input.methodology;\n const config = m.validateConfig(input.config);\n const stages = input.stages ?? m.defaultStages(config);\n const roles = input.roles ?? m.defaultRoles(config);\n const stateInput =\n input.now !== undefined\n ? { methodology: m.name, config, stages, roles, now: input.now }\n : { methodology: m.name, config, stages, roles };\n const state = createState(stateInput);\n requireCapabilities(state, m.requiredCapabilities, m.exclusiveCapabilities);\n return applyAction(state, m as Methodology, { type: \"init\", by: input.by ?? \"system\" }, (s) => s);\n}\n\n/** Change the config between iterations: re-validated, recorded as config.changed, derived state kept in step by the methodology hook. */\nexport function changeConfig(\n state: WorkflowState,\n methodology: Methodology,\n patch: Record<string, unknown>,\n by: string,\n now?: string,\n): ApplyResult {\n if (\n typeof patch !== \"object\" ||\n patch === null ||\n Array.isArray(patch) ||\n Object.keys(patch).length === 0\n )\n fail(\n \"invalid-input\",\n \"config patch must be a non-empty object\",\n 'pass e.g. { \"sprintBudget\": { \"tokens\": 1500000 } } to exwf config set',\n );\n const open = openIteration(state);\n if (open)\n fail(\n \"invalid-input\",\n `config cannot change while ${open.id} is open`,\n \"close it first (exwf ceremony review or cancel; a waterfall phase closes at its gate), then run exwf config set\",\n );\n const locked = (methodology.lockedConfigKeys ?? []).filter((k) => Object.hasOwn(patch, k));\n if (locked.length)\n fail(\n \"invalid-input\",\n `config key(s) ${locked.join(\", \")} cannot change after init`,\n methodology.name === \"kanban\"\n ? \"use the service-delivery-review cadence for columns and classes of service\"\n : \"start a new workflow with exwf init to change them\",\n );\n const before = (state.config ?? {}) as Record<string, unknown>;\n const after = methodology.validateConfig({ ...before, ...patch }) as Record<string, unknown>;\n const unknown = Object.keys(patch).filter((k) => !Object.hasOwn(after, k));\n if (unknown.length)\n fail(\n \"invalid-input\",\n `unknown config key(s) ${unknown.join(\", \")}`,\n `known keys: ${Object.keys(after).join(\", \")}`,\n );\n const changed = Object.keys(patch).filter(\n (k) => JSON.stringify(before[k]) !== JSON.stringify(after[k]),\n );\n if (changed.length === 0)\n fail(\n \"no-op\",\n \"config patch changes nothing\",\n \"pass at least one key with a different value to exwf config set\",\n );\n const pick = (o: Record<string, unknown>) => Object.fromEntries(changed.map((k) => [k, o[k]]));\n return applyAction(state, methodology, { type: \"config.change\", by, payload: { patch } }, (s) => {\n const at = nowOf(now);\n let s2 = appendEvent(\n { ...s, config: after },\n \"config.changed\",\n by,\n { changed, before: pick(before), after: pick(after) },\n at,\n );\n if (methodology.afterConfigChange) s2 = methodology.afterConfigChange(s2, at);\n return s2;\n });\n}\n"]}
|