ex-workflow 0.6.0-stage → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/CHANGELOG.md +17 -2
  2. package/README.md +12 -6
  3. package/dist/chunk-3KFQPSRX.mjs +2 -0
  4. package/dist/chunk-3KFQPSRX.mjs.map +1 -0
  5. package/dist/{chunk-MH66G5KV.cjs → chunk-5PHK72VM.cjs} +2 -2
  6. package/dist/{chunk-MH66G5KV.cjs.map → chunk-5PHK72VM.cjs.map} +1 -1
  7. package/dist/chunk-CYXVGHQM.cjs +2 -0
  8. package/dist/chunk-CYXVGHQM.cjs.map +1 -0
  9. package/dist/chunk-FKTCGQYB.cjs +2 -0
  10. package/dist/chunk-FKTCGQYB.cjs.map +1 -0
  11. package/dist/chunk-HIHMBMB5.cjs +2 -0
  12. package/dist/chunk-HIHMBMB5.cjs.map +1 -0
  13. package/dist/{chunk-KF5VQH3M.mjs → chunk-MQWMQ4PD.mjs} +2 -2
  14. package/dist/{chunk-KF5VQH3M.mjs.map → chunk-MQWMQ4PD.mjs.map} +1 -1
  15. package/dist/chunk-QDMEM62U.mjs +2 -0
  16. package/dist/chunk-QDMEM62U.mjs.map +1 -0
  17. package/dist/chunk-U3OXAO67.mjs +2 -0
  18. package/dist/chunk-U3OXAO67.mjs.map +1 -0
  19. package/dist/chunk-UZQV73X7.mjs +2 -0
  20. package/dist/chunk-UZQV73X7.mjs.map +1 -0
  21. package/dist/chunk-VXH2FAKV.cjs +2 -0
  22. package/dist/chunk-VXH2FAKV.cjs.map +1 -0
  23. package/dist/chunk-XMO2RCXB.cjs +2 -0
  24. package/dist/chunk-XMO2RCXB.cjs.map +1 -0
  25. package/dist/chunk-YBHHICTZ.mjs +2 -0
  26. package/dist/chunk-YBHHICTZ.mjs.map +1 -0
  27. package/dist/{chunk-3CLDZCHN.cjs → chunk-YJN4JEJU.cjs} +2 -2
  28. package/dist/{chunk-3CLDZCHN.cjs.map → chunk-YJN4JEJU.cjs.map} +1 -1
  29. package/dist/chunk-Z2G7DGDF.mjs +2 -0
  30. package/dist/{chunk-TEPK5Y36.mjs.map → chunk-Z2G7DGDF.mjs.map} +1 -1
  31. package/dist/cli/bin.cjs +1 -1
  32. package/dist/cli/bin.mjs +1 -1
  33. package/dist/cli/index.cjs +1 -1
  34. package/dist/cli/index.mjs +1 -1
  35. package/dist/index.cjs +1 -1
  36. package/dist/index.cjs.map +1 -1
  37. package/dist/index.d.cts +1 -1
  38. package/dist/index.d.ts +1 -1
  39. package/dist/index.mjs +1 -1
  40. package/dist/index.mjs.map +1 -1
  41. package/dist/kanban/index.cjs +1 -1
  42. package/dist/kanban/index.mjs +1 -1
  43. package/dist/scrum/index.cjs +1 -1
  44. package/dist/scrum/index.mjs +1 -1
  45. package/dist/waterfall/index.cjs +1 -1
  46. package/dist/waterfall/index.d.cts +2 -1
  47. package/dist/waterfall/index.d.ts +2 -1
  48. package/dist/waterfall/index.mjs +1 -1
  49. package/package.json +1 -1
  50. package/dist/chunk-2OVYXXNV.cjs +0 -2
  51. package/dist/chunk-2OVYXXNV.cjs.map +0 -1
  52. package/dist/chunk-7CDGPTEJ.mjs +0 -2
  53. package/dist/chunk-7CDGPTEJ.mjs.map +0 -1
  54. package/dist/chunk-GT57PLUT.mjs +0 -2
  55. package/dist/chunk-GT57PLUT.mjs.map +0 -1
  56. package/dist/chunk-IHE5K4X3.mjs +0 -2
  57. package/dist/chunk-IHE5K4X3.mjs.map +0 -1
  58. package/dist/chunk-N3QB2S7R.cjs +0 -2
  59. package/dist/chunk-N3QB2S7R.cjs.map +0 -1
  60. package/dist/chunk-NA53TZE4.mjs +0 -2
  61. package/dist/chunk-NA53TZE4.mjs.map +0 -1
  62. package/dist/chunk-TEPK5Y36.mjs +0 -2
  63. package/dist/chunk-UBFIKDIP.cjs +0 -2
  64. package/dist/chunk-UBFIKDIP.cjs.map +0 -1
  65. package/dist/chunk-UUOMQMWT.cjs +0 -2
  66. package/dist/chunk-UUOMQMWT.cjs.map +0 -1
  67. package/dist/chunk-Z3PU6EBI.mjs +0 -2
  68. package/dist/chunk-Z3PU6EBI.mjs.map +0 -1
  69. package/dist/chunk-ZTE7LREB.cjs +0 -2
  70. package/dist/chunk-ZTE7LREB.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/brief.ts","../src/complete.ts","../src/accounting.ts"],"names":["completions","state","itemId","out","ev","lastCompletion","all","synthesizeBrief","methodology","item","fail","role","roleOf","upstream","doNot","sources","dep","p","d","priorHandoffs","touched","relatedBugs","b","a","it","openIteration","gate","stageOf","brief","remaining","openQuestions","last","next","opts","res","plan","briefs","VERDICTS","LESSON_SCOPES","isObj","x","str","validate","handoff","acc","getItem","bad","what","fix","verdict","lessons","l","followUps","f","k","pulledFromStage","i","t","reworkStage","lastDispatchBefore","complete","now","result","ruled","applyAction","completeBody","at","nowOf","id","s","addEvidence","addSpent","lid","appendEvent","n","first","_drop","rest","addItem","warnings","clearRole","moveItem","lastStageId","stage","assertPolicies","checkGate","v","raisePending","advanceItem","raiseBlocker","thinker","rolesWith","qid","parent","pulledFrom","q","patchItem","NUMERIC","pick","correctAccounting","patch","by","line","indexes","idx","before","flag","after","delta","owner"],"mappings":"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","file":"chunk-MH66G5KV.cjs","sourcesContent":["import { remaining } from \"./budget.ts\";\nimport { fail } from \"./errors.ts\";\nimport { stageOf } from \"./items.ts\";\nimport { openIteration, plan, type PlanOptions, type PlanReason, type Skipped } from \"./planner.ts\";\nimport { roleOf } from \"./roles.ts\";\nimport type { Brief, Handoff, Methodology, Verdict, WorkItem, WorkflowState } from \"./types.ts\";\n\ninterface CompletedPayload {\n id: string;\n role: string;\n verdict: Verdict;\n produced: Handoff[\"produced\"];\n notes: string;\n do_not: string[];\n open_questions?: string[];\n}\n\nfunction completions(\n state: WorkflowState,\n itemId: string,\n): Array<CompletedPayload & { at: string }> {\n const out: Array<CompletedPayload & { at: string }> = [];\n for (const ev of state.events) {\n if (ev.type === \"item.completed\" && (ev.payload as CompletedPayload).id === itemId)\n out.push({ ...(ev.payload as CompletedPayload), at: ev.at });\n }\n return out;\n}\n\nfunction lastCompletion(state: WorkflowState, itemId: string): CompletedPayload | undefined {\n const all = completions(state, itemId);\n return all[all.length - 1];\n}\n\nexport function synthesizeBrief(\n state: WorkflowState,\n methodology: Methodology,\n item: WorkItem,\n): Brief {\n if (!item.role)\n fail(\n \"unknown-role\",\n `item \"${item.id}\" has no role assigned`,\n \"dispatch it with next() or set item.role\",\n { items: [item.id] },\n );\n const role = roleOf(state, item.role);\n if (!role)\n fail(\n \"unknown-role\",\n `role \"${item.role}\" does not exist`,\n `registered roles: ${Object.keys(state.roles).join(\", \")}`,\n );\n const upstream: Brief[\"upstream\"] = [];\n const doNot = [...role.do_not];\n const sources = [\n ...item.dependsOn,\n ...(item.type === \"bug\" || item.type === \"change-request\" ? (item.affects ?? []) : []),\n ];\n for (const dep of sources) {\n const p = lastCompletion(state, dep);\n if (!p) continue;\n upstream.push({ item: dep, produced: p.produced, notes: p.notes });\n for (const d of p.do_not) if (!doNot.includes(d)) doNot.push(d);\n }\n const priorHandoffs: Brief[\"priorHandoffs\"] = completions(state, item.id).map((p) => ({\n role: p.role,\n verdict: p.verdict,\n notes: p.notes,\n produced: p.produced,\n at: p.at,\n }));\n const touched = new Set([item.id, ...item.dependsOn]);\n const relatedBugs: Brief[\"relatedBugs\"] = Object.values(state.items)\n .filter(\n (b) =>\n (b.type === \"bug\" || b.type === \"change-request\") &&\n b.id !== item.id &&\n b.status !== \"done\" &&\n b.status !== \"dropped\" &&\n (b.affects ?? []).some((a) => touched.has(a)),\n )\n .map((b) => ({ id: b.id, title: b.title, affects: b.affects ?? [] }));\n const it = openIteration(state);\n const gate = stageOf(state, item.stage).gate;\n const brief: Brief = {\n item,\n role,\n modelTier: role.modelTier,\n invariants: [...methodology.invariants(state, item), ...state.agreements],\n do_not: doNot,\n acceptance: item.acceptance,\n upstream,\n priorHandoffs,\n relatedBugs,\n budgetRemaining: it ? remaining(it.budget, it.spent) : {},\n };\n if (gate) brief.gateAhead = gate;\n if (item.type === \"question\" && item.parent) {\n const p = lastCompletion(state, item.parent);\n if (p) {\n brief.parent = {\n item: item.parent,\n role: p.role,\n notes: p.notes,\n produced: p.produced,\n open_questions: p.open_questions ?? [],\n do_not: p.do_not,\n };\n for (const d of p.do_not) if (!doNot.includes(d)) doNot.push(d);\n }\n }\n return brief;\n}\n\n/** Open questions of finished items: the last completion per item, verdict done/needs-review, with open_questions left unanswered. */\nexport function openQuestions(\n state: WorkflowState,\n): Array<{ item: string; role: string; questions: string[]; at: string }> {\n const last = new Map<string, CompletedPayload & { at: string }>();\n for (const ev of state.events) {\n if (ev.type !== \"item.completed\") continue;\n const p = ev.payload as CompletedPayload;\n last.delete(p.id);\n last.set(p.id, { ...p, at: ev.at });\n }\n return [...last.values()]\n .filter(\n (p) =>\n (p.verdict === \"done\" || p.verdict === \"needs-review\") &&\n (p.open_questions ?? []).length > 0,\n )\n .map((p) => ({ item: p.id, role: p.role, questions: p.open_questions ?? [], at: p.at }));\n}\n\nexport interface NextResult {\n state: WorkflowState;\n briefs: Brief[];\n skipped: Skipped[];\n reason?: PlanReason;\n}\n\nexport function next(\n state: WorkflowState,\n methodology: Methodology,\n opts: PlanOptions = {},\n): NextResult {\n const res = plan(state, methodology, opts);\n const briefs = res.dispatched.map((d) =>\n synthesizeBrief(res.state, methodology, res.state.items[d.id]!),\n );\n return res.reason\n ? { state: res.state, briefs, skipped: res.skipped, reason: res.reason }\n : { state: res.state, briefs, skipped: res.skipped };\n}\n","import { addSpent } from \"./budget.ts\";\nimport { fail } from \"./errors.ts\";\nimport { checkGate, lastDispatchBefore, raisePending } from \"./gates.ts\";\nimport {\n addEvidence,\n addItem,\n advanceItem,\n clearRole,\n getItem,\n moveItem,\n patchItem,\n raiseBlocker,\n stageOf,\n} from \"./items.ts\";\nimport { applyAction } from \"./methodology.ts\";\nimport { assertPolicies } from \"./policies.ts\";\nimport { openIteration } from \"./planner.ts\";\nimport { rolesWith } from \"./roles.ts\";\nimport { appendEvent, nowOf } from \"./state.ts\";\nimport type {\n Accounting,\n ApplyResult,\n Handoff,\n Methodology,\n NewItem,\n Violation,\n WorkItem,\n WorkflowState,\n} from \"./types.ts\";\n\nconst VERDICTS: readonly string[] = [\"done\", \"needs-review\", \"rework\", \"blocked\", \"escalate\"];\nconst LESSON_SCOPES: readonly string[] = [\"policy\", \"skill\", \"memory\", \"spec\", \"review\"];\n\nconst isObj = (x: unknown): x is Record<string, unknown> =>\n typeof x === \"object\" && x !== null && !Array.isArray(x);\nconst str = (x: unknown) => typeof x === \"string\";\n\nfunction validate(state: WorkflowState, handoff: Handoff, acc: Accounting): void {\n const item = getItem(state, handoff.item);\n if (item.status !== \"in_progress\")\n fail(\n \"invalid-transition\",\n `item \"${item.id}\" is ${item.status}, not in_progress`,\n \"only dispatched items can be completed; call next() first\",\n { items: [item.id] },\n );\n if (!Array.isArray(handoff.do_not))\n fail(\n \"handoff-invalid\",\n `handoff for \"${item.id}\" has no do_not array`,\n \"set handoff.do_not to [] when there is nothing to forbid\",\n { items: [item.id] },\n );\n if (!Array.isArray(handoff.produced) || !Array.isArray(handoff.open_questions))\n fail(\n \"handoff-invalid\",\n `handoff for \"${item.id}\" needs produced[] and open_questions[]`,\n \"pass empty arrays when there is nothing\",\n { items: [item.id] },\n );\n const bad = (what: string, fix: string) =>\n fail(\"handoff-invalid\", `handoff for \"${item.id}\": ${what}`, fix, { items: [item.id] });\n const verdict = handoff.verdict ?? \"done\";\n if (!VERDICTS.includes(verdict))\n bad(`unknown verdict ${JSON.stringify(verdict)}`, `use one of: ${VERDICTS.join(\", \")}`);\n if (!handoff.produced.every((p) => isObj(p) && str(p.kind) && str(p.ref)))\n bad(\"produced[] entries need string kind and ref\", 'use { \"kind\": \"code\", \"ref\": \"src/a.ts\" }');\n const lessons: unknown = handoff.lessons ?? [];\n if (\n !Array.isArray(lessons) ||\n !lessons.every((l) => isObj(l) && str(l.text) && LESSON_SCOPES.includes(l.scope as string))\n )\n bad(\n \"lessons[] entries need a text and a scope\",\n `scope is one of: ${LESSON_SCOPES.join(\", \")}`,\n );\n const followUps: unknown = handoff.follow_ups ?? [];\n if (!Array.isArray(followUps) || !followUps.every((f) => isObj(f) && str(f.id) && str(f.title)))\n bad(\"follow_ups[] entries need a string id and title\", \"describe each follow-up as a new item\");\n if (handoff.role !== item.role)\n fail(\n \"handoff-invalid\",\n `handoff role \"${handoff.role}\" differs from the dispatched role \"${item.role}\"`,\n `complete as \"${item.role}\" or re-dispatch`,\n { items: [item.id] },\n );\n if (!acc.model || acc.model.trim() === \"\")\n fail(\n \"accounting-invalid\",\n `accounting for \"${item.id}\" has no model`,\n \"record the model id that actually ran the work\",\n { items: [item.id] },\n );\n for (const k of [\"tokensIn\", \"tokensOut\", \"durationMs\"] as const) {\n if (!Number.isFinite(acc[k]) || acc[k] < 0)\n fail(\n \"accounting-invalid\",\n `accounting.${k} must be a non-negative number`,\n `measure ${k} from the host's usage report`,\n { items: [item.id] },\n );\n }\n if (acc.tokensIn + acc.tokensOut === 0 && acc.estimate !== true)\n fail(\n \"accounting-invalid\",\n `accounting for \"${item.id}\" records 0 tokens`,\n \"pass the host's usage figures, or set estimate: true (CLI --estimate) to record a placeholder and correct it later with correctAccounting / exwf account\",\n { items: [item.id] },\n );\n}\n\n/** Stage the item was pulled from: the `from.stage` of its last transition into in_progress, else its current stage. */\nfunction pulledFromStage(item: WorkItem): string {\n for (let i = item.transitions.length - 1; i >= 0; i--) {\n const t = item.transitions[i]!;\n if (t.to.status === \"in_progress\") return t.from.stage;\n }\n return item.stage;\n}\n\n/** Stage a reworked item returns to: the from.stage of the last dispatch made from a stage strictly before the current one (so a reviewer's rework lands where the work was pulled from), else the plain pulled-from stage. */\nfunction reworkStage(state: WorkflowState, item: WorkItem): string {\n return lastDispatchBefore(state, item)?.from.stage ?? pulledFromStage(item);\n}\n\nexport function complete(\n state: WorkflowState,\n methodology: Methodology,\n handoff: Handoff,\n acc: Accounting,\n now?: string,\n): ApplyResult {\n validate(state, handoff, acc);\n // the methodology's rules see the completion (applyAction validates, appends nothing, then reduces)\n let result: ApplyResult | undefined;\n const ruled = applyAction(\n state,\n methodology,\n { type: \"item.complete\", by: handoff.role, payload: { item: handoff.item, handoff } },\n () => {\n result = completeBody(state, methodology, handoff, acc, now);\n return result.state;\n },\n );\n return { state: ruled.state, warnings: [...ruled.warnings, ...result!.warnings] };\n}\n\nfunction completeBody(\n state: WorkflowState,\n methodology: Methodology,\n handoff: Handoff,\n acc: Accounting,\n now?: string,\n): ApplyResult {\n const at = nowOf(now);\n const id = handoff.item;\n const role = handoff.role;\n let s: WorkflowState = { ...state, accounting: [...state.accounting, acc] };\n for (const p of handoff.produced)\n s = addEvidence(s, id, { kind: p.kind, ref: p.ref, by: role }, at);\n const it = openIteration(s);\n if (it && (it.committed.includes(id) || getItem(s, id).iteration === it.id)) {\n s = {\n ...s,\n iterations: s.iterations.map((x) =>\n x.id === it.id ? { ...x, spent: addSpent(x.spent, acc) } : x,\n ),\n };\n }\n\n for (const l of handoff.lessons ?? []) {\n const lid = `L${s.lessons.length + 1}`;\n s = {\n ...s,\n lessons: [\n ...s.lessons,\n { id: lid, at, text: l.text, scope: l.scope, status: \"raised\", from: role, item: id },\n ],\n };\n s = appendEvent(\n s,\n \"lesson.raised\",\n role,\n { id: lid, from: role, item: id, scope: l.scope },\n at,\n );\n }\n\n const followUps: string[] = [];\n for (const n of handoff.follow_ups ?? []) {\n const first = s.stages[0]!;\n const { iteration: _drop, ...rest } = n;\n s = addItem(\n s,\n { ...rest, stage: first.id, parent: id, tags: [...(n.tags ?? []), \"follow-up\"] },\n role,\n at,\n );\n followUps.push(n.id);\n }\n\n const verdict = handoff.verdict ?? \"done\";\n const warnings: Violation[] = [];\n if ((verdict === \"done\" || verdict === \"needs-review\") && handoff.open_questions.length > 0)\n warnings.push({\n rule: \"open-questions-ignored\",\n severity: \"warning\",\n item: id,\n message: `\"${id}\" finished with ${handoff.open_questions.length} open question(s) nobody will see: ${handoff.open_questions.join(\" | \")}`,\n fix: 'use verdict \"escalate\" to route them to a role with capability escalate, or answer them in the next brief',\n });\n if (verdict === \"rework\") {\n if (!handoff.notes || handoff.notes.trim() === \"\")\n fail(\n \"handoff-invalid\",\n `rework on \"${id}\" needs notes`,\n \"say what must change in handoff.notes\",\n { items: [id] },\n );\n const item = getItem(s, id);\n s = clearRole(moveItem(s, id, { stage: reworkStage(s, item), status: \"todo\" }, role, at), id);\n s = appendEvent(s, \"item.rework\", role, { id, by: role, notes: handoff.notes }, at);\n } else if (\n (verdict === \"done\" || verdict === \"needs-review\") &&\n getItem(s, id).type === \"question\"\n ) {\n // a question is answered, not delivered: it skips exit policies and gates\n const lastStageId = s.stages[s.stages.length - 1]!.id;\n s = moveItem(s, id, { stage: lastStageId, status: \"done\" }, role, at);\n } else if (verdict === \"done\" || verdict === \"needs-review\") {\n const item = getItem(s, id);\n const stage = stageOf(s, item.stage);\n assertPolicies(s, item, stage.exitPolicy, `leave \"${stage.id}\"`);\n if (stage.gate) {\n const res = checkGate(s, item, stage.gate, role);\n if (res.outcome === \"fail\")\n fail(\n \"gate-unmet\",\n `gate \"${stage.gate.id}\" blocks \"${id}\": ${res.violations.map((v) => v.message).join(\"; \")}`,\n res.violations.map((v) => v.fix).join(\"; \"),\n { items: [id], rule: res.violations[0]!.rule },\n );\n if (res.outcome === \"human\") {\n s = raisePending(\n s,\n {\n kind: \"gate\",\n item: id,\n gate: stage.gate.id,\n question: `Approve gate \"${stage.gate.id}\" for \"${item.title}\" (${id})?`,\n },\n at,\n );\n } else {\n s = appendEvent(\n advanceItem(s, id, role, verdict === \"needs-review\", at),\n \"gate.passed\",\n role,\n { item: id, gate: stage.gate.id },\n at,\n );\n }\n } else {\n s = advanceItem(s, id, role, verdict === \"needs-review\", at);\n }\n } else if (verdict === \"blocked\") {\n s = raiseBlocker(s, id, handoff.notes || \"blocked by worker\", role, role, at);\n } else if (verdict === \"escalate\") {\n const thinker = rolesWith(s, \"escalate\")[0];\n if (!thinker)\n fail(\n \"missing-capability\",\n `no role has capability \"escalate\" to receive the question from \"${id}\"`,\n \"register a role with capability escalate\",\n { items: [id] },\n );\n const n = Object.keys(s.items).filter((k) => k.startsWith(`${id}-q`)).length + 1;\n const qid = `${id}-q${n}`;\n const parent = getItem(s, id);\n const pulledFrom = pulledFromStage(parent);\n const q: NewItem = {\n id: qid,\n type: \"question\",\n title: handoff.open_questions.join(\" | \") || handoff.notes || `question from ${id}`,\n parent: id,\n role: thinker.id,\n priority: Number.MAX_SAFE_INTEGER,\n stage: pulledFrom,\n };\n if (parent.iteration !== undefined) q.iteration = parent.iteration;\n s = addItem(s, q, role, at);\n s = moveItem(s, id, { stage: pulledFrom, status: \"todo\" }, role, at);\n s = patchItem(s, id, (x) => ({ ...x, dependsOn: [...x.dependsOn, qid] }));\n s = appendEvent(s, \"item.escalated\", role, { id, question: qid, to: thinker.id }, at);\n }\n\n s = appendEvent(\n s,\n \"item.completed\",\n role,\n {\n id,\n role,\n verdict,\n produced: handoff.produced,\n notes: handoff.notes,\n do_not: handoff.do_not,\n open_questions: handoff.open_questions,\n followUps,\n tokens: acc.tokensIn + acc.tokensOut,\n durationMs: acc.durationMs,\n model: acc.model,\n },\n at,\n );\n if (methodology.afterComplete) s = methodology.afterComplete(s, id, at);\n return { state: s, warnings };\n}\n","import { fail } from \"./errors.ts\";\nimport { getItem } from \"./items.ts\";\nimport { appendEvent, nowOf } from \"./state.ts\";\nimport type { Accounting, Iteration, WorkflowState } from \"./types.ts\";\n\nexport interface AccountingPatch {\n tokensIn?: number;\n tokensOut?: number;\n durationMs?: number;\n model?: string;\n}\n\nconst NUMERIC = [\n [\"tokensIn\", \"tokens-in\"],\n [\"tokensOut\", \"tokens-out\"],\n [\"durationMs\", \"duration-ms\"],\n] as const;\n\nconst pick = (a: Accounting) => ({\n tokensIn: a.tokensIn,\n tokensOut: a.tokensOut,\n durationMs: a.durationMs,\n model: a.model,\n});\n\n/**\n * Rewrite one accounting line of an item (`line` is 1-based among the item's lines, default the last).\n * The owning iteration's spent follows the delta, open or closed; the event records before/after.\n */\nexport function correctAccounting(\n state: WorkflowState,\n itemId: string,\n patch: AccountingPatch,\n by: string,\n now?: string,\n line?: number,\n): WorkflowState {\n getItem(state, itemId);\n const indexes: number[] = [];\n state.accounting.forEach((a, i) => {\n if (a.item === itemId) indexes.push(i);\n });\n if (indexes.length === 0)\n fail(\n \"invalid-input\",\n `item \"${itemId}\" has no accounting line to correct`,\n `complete \"${itemId}\" first (exwf complete), then exwf account`,\n { items: [itemId] },\n );\n const n = line ?? indexes.length;\n if (!Number.isInteger(n) || n < 1 || n > indexes.length)\n fail(\n \"invalid-input\",\n `item \"${itemId}\" has ${indexes.length} accounting line(s), not line ${String(line)}`,\n `pass --line 1..${indexes.length}`,\n { items: [itemId] },\n );\n const idx = indexes[n - 1]!;\n const before = state.accounting[idx]!;\n for (const [k, flag] of NUMERIC) {\n const v = patch[k];\n if (v !== undefined && (!Number.isFinite(v) || v < 0))\n fail(\n \"accounting-invalid\",\n `${k} must be a non-negative number`,\n `pass --${flag} <n> with a measured figure`,\n { items: [itemId] },\n );\n }\n if (patch.model !== undefined && patch.model.trim() === \"\")\n fail(\n \"accounting-invalid\",\n \"model must not be empty\",\n \"pass --model with the model id that ran the work\",\n { items: [itemId] },\n );\n const { estimate: _drop, ...rest } = before;\n const after: Accounting = {\n ...rest,\n tokensIn: patch.tokensIn ?? before.tokensIn,\n tokensOut: patch.tokensOut ?? before.tokensOut,\n durationMs: patch.durationMs ?? before.durationMs,\n model: patch.model ?? before.model,\n };\n if (after.tokensIn + after.tokensOut === 0)\n fail(\n \"accounting-invalid\",\n `the correction leaves \"${itemId}\" at 0 tokens`,\n \"pass the host's usage figures with --tokens-in / --tokens-out\",\n { items: [itemId] },\n );\n const b = pick(before);\n const a = pick(after);\n const unchanged =\n b.tokensIn === a.tokensIn &&\n b.tokensOut === a.tokensOut &&\n b.durationMs === a.durationMs &&\n b.model === a.model;\n // replacing a placeholder with the same figures still settles it, so it is not a no-op\n if (unchanged && before.estimate !== true)\n fail(\n \"no-op\",\n `accounting for \"${itemId}\" line ${n} already has these figures`,\n \"pass at least one different value to exwf account\",\n { items: [itemId] },\n );\n const delta = {\n tokens: a.tokensIn + a.tokensOut - (b.tokensIn + b.tokensOut),\n durationMs: a.durationMs - b.durationMs,\n };\n const item = state.items[itemId]!;\n let owner: Iteration | undefined;\n for (const it of state.iterations) {\n // the last iteration that was open when the line was recorded and carried the item\n if (\n (it.committed.includes(itemId) || item.iteration === it.id) &&\n it.startedAt <= before.endedAt &&\n (it.endedAt === undefined || before.endedAt <= it.endedAt)\n )\n owner = it;\n }\n let s: WorkflowState = {\n ...state,\n accounting: state.accounting.map((x, i) => (i === idx ? after : x)),\n };\n if (owner)\n s = {\n ...s,\n iterations: s.iterations.map((it) =>\n it.id === owner.id\n ? {\n ...it,\n spent: {\n ...it.spent,\n tokens: Math.max(0, it.spent.tokens + delta.tokens),\n wallclockMs: Math.max(0, it.spent.wallclockMs + delta.durationMs),\n },\n }\n : it,\n ),\n };\n return appendEvent(\n s,\n \"accounting.corrected\",\n by,\n {\n item: itemId,\n line: n,\n iteration: owner?.id ?? null,\n before: b,\n after: a,\n delta,\n },\n nowOf(now),\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/brief.ts","../src/complete.ts","../src/accounting.ts"],"names":["completions","state","itemId","out","ev","lastCompletion","all","synthesizeBrief","methodology","item","fail","role","roleOf","upstream","doNot","sources","dep","p","d","priorHandoffs","touched","relatedBugs","b","a","it","openIteration","gate","stageOf","brief","remaining","openQuestions","last","next","opts","res","plan","briefs","VERDICTS","LESSON_SCOPES","isObj","x","str","validate","handoff","acc","getItem","bad","what","fix","verdict","lessons","l","followUps","f","k","pulledFromStage","i","t","reworkStage","lastDispatchBefore","complete","now","result","ruled","applyAction","completeBody","at","nowOf","id","s","addEvidence","addSpent","lid","appendEvent","n","first","_drop","rest","addItem","warnings","clearRole","moveItem","lastStageId","stage","assertPolicies","checkGate","v","raisePending","advanceItem","raiseBlocker","thinker","rolesWith","qid","parent","pulledFrom","q","patchItem","NUMERIC","pick","correctAccounting","patch","by","line","indexes","idx","before","flag","after","delta","owner"],"mappings":"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","file":"chunk-5PHK72VM.cjs","sourcesContent":["import { remaining } from \"./budget.ts\";\nimport { fail } from \"./errors.ts\";\nimport { stageOf } from \"./items.ts\";\nimport { openIteration, plan, type PlanOptions, type PlanReason, type Skipped } from \"./planner.ts\";\nimport { roleOf } from \"./roles.ts\";\nimport type { Brief, Handoff, Methodology, Verdict, WorkItem, WorkflowState } from \"./types.ts\";\n\ninterface CompletedPayload {\n id: string;\n role: string;\n verdict: Verdict;\n produced: Handoff[\"produced\"];\n notes: string;\n do_not: string[];\n open_questions?: string[];\n}\n\nfunction completions(\n state: WorkflowState,\n itemId: string,\n): Array<CompletedPayload & { at: string }> {\n const out: Array<CompletedPayload & { at: string }> = [];\n for (const ev of state.events) {\n if (ev.type === \"item.completed\" && (ev.payload as CompletedPayload).id === itemId)\n out.push({ ...(ev.payload as CompletedPayload), at: ev.at });\n }\n return out;\n}\n\nfunction lastCompletion(state: WorkflowState, itemId: string): CompletedPayload | undefined {\n const all = completions(state, itemId);\n return all[all.length - 1];\n}\n\nexport function synthesizeBrief(\n state: WorkflowState,\n methodology: Methodology,\n item: WorkItem,\n): Brief {\n if (!item.role)\n fail(\n \"unknown-role\",\n `item \"${item.id}\" has no role assigned`,\n \"dispatch it with next() or set item.role\",\n { items: [item.id] },\n );\n const role = roleOf(state, item.role);\n if (!role)\n fail(\n \"unknown-role\",\n `role \"${item.role}\" does not exist`,\n `registered roles: ${Object.keys(state.roles).join(\", \")}`,\n );\n const upstream: Brief[\"upstream\"] = [];\n const doNot = [...role.do_not];\n const sources = [\n ...item.dependsOn,\n ...(item.type === \"bug\" || item.type === \"change-request\" ? (item.affects ?? []) : []),\n ];\n for (const dep of sources) {\n const p = lastCompletion(state, dep);\n if (!p) continue;\n upstream.push({ item: dep, produced: p.produced, notes: p.notes });\n for (const d of p.do_not) if (!doNot.includes(d)) doNot.push(d);\n }\n const priorHandoffs: Brief[\"priorHandoffs\"] = completions(state, item.id).map((p) => ({\n role: p.role,\n verdict: p.verdict,\n notes: p.notes,\n produced: p.produced,\n at: p.at,\n }));\n const touched = new Set([item.id, ...item.dependsOn]);\n const relatedBugs: Brief[\"relatedBugs\"] = Object.values(state.items)\n .filter(\n (b) =>\n (b.type === \"bug\" || b.type === \"change-request\") &&\n b.id !== item.id &&\n b.status !== \"done\" &&\n b.status !== \"dropped\" &&\n (b.affects ?? []).some((a) => touched.has(a)),\n )\n .map((b) => ({ id: b.id, title: b.title, affects: b.affects ?? [] }));\n const it = openIteration(state);\n const gate = stageOf(state, item.stage).gate;\n const brief: Brief = {\n item,\n role,\n modelTier: role.modelTier,\n invariants: [...methodology.invariants(state, item), ...state.agreements],\n do_not: doNot,\n acceptance: item.acceptance,\n upstream,\n priorHandoffs,\n relatedBugs,\n budgetRemaining: it ? remaining(it.budget, it.spent) : {},\n };\n if (gate) brief.gateAhead = gate;\n if (item.type === \"question\" && item.parent) {\n const p = lastCompletion(state, item.parent);\n if (p) {\n brief.parent = {\n item: item.parent,\n role: p.role,\n notes: p.notes,\n produced: p.produced,\n open_questions: p.open_questions ?? [],\n do_not: p.do_not,\n };\n for (const d of p.do_not) if (!doNot.includes(d)) doNot.push(d);\n }\n }\n return brief;\n}\n\n/** Open questions of finished items: the last completion per item, verdict done/needs-review, with open_questions left unanswered. */\nexport function openQuestions(\n state: WorkflowState,\n): Array<{ item: string; role: string; questions: string[]; at: string }> {\n const last = new Map<string, CompletedPayload & { at: string }>();\n for (const ev of state.events) {\n if (ev.type !== \"item.completed\") continue;\n const p = ev.payload as CompletedPayload;\n last.delete(p.id);\n last.set(p.id, { ...p, at: ev.at });\n }\n return [...last.values()]\n .filter(\n (p) =>\n (p.verdict === \"done\" || p.verdict === \"needs-review\") &&\n (p.open_questions ?? []).length > 0,\n )\n .map((p) => ({ item: p.id, role: p.role, questions: p.open_questions ?? [], at: p.at }));\n}\n\nexport interface NextResult {\n state: WorkflowState;\n briefs: Brief[];\n skipped: Skipped[];\n reason?: PlanReason;\n}\n\nexport function next(\n state: WorkflowState,\n methodology: Methodology,\n opts: PlanOptions = {},\n): NextResult {\n const res = plan(state, methodology, opts);\n const briefs = res.dispatched.map((d) =>\n synthesizeBrief(res.state, methodology, res.state.items[d.id]!),\n );\n return res.reason\n ? { state: res.state, briefs, skipped: res.skipped, reason: res.reason }\n : { state: res.state, briefs, skipped: res.skipped };\n}\n","import { addSpent } from \"./budget.ts\";\nimport { fail } from \"./errors.ts\";\nimport { checkGate, lastDispatchBefore, raisePending } from \"./gates.ts\";\nimport {\n addEvidence,\n addItem,\n advanceItem,\n clearRole,\n getItem,\n moveItem,\n patchItem,\n raiseBlocker,\n stageOf,\n} from \"./items.ts\";\nimport { applyAction } from \"./methodology.ts\";\nimport { assertPolicies } from \"./policies.ts\";\nimport { openIteration } from \"./planner.ts\";\nimport { rolesWith } from \"./roles.ts\";\nimport { appendEvent, nowOf } from \"./state.ts\";\nimport type {\n Accounting,\n ApplyResult,\n Handoff,\n Methodology,\n NewItem,\n Violation,\n WorkItem,\n WorkflowState,\n} from \"./types.ts\";\n\nconst VERDICTS: readonly string[] = [\"done\", \"needs-review\", \"rework\", \"blocked\", \"escalate\"];\nconst LESSON_SCOPES: readonly string[] = [\"policy\", \"skill\", \"memory\", \"spec\", \"review\"];\n\nconst isObj = (x: unknown): x is Record<string, unknown> =>\n typeof x === \"object\" && x !== null && !Array.isArray(x);\nconst str = (x: unknown) => typeof x === \"string\";\n\nfunction validate(state: WorkflowState, handoff: Handoff, acc: Accounting): void {\n const item = getItem(state, handoff.item);\n if (item.status !== \"in_progress\")\n fail(\n \"invalid-transition\",\n `item \"${item.id}\" is ${item.status}, not in_progress`,\n \"only dispatched items can be completed; call next() first\",\n { items: [item.id] },\n );\n if (!Array.isArray(handoff.do_not))\n fail(\n \"handoff-invalid\",\n `handoff for \"${item.id}\" has no do_not array`,\n \"set handoff.do_not to [] when there is nothing to forbid\",\n { items: [item.id] },\n );\n if (!Array.isArray(handoff.produced) || !Array.isArray(handoff.open_questions))\n fail(\n \"handoff-invalid\",\n `handoff for \"${item.id}\" needs produced[] and open_questions[]`,\n \"pass empty arrays when there is nothing\",\n { items: [item.id] },\n );\n const bad = (what: string, fix: string) =>\n fail(\"handoff-invalid\", `handoff for \"${item.id}\": ${what}`, fix, { items: [item.id] });\n const verdict = handoff.verdict ?? \"done\";\n if (!VERDICTS.includes(verdict))\n bad(`unknown verdict ${JSON.stringify(verdict)}`, `use one of: ${VERDICTS.join(\", \")}`);\n if (!handoff.produced.every((p) => isObj(p) && str(p.kind) && str(p.ref)))\n bad(\"produced[] entries need string kind and ref\", 'use { \"kind\": \"code\", \"ref\": \"src/a.ts\" }');\n const lessons: unknown = handoff.lessons ?? [];\n if (\n !Array.isArray(lessons) ||\n !lessons.every((l) => isObj(l) && str(l.text) && LESSON_SCOPES.includes(l.scope as string))\n )\n bad(\n \"lessons[] entries need a text and a scope\",\n `scope is one of: ${LESSON_SCOPES.join(\", \")}`,\n );\n const followUps: unknown = handoff.follow_ups ?? [];\n if (!Array.isArray(followUps) || !followUps.every((f) => isObj(f) && str(f.id) && str(f.title)))\n bad(\"follow_ups[] entries need a string id and title\", \"describe each follow-up as a new item\");\n if (handoff.role !== item.role)\n fail(\n \"handoff-invalid\",\n `handoff role \"${handoff.role}\" differs from the dispatched role \"${item.role}\"`,\n `complete as \"${item.role}\" or re-dispatch`,\n { items: [item.id] },\n );\n if (!acc.model || acc.model.trim() === \"\")\n fail(\n \"accounting-invalid\",\n `accounting for \"${item.id}\" has no model`,\n \"record the model id that actually ran the work\",\n { items: [item.id] },\n );\n for (const k of [\"tokensIn\", \"tokensOut\", \"durationMs\"] as const) {\n if (!Number.isFinite(acc[k]) || acc[k] < 0)\n fail(\n \"accounting-invalid\",\n `accounting.${k} must be a non-negative number`,\n `measure ${k} from the host's usage report`,\n { items: [item.id] },\n );\n }\n if (acc.tokensIn + acc.tokensOut === 0 && acc.estimate !== true)\n fail(\n \"accounting-invalid\",\n `accounting for \"${item.id}\" records 0 tokens`,\n \"pass the host's usage figures, or set estimate: true (CLI --estimate) to record a placeholder and correct it later with correctAccounting / exwf account\",\n { items: [item.id] },\n );\n}\n\n/** Stage the item was pulled from: the `from.stage` of its last transition into in_progress, else its current stage. */\nfunction pulledFromStage(item: WorkItem): string {\n for (let i = item.transitions.length - 1; i >= 0; i--) {\n const t = item.transitions[i]!;\n if (t.to.status === \"in_progress\") return t.from.stage;\n }\n return item.stage;\n}\n\n/** Stage a reworked item returns to: the from.stage of the last dispatch made from a stage strictly before the current one (so a reviewer's rework lands where the work was pulled from), else the plain pulled-from stage. */\nfunction reworkStage(state: WorkflowState, item: WorkItem): string {\n return lastDispatchBefore(state, item)?.from.stage ?? pulledFromStage(item);\n}\n\nexport function complete(\n state: WorkflowState,\n methodology: Methodology,\n handoff: Handoff,\n acc: Accounting,\n now?: string,\n): ApplyResult {\n validate(state, handoff, acc);\n // the methodology's rules see the completion (applyAction validates, appends nothing, then reduces)\n let result: ApplyResult | undefined;\n const ruled = applyAction(\n state,\n methodology,\n { type: \"item.complete\", by: handoff.role, payload: { item: handoff.item, handoff } },\n () => {\n result = completeBody(state, methodology, handoff, acc, now);\n return result.state;\n },\n );\n return { state: ruled.state, warnings: [...ruled.warnings, ...result!.warnings] };\n}\n\nfunction completeBody(\n state: WorkflowState,\n methodology: Methodology,\n handoff: Handoff,\n acc: Accounting,\n now?: string,\n): ApplyResult {\n const at = nowOf(now);\n const id = handoff.item;\n const role = handoff.role;\n let s: WorkflowState = { ...state, accounting: [...state.accounting, acc] };\n for (const p of handoff.produced)\n s = addEvidence(s, id, { kind: p.kind, ref: p.ref, by: role }, at);\n const it = openIteration(s);\n if (it && (it.committed.includes(id) || getItem(s, id).iteration === it.id)) {\n s = {\n ...s,\n iterations: s.iterations.map((x) =>\n x.id === it.id ? { ...x, spent: addSpent(x.spent, acc) } : x,\n ),\n };\n }\n\n for (const l of handoff.lessons ?? []) {\n const lid = `L${s.lessons.length + 1}`;\n s = {\n ...s,\n lessons: [\n ...s.lessons,\n { id: lid, at, text: l.text, scope: l.scope, status: \"raised\", from: role, item: id },\n ],\n };\n s = appendEvent(\n s,\n \"lesson.raised\",\n role,\n { id: lid, from: role, item: id, scope: l.scope },\n at,\n );\n }\n\n const followUps: string[] = [];\n for (const n of handoff.follow_ups ?? []) {\n const first = s.stages[0]!;\n const { iteration: _drop, ...rest } = n;\n s = addItem(\n s,\n { ...rest, stage: first.id, parent: id, tags: [...(n.tags ?? []), \"follow-up\"] },\n role,\n at,\n );\n followUps.push(n.id);\n }\n\n const verdict = handoff.verdict ?? \"done\";\n const warnings: Violation[] = [];\n if ((verdict === \"done\" || verdict === \"needs-review\") && handoff.open_questions.length > 0)\n warnings.push({\n rule: \"open-questions-ignored\",\n severity: \"warning\",\n item: id,\n message: `\"${id}\" finished with ${handoff.open_questions.length} open question(s) nobody will see: ${handoff.open_questions.join(\" | \")}`,\n fix: 'use verdict \"escalate\" to route them to a role with capability escalate, or answer them in the next brief',\n });\n if (verdict === \"rework\") {\n if (!handoff.notes || handoff.notes.trim() === \"\")\n fail(\n \"handoff-invalid\",\n `rework on \"${id}\" needs notes`,\n \"say what must change in handoff.notes\",\n { items: [id] },\n );\n const item = getItem(s, id);\n s = clearRole(moveItem(s, id, { stage: reworkStage(s, item), status: \"todo\" }, role, at), id);\n s = appendEvent(s, \"item.rework\", role, { id, by: role, notes: handoff.notes }, at);\n } else if (\n (verdict === \"done\" || verdict === \"needs-review\") &&\n getItem(s, id).type === \"question\"\n ) {\n // a question is answered, not delivered: it skips exit policies and gates\n const lastStageId = s.stages[s.stages.length - 1]!.id;\n s = moveItem(s, id, { stage: lastStageId, status: \"done\" }, role, at);\n } else if (verdict === \"done\" || verdict === \"needs-review\") {\n const item = getItem(s, id);\n const stage = stageOf(s, item.stage);\n assertPolicies(s, item, stage.exitPolicy, `leave \"${stage.id}\"`);\n if (stage.gate) {\n const res = checkGate(s, item, stage.gate, role);\n if (res.outcome === \"fail\")\n fail(\n \"gate-unmet\",\n `gate \"${stage.gate.id}\" blocks \"${id}\": ${res.violations.map((v) => v.message).join(\"; \")}`,\n res.violations.map((v) => v.fix).join(\"; \"),\n { items: [id], rule: res.violations[0]!.rule },\n );\n if (res.outcome === \"human\") {\n s = raisePending(\n s,\n {\n kind: \"gate\",\n item: id,\n gate: stage.gate.id,\n question: `Approve gate \"${stage.gate.id}\" for \"${item.title}\" (${id})?`,\n },\n at,\n );\n } else {\n s = appendEvent(\n advanceItem(s, id, role, verdict === \"needs-review\", at),\n \"gate.passed\",\n role,\n { item: id, gate: stage.gate.id },\n at,\n );\n }\n } else {\n s = advanceItem(s, id, role, verdict === \"needs-review\", at);\n }\n } else if (verdict === \"blocked\") {\n s = raiseBlocker(s, id, handoff.notes || \"blocked by worker\", role, role, at);\n } else if (verdict === \"escalate\") {\n const thinker = rolesWith(s, \"escalate\")[0];\n if (!thinker)\n fail(\n \"missing-capability\",\n `no role has capability \"escalate\" to receive the question from \"${id}\"`,\n \"register a role with capability escalate\",\n { items: [id] },\n );\n const n = Object.keys(s.items).filter((k) => k.startsWith(`${id}-q`)).length + 1;\n const qid = `${id}-q${n}`;\n const parent = getItem(s, id);\n const pulledFrom = pulledFromStage(parent);\n const q: NewItem = {\n id: qid,\n type: \"question\",\n title: handoff.open_questions.join(\" | \") || handoff.notes || `question from ${id}`,\n parent: id,\n role: thinker.id,\n priority: Number.MAX_SAFE_INTEGER,\n stage: pulledFrom,\n };\n if (parent.iteration !== undefined) q.iteration = parent.iteration;\n s = addItem(s, q, role, at);\n s = moveItem(s, id, { stage: pulledFrom, status: \"todo\" }, role, at);\n s = patchItem(s, id, (x) => ({ ...x, dependsOn: [...x.dependsOn, qid] }));\n s = appendEvent(s, \"item.escalated\", role, { id, question: qid, to: thinker.id }, at);\n }\n\n s = appendEvent(\n s,\n \"item.completed\",\n role,\n {\n id,\n role,\n verdict,\n produced: handoff.produced,\n notes: handoff.notes,\n do_not: handoff.do_not,\n open_questions: handoff.open_questions,\n followUps,\n tokens: acc.tokensIn + acc.tokensOut,\n durationMs: acc.durationMs,\n model: acc.model,\n },\n at,\n );\n if (methodology.afterComplete) s = methodology.afterComplete(s, id, at);\n return { state: s, warnings };\n}\n","import { fail } from \"./errors.ts\";\nimport { getItem } from \"./items.ts\";\nimport { appendEvent, nowOf } from \"./state.ts\";\nimport type { Accounting, Iteration, WorkflowState } from \"./types.ts\";\n\nexport interface AccountingPatch {\n tokensIn?: number;\n tokensOut?: number;\n durationMs?: number;\n model?: string;\n}\n\nconst NUMERIC = [\n [\"tokensIn\", \"tokens-in\"],\n [\"tokensOut\", \"tokens-out\"],\n [\"durationMs\", \"duration-ms\"],\n] as const;\n\nconst pick = (a: Accounting) => ({\n tokensIn: a.tokensIn,\n tokensOut: a.tokensOut,\n durationMs: a.durationMs,\n model: a.model,\n});\n\n/**\n * Rewrite one accounting line of an item (`line` is 1-based among the item's lines, default the last).\n * The owning iteration's spent follows the delta, open or closed; the event records before/after.\n */\nexport function correctAccounting(\n state: WorkflowState,\n itemId: string,\n patch: AccountingPatch,\n by: string,\n now?: string,\n line?: number,\n): WorkflowState {\n getItem(state, itemId);\n const indexes: number[] = [];\n state.accounting.forEach((a, i) => {\n if (a.item === itemId) indexes.push(i);\n });\n if (indexes.length === 0)\n fail(\n \"invalid-input\",\n `item \"${itemId}\" has no accounting line to correct`,\n `complete \"${itemId}\" first (exwf complete), then exwf account`,\n { items: [itemId] },\n );\n const n = line ?? indexes.length;\n if (!Number.isInteger(n) || n < 1 || n > indexes.length)\n fail(\n \"invalid-input\",\n `item \"${itemId}\" has ${indexes.length} accounting line(s), not line ${String(line)}`,\n `pass --line 1..${indexes.length}`,\n { items: [itemId] },\n );\n const idx = indexes[n - 1]!;\n const before = state.accounting[idx]!;\n for (const [k, flag] of NUMERIC) {\n const v = patch[k];\n if (v !== undefined && (!Number.isFinite(v) || v < 0))\n fail(\n \"accounting-invalid\",\n `${k} must be a non-negative number`,\n `pass --${flag} <n> with a measured figure`,\n { items: [itemId] },\n );\n }\n if (patch.model !== undefined && patch.model.trim() === \"\")\n fail(\n \"accounting-invalid\",\n \"model must not be empty\",\n \"pass --model with the model id that ran the work\",\n { items: [itemId] },\n );\n const { estimate: _drop, ...rest } = before;\n const after: Accounting = {\n ...rest,\n tokensIn: patch.tokensIn ?? before.tokensIn,\n tokensOut: patch.tokensOut ?? before.tokensOut,\n durationMs: patch.durationMs ?? before.durationMs,\n model: patch.model ?? before.model,\n };\n if (after.tokensIn + after.tokensOut === 0)\n fail(\n \"accounting-invalid\",\n `the correction leaves \"${itemId}\" at 0 tokens`,\n \"pass the host's usage figures with --tokens-in / --tokens-out\",\n { items: [itemId] },\n );\n const b = pick(before);\n const a = pick(after);\n const unchanged =\n b.tokensIn === a.tokensIn &&\n b.tokensOut === a.tokensOut &&\n b.durationMs === a.durationMs &&\n b.model === a.model;\n // replacing a placeholder with the same figures still settles it, so it is not a no-op\n if (unchanged && before.estimate !== true)\n fail(\n \"no-op\",\n `accounting for \"${itemId}\" line ${n} already has these figures`,\n \"pass at least one different value to exwf account\",\n { items: [itemId] },\n );\n const delta = {\n tokens: a.tokensIn + a.tokensOut - (b.tokensIn + b.tokensOut),\n durationMs: a.durationMs - b.durationMs,\n };\n const item = state.items[itemId]!;\n let owner: Iteration | undefined;\n for (const it of state.iterations) {\n // the last iteration that was open when the line was recorded and carried the item\n if (\n (it.committed.includes(itemId) || item.iteration === it.id) &&\n it.startedAt <= before.endedAt &&\n (it.endedAt === undefined || before.endedAt <= it.endedAt)\n )\n owner = it;\n }\n let s: WorkflowState = {\n ...state,\n accounting: state.accounting.map((x, i) => (i === idx ? after : x)),\n };\n if (owner)\n s = {\n ...s,\n iterations: s.iterations.map((it) =>\n it.id === owner.id\n ? {\n ...it,\n spent: {\n ...it.spent,\n tokens: Math.max(0, it.spent.tokens + delta.tokens),\n wallclockMs: Math.max(0, it.spent.wallclockMs + delta.durationMs),\n },\n }\n : it,\n ),\n };\n return appendEvent(\n s,\n \"accounting.corrected\",\n by,\n {\n item: itemId,\n line: n,\n iteration: owner?.id ?? null,\n before: b,\n after: a,\n delta,\n },\n nowOf(now),\n );\n}\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';var chunkVXH2FAKV_cjs=require('./chunk-VXH2FAKV.cjs'),chunkXMO2RCXB_cjs=require('./chunk-XMO2RCXB.cjs'),chunkS3BXVHO7_cjs=require('./chunk-S3BXVHO7.cjs'),exsorted=require('exsorted');var P=new Set(["in_progress","blocked","awaiting_human"]),E=new Set(["todo","in_progress","blocked","review","awaiting_human"]);function se(e){let t=e.stages[0];return t||chunkS3BXVHO7_cjs.b("config-invalid","kanban board has no columns","init with at least options, a commitment column and a delivery column"),t}function K(e){let t=e.stages.find(a=>a.commitmentPoint);return t||chunkS3BXVHO7_cjs.b("config-invalid","no column is the commitment point","set commitmentPoint: true on exactly one column"),t}function ee(e){let t=e.stages.find(a=>a.deliveryPoint);return t||chunkS3BXVHO7_cjs.b("config-invalid","no column is the delivery point","set deliveryPoint: true on the last column"),t}function X(e,t){return chunkXMO2RCXB_cjs.p(e,t),e.stages.findIndex(a=>a.id===t)}function D(e,t){let a=X(e,t.stage);return a>=X(e,K(e).id)&&a<X(e,ee(e).id)}function U(e){return Object.values(e.items).filter(t=>t.classOfService==="expedite"&&P.has(t.status)&&D(e,t)).map(t=>t.id)}function _(e){for(let t=e.transitions.length-1;t>=0;t--){let a=e.transitions[t];if(a.to.stage===e.stage&&a.from.stage!==e.stage)return a.at}}var Y=["replenishment","delivery-planning","service-delivery-review","operations-review","risk-review","strategy-review"],I=["expedite","fixed-date","standard","intangible"],te=864e5;function h(e){return e.config}var Pe=[{id:"options",name:"Options",policies:[{kind:"acceptance-written"}]},{id:"ready",name:"Ready",wipLimit:4,commitmentPoint:true,policies:[{kind:"dependencies-done"}]},{id:"dev",name:"Development",wipLimit:3,policies:[{kind:"evidence",evidenceKind:"test-output"}]},{id:"review",name:"Review",wipLimit:2,review:true,policies:[{kind:"no-open-blockers"}]},{id:"done",name:"Done",deliveryPoint:true,policies:[]}],B=e=>typeof e=="object"&&e!==null&&!Array.isArray(e);function q(e,t,a,s=1){if(e!==void 0)return (typeof e!="number"||!Number.isFinite(e)||e<s)&&chunkS3BXVHO7_cjs.b("config-invalid",`kanban config.${t} must be a number >= ${s} (got ${JSON.stringify(e)})`,a),e}var Me=["acceptance-written","estimate-present","no-open-blockers","dependencies-done"],ae=e=>typeof e=="string"&&e.trim()!=="";function ce(e,t){Array.isArray(e)||chunkS3BXVHO7_cjs.b("config-invalid",`kanban config.${t} must be an array of Policy objects`,'e.g. [{ "kind": "evidence", "evidenceKind": "test-output" }]');let a=[];return e.forEach((s,m)=>{let f=`kanban config.${t}[${m}]`;B(s)&&(s.kind==="evidence"?ae(s.evidenceKind):s.kind==="custom"?ae(s.id)&&ae(s.description):typeof s.kind=="string"&&Me.includes(s.kind))||chunkS3BXVHO7_cjs.b("config-invalid",`${f} must be a Policy`,`use a Policy such as { "kind": "evidence", "evidenceKind": "test-output" }, { "kind": "custom", "id": "x", "description": "..." } or one of: ${Me.join(", ")}`),a.push(s);}),a}function Ne(e,t){B(e)||chunkS3BXVHO7_cjs.b("config-invalid",`kanban config.columns[${t}] must be an object`,'e.g. { "id": "dev", "policies": [] }'),chunkS3BXVHO7_cjs.c(e.id,`kanban config.columns[${t}].id`);let a=e.id;Array.isArray(e.policies)||chunkS3BXVHO7_cjs.b("config-invalid",`kanban config.columns[${t}] ("${a}") needs policies: Policy[]`,'every column states its policies explicitly, e.g. [{ "kind": "acceptance-written" }]');let s={id:a,name:typeof e.name=="string"&&e.name.trim()!==""?e.name:a,policies:ce(e.policies,`columns[${t}].policies`)},m=q(e.wipLimit,`columns[${t}].wipLimit`,"omit wipLimit for no limit");m!==void 0&&(s.wipLimit=m);for(let f of ["commitmentPoint","deliveryPoint","review"])e[f]!==void 0&&(typeof e[f]!="boolean"&&chunkS3BXVHO7_cjs.b("config-invalid",`kanban config.columns[${t}].${f} must be a boolean`,`set ${f}: true or omit it`),e[f]&&(s[f]=true));return s}function H(e){let t=e??{};t.columns!==void 0&&!Array.isArray(t.columns)&&chunkS3BXVHO7_cjs.b("config-invalid","kanban config.columns must be an array of columns","omit columns for the default board (options, ready, dev, review, done)");let a=t.columns===void 0?Pe.map(o=>({...o})):t.columns.map(Ne),s=new Set;for(let o of a)s.has(o.id)&&chunkS3BXVHO7_cjs.b("config-invalid",`duplicate column id "${o.id}"`,"give every column a unique id"),s.add(o.id);let m={},f=t.classesOfService??{};B(f)||chunkS3BXVHO7_cjs.b("config-invalid","kanban config.classesOfService must be an object keyed by class",'e.g. { "expedite": { "wipBypass": 1 } }');for(let[o,c]of Object.entries(f)){I.includes(o)||chunkS3BXVHO7_cjs.b("config-invalid",`kanban config.classesOfService.${o} is not a class of service`,`use one of: ${I.join(", ")}`),B(c)||chunkS3BXVHO7_cjs.b("config-invalid",`kanban config.classesOfService.${o} must be an object`,'e.g. { "wipBypass": 1, "sle": { "percentile": 85, "targetMs": 604800000 } }');let d={},p=q(c.wipBypass,`classesOfService.${o}.wipBypass`,"omit it for the default 1",0);if(p!==void 0&&(d.wipBypass=p),c.sle!==void 0){let g=c.sle;(!B(g)||typeof g.percentile!="number"||g.percentile<0||g.percentile>100)&&chunkS3BXVHO7_cjs.b("config-invalid",`kanban config.classesOfService.${o}.sle.percentile must be 0..100`,'e.g. { "percentile": 85, "targetMs": 604800000 }');let k=q(g.targetMs,`classesOfService.${o}.sle.targetMs`,"state the service level target in milliseconds");k===void 0&&chunkS3BXVHO7_cjs.b("config-invalid",`kanban config.classesOfService.${o}.sle.targetMs is required`,"state the service level target in milliseconds"),d.sle={percentile:g.percentile,targetMs:k};}m[o]=d;}let y=t.fairness??{};(!B(y)||y.aging!==void 0&&typeof y.aging!="boolean")&&chunkS3BXVHO7_cjs.b("config-invalid","kanban config.fairness must be { aging: boolean, maxDeferralRounds?: number }","omit it for aging on");let l=q(y.maxDeferralRounds,"fairness.maxDeferralRounds","omit it for 5 rounds"),i={aging:y.aging===void 0?true:y.aging,maxDeferralRounds:l??5},r={},n=t.cadences??{};B(n)||chunkS3BXVHO7_cjs.b("config-invalid","kanban config.cadences must be an object keyed by cadence",'e.g. { "replenishment": { "everyTurns": 10 } }');for(let[o,c]of Object.entries(n)){Y.includes(o)||chunkS3BXVHO7_cjs.b("config-invalid",`kanban config.cadences.${o} is not a cadence`,`use one of: ${Y.join(", ")}`),B(c)||chunkS3BXVHO7_cjs.b("config-invalid",`kanban config.cadences.${o} must be an object`,'e.g. { "everyTurns": 10 }');let d=q(c.everyTurns,`cadences.${o}.everyTurns`,"omit it when the cadence is run by hand");r[o]=d===void 0?{}:{everyTurns:d};}return {columns:a,classesOfService:m,fairness:i,cadences:r,throughputWindowMs:q(t.throughputWindowMs,"throughputWindowMs","omit it for one week")??7*te,maxExpedite:q(t.maxExpedite,"maxExpedite","omit it for 1")??1}}function ne(e,t){return e.events.find(s=>s.type==="item.added"&&s.payload.id===t)?.at??e.events[0].at}function ie(e,t,a){return Date.parse(a)-Date.parse(_(t)??ne(e,t.id))}function qe(e,t){return e.stages.map(a=>{let s=Object.values(e.items).filter(l=>l.stage===a.id&&l.status!=="dropped"),m=exsorted.timSort(s.map(l=>({id:l.id,title:l.title,type:l.type,status:l.status,classOfService:l.classOfService??"standard",role:l.role??null,ageMs:ie(e,l,t),blocked:l.blockers.some(i=>!i.clearedAt),deadline:l.deadline??null})),(l,i)=>i.ageMs-l.ageMs||(l.id<i.id?-1:1)),f=m.filter(l=>P.has(l.status)).length,y=m.filter(l=>l.status==="todo"||l.status==="review").length;return {id:a.id,name:a.name,wipLimit:a.wipLimit??null,active:f,queued:y,overLimit:a.wipLimit!==void 0&&f>a.wipLimit,commitmentPoint:a.commitmentPoint===true,deliveryPoint:a.deliveryPoint===true,cards:m}})}var Ee=e=>`cadence.${e}`;function le(e){let t=h(e);return Y.map(a=>{let s=0,m=null;for(let l of e.events)l.type===Ee(a)&&(s=l.seq,m=l.at);let f=e.events.filter(l=>l.type==="item.completed"&&l.seq>s).length,y=t.cadences[a]?.everyTurns??null;return {cadence:a,everyTurns:y,lastAt:m,turnsSince:f,due:y!==null&&f>=y}})}var De=(e,t)=>Date.parse(t)-Date.parse(e),Ie=e=>e.transition??null;function re(e,t,a){let s=new Map,m=[],f=e[0]?.at??"1970-01-01T00:00:00.000Z",y=(i,r,n)=>{r===t&&i.committedAt===void 0&&(i.committedAt=n),r===a&&i.deliveredAt===void 0&&(i.deliveredAt=n);},l=(i,r,n)=>{i.since.status==="in_progress"&&(i.activeMs+=De(i.since.at,n)),i.since.status==="blocked"&&(i.blockedMs+=De(i.since.at,n)),i.since={status:r.status,at:n},r.stage!==i.stage&&(i.stays[i.stays.length-1].leftAt=n,i.stays.push({stage:r.stage,enteredAt:n}),y(i,r.stage,n)),i.stage=r.stage,i.status=r.status;};for(let i of e){f=i.at;let r=i.payload??{};switch(i.type){case "item.added":{let n=r.id,o=r.stage,c={id:n,type:typeof r.type=="string"?r.type:"task",stage:o,status:"todo",stays:[{stage:o,enteredAt:i.at}],classOfService:"standard",activeMs:0,blockedMs:0,since:{status:"todo",at:i.at}};y(c,o,i.at),s.set(n,c);break}case "item.transition":{let n=s.get(r.id);if(!n)break;l(n,r.to,i.at);break}case "cadence.replenishment":{let n=r.items??[];for(let o of n){let c=s.get(o.id);c&&(c.classOfService=o.classOfService,o.deadline?c.deadline=o.deadline:delete c.deadline);}break}case "blocker.raised":{m.push({item:r.id,blocker:r.blocker,raisedAt:i.at});let n=s.get(r.id),o=Ie(r);n&&o&&l(n,o.to,i.at);break}case "blocker.cleared":{let n=m.find(d=>d.item===r.id&&d.blocker===r.blocker&&d.clearedAt===void 0);n&&(n.clearedAt=i.at);let o=s.get(r.id),c=Ie(r);o&&c&&l(o,c.to,i.at);break}}}return {items:s,blockers:m,lastAt:f}}function V(e,t){if(e.length===0)return 0;let a=exsorted.timSort([...e],(m,f)=>m-f),s=Math.min(a.length,Math.max(1,Math.ceil(t/100*a.length)));return a[s-1]}var G=(e,t)=>Date.parse(t)-Date.parse(e),We=(e,t)=>t===0?0:e/t;function je(e){let t=e.stages.find(s=>s.commitmentPoint)?.id??"",a=e.stages.find(s=>s.deliveryPoint)?.id??"";return {commitment:t,delivery:a,ci:e.stages.findIndex(s=>s.id===t),di:e.stages.findIndex(s=>s.id===a)}}function Le(e){let t={};for(let a of e.items.values())for(let s of a.stays)s.leftAt!==void 0&&(t[s.stage]??=[]).push(G(s.enteredAt,s.leftAt));return t}function me(e){let t=je(e);return Le(re(e.events,t.commitment,t.delivery))}function Z(e){let t=h(e),a=je(e),s=re(e.events,a.commitment,a.delivery),m=[...s.items.values()],f=e.stages.map(u=>u.id),y=new Map(f.map((u,v)=>[u,v])),l=exsorted.timSort(m.filter(u=>u.type!=="question"&&u.committedAt!==void 0&&u.deliveredAt!==void 0),(u,v)=>Date.parse(u.deliveredAt)-Date.parse(v.deliveredAt)),i=l.map(u=>G(u.committedAt,u.deliveredAt)),r={};for(let[u,v]of Object.entries(Le(s)))r[u]=v.reduce((w,x)=>w+x,0)/v.length;let n=m.filter(u=>u.type!=="question"&&u.committedAt!==void 0).map(u=>Date.parse(u.committedAt)),o=[];if(n.length>0){let u=n.reduce((w,x)=>x<w?x:w,n[0]),v=Math.floor((Date.parse(s.lastAt)-u)/t.throughputWindowMs)+1;o=Array.from({length:v},()=>0);for(let w of l){let x=Math.floor((Date.parse(w.deliveredAt)-u)/t.throughputWindowMs);x>=0&&x<v&&(o[x]+=1);}}let c=Object.fromEntries(f.map(u=>[u,0])),d={};for(let u of m){if(!E.has(u.status))continue;Object.hasOwn(c,u.stage)&&(c[u.stage]+=1);let v=y.get(u.stage);v!==void 0&&v>=a.ci&&v<a.di&&(d[u.id]=G(u.stays[u.stays.length-1].enteredAt,s.lastAt));}let p=new Map;for(let u of m)for(let v of u.stays){let w=p.get(v.stage)??new Map;w.has(u.id)||w.set(u.id,v.enteredAt),p.set(v.stage,w);}let g=exsorted.timSort([...new Set(e.events.map(u=>u.at.slice(0,10)))],(u,v)=>u<v?-1:u>v?1:0),k={};for(let u of g)for(let v of f)k[`${u}:${v}`]=[...p.get(v)?.values()??[]].filter(w=>w.slice(0,10)<=u).length;let M={};for(let[u,v]of Object.entries(t.classesOfService)){if(!v?.sle)continue;let w=l.filter(x=>x.classOfService===u);w.length!==0&&(M[u]=w.filter(x=>G(x.committedAt,x.deliveredAt)<=v.sle.targetMs).length/w.length);}let C=s.blockers.reduce((u,v)=>u+G(v.raisedAt,v.clearedAt??s.lastAt),0);return {leadTimeMs:i,leadTimeP50:V(i,50),leadTimeP85:V(i,85),cycleTimeMsByColumn:r,throughput:o,wipByColumn:c,flowEfficiency:We(l.reduce((u,v)=>u+v.activeMs,0),i.reduce((u,v)=>u+v,0)),agingWipMs:d,cumulativeFlow:k,sleCompliance:M,blockerTimeMs:C,meanBlockerTimeMs:We(C,s.blockers.length)}}function fe(e,t){let a=Date.parse(t),s=me(e),m=[],f=[],y=Object.fromEntries(e.stages.map(i=>[i.id,0])),l=Object.fromEntries(e.stages.map(i=>[i.id,0]));for(let i of Object.values(e.items)){for(let r of i.blockers)r.clearedAt||m.push({item:i.id,blocker:r.id,owner:r.owner,reason:r.reason,ageMs:a-Date.parse(r.raisedAt)});if(P.has(i.status)?l[i.stage]=(l[i.stage]??0)+1:(i.status==="todo"||i.status==="review")&&(y[i.stage]=(y[i.stage]??0)+1),E.has(i.status)&&D(e,i)){let r=s[i.stage]??[],n=r.length?V(r,85):null,o=ie(e,i,t);f.push({item:i.id,column:i.stage,status:i.status,ageMs:o,p85Ms:n,overP85:n!==null&&o>n});}}return {blockers:m,agingWip:exsorted.timSort(f,(i,r)=>r.ageMs-i.ageMs||(i.item<r.item?-1:1)),queued:y,active:l}}function Fe(e,t){let a=K(e).id;return e.items[t].transitions.find(f=>f.to.stage===a&&f.from.stage!==a)?.at??ne(e,t)}function ue(e,t,a){let s=Date.parse(t),m=h(e),f=Z(e).leadTimeMs,y=m.classesOfService["fixed-date"]?.sle?.percentile??85,l=f.length?V(f,y):null,i=[],r=[];for(let n of Object.values(e.items)){for(let p of n.blockers){let g=p.clearedAt?0:s-Date.parse(p.raisedAt);!p.clearedAt&&g>a&&r.push({item:n.id,blocker:p.id,owner:p.owner,ageMs:g});}if(n.classOfService!=="fixed-date"||!n.deadline||!E.has(n.status)||!D(e,n))continue;let o=s-Date.parse(Fe(e,n.id)),c=l===null?null:Math.max(0,l-o),d=Date.parse(n.deadline)-s;i.push({item:n.id,deadline:n.deadline,timeLeftMs:d,projectedRemainingMs:c,atRisk:d<0||c!==null&&c>d});}return {fixedDate:i,staleBlockers:r,expediteActive:U(e)}}var F=e=>typeof e=="object"&&e!==null&&!Array.isArray(e);function pe(e,t,a){let s=t.items;(!Array.isArray(s)||s.length===0||!s.every(f=>typeof f=="string"))&&chunkS3BXVHO7_cjs.b("invalid-input",`${a} needs items: string[]`,'pass ["A", "B"]');let m=s.find((f,y)=>s.indexOf(f)!==y);m!==void 0&&chunkS3BXVHO7_cjs.b("invalid-input",`item "${m}" appears twice in items[]`,"list each item once",{items:[m]});for(let f of s)chunkXMO2RCXB_cjs.u(e,f);return s}function Je(e){return F(e)&&typeof e.percentile=="number"&&e.percentile>=0&&e.percentile<=100&&typeof e.targetMs=="number"&&Number.isFinite(e.targetMs)&&e.targetMs>0}function Ke(e,t){let{wipLimit:a,...s}=e;return t===null?s:{...s,wipLimit:t}}function ge(e){let t=(i,r,n,o)=>chunkXMO2RCXB_cjs.Y(i,e(),{type:r,by:n.by,payload:n},c=>o(c,chunkXMO2RCXB_cjs.a(n.now)));return {replenishment:(i,r)=>{chunkXMO2RCXB_cjs.o(i,r.by,"order-backlog","manage-flow");let n=pe(i,r,"replenishment"),o=K(i),c=se(i);for(let d of n)chunkXMO2RCXB_cjs.G(i,chunkXMO2RCXB_cjs.u(i,d),c.exitPolicy,`leave "${c.id}"`);return t(i,"ceremony.replenishment",r,(d,p)=>{for(let g of n)d=chunkXMO2RCXB_cjs.x(d,g,{stage:o.id,status:"todo"},r.by,p);return chunkXMO2RCXB_cjs.c(d,"cadence.replenishment",r.by,{column:o.id,items:n.map(g=>{let k=chunkXMO2RCXB_cjs.u(d,g);return {id:g,classOfService:k.classOfService??"standard",deadline:k.deadline??null}})},p)})},"delivery-planning":(i,r)=>{chunkXMO2RCXB_cjs.o(i,r.by,"facilitate","manage-flow");let n=pe(i,r,"delivery-planning"),o=ee(i),c=i.stages[i.stages.findIndex(d=>d.id===o.id)-1];for(let d of n){let p=chunkXMO2RCXB_cjs.u(i,d);p.stage!==c.id&&p.stage!==o.id&&chunkS3BXVHO7_cjs.b("invalid-input",`item "${d}" is in "${p.stage}", not ready for delivery`,`only cards in "${c.id}" or "${o.id}" can be planned for delivery`,{items:[d]});}return t(i,"ceremony.delivery-planning",r,(d,p)=>chunkXMO2RCXB_cjs.c(d,"cadence.delivery-planning",r.by,{items:n,window:typeof r.window=="string"?r.window:null,delivered:n.filter(g=>chunkXMO2RCXB_cjs.u(d,g).status==="done")},p))},"service-delivery-review":(i,r)=>{chunkXMO2RCXB_cjs.o(i,r.by,"manage-flow");let n=r.wip??{},o=r.policies??{},c=r.sle??{};(!F(n)||!F(o)||!F(c))&&chunkS3BXVHO7_cjs.b("invalid-input","service-delivery-review takes wip, policies and sle objects keyed by column or class",'e.g. { "wip": { "dev": 2 }, "policies": { "dev": [{ "kind": "no-open-blockers" }] }, "sle": { "standard": { "percentile": 85, "targetMs": 604800000 } } }');for(let[g,k]of Object.entries(n))chunkXMO2RCXB_cjs.p(i,g),k!==null&&(typeof k!="number"||!Number.isFinite(k)||k<1)&&chunkS3BXVHO7_cjs.b("invalid-input",`wip.${g} must be a positive number or null`,"null removes the limit");let d={};for(let[g,k]of Object.entries(o))chunkXMO2RCXB_cjs.p(i,g),d[g]=ce(k,`policies.${g}`);for(let[g,k]of Object.entries(c))I.includes(g)||chunkS3BXVHO7_cjs.b("invalid-input",`sle.${g} is not a class of service`,`use one of: ${I.join(", ")}`),k!==null&&!Je(k)&&chunkS3BXVHO7_cjs.b("invalid-input",`sle.${g} must be { percentile: 0..100, targetMs: > 0 } or null`,"null removes the service level");let p=chunkVXH2FAKV_cjs.a(i,r,"service-delivery-review");return t(i,"ceremony.service-delivery-review",r,(g,k)=>{let M=h(g),C=g.stages,u=M.columns,v={...M.classesOfService},w=[],x=[],we=[];for(let[S,O]of Object.entries(n)){let W=C.find(R=>R.id===S).wipLimit??null;W!==O&&(w.push({column:S,before:W,after:O}),C=C.map(R=>R.id===S?Ke(R,O):R),u=u.map(R=>R.id===S?Ke(R,O):R));}for(let[S,O]of Object.entries(d)){let W=C.find($=>$.id===S).exitPolicy;if(JSON.stringify(W)===JSON.stringify(O))continue;x.push({column:S,before:W,after:O});let R=C.findIndex($=>$.id===S),Q=C[R].commitmentPoint?C[R+1]?.id:void 0;C=C.map($=>$.id===S?{...$,exitPolicy:O}:$.id===Q?{...$,entryPolicy:O}:$),u=u.map($=>$.id===S?{...$,policies:O}:$);}for(let[S,O]of Object.entries(c)){let W=v[S]?.sle??null;if(JSON.stringify(W)===JSON.stringify(O))continue;we.push({classOfService:S,before:W,after:O});let{sle:R,...Q}=v[S]??{};v={...v,[S]:O===null?Q:{...Q,sle:O}};}g={...g,stages:C,config:{...M,columns:u,classesOfService:v}};let T=chunkVXH2FAKV_cjs.b(g,p,r.by,k);return chunkXMO2RCXB_cjs.c(T.state,"cadence.service-delivery-review",r.by,{wip:w,policies:x,sle:we,lessons:T.created,adopted:T.adopted.slice(T.created.length),dismissed:T.dismissed,agreements:T.agreements,retired:T.retired},k)})},"operations-review":(i,r)=>{chunkXMO2RCXB_cjs.o(i,r.by,"facilitate","manage-flow");let n=r.assign??[];(!Array.isArray(n)||!n.every(o=>F(o)&&typeof o.item=="string"&&typeof o.blocker=="string"))&&chunkS3BXVHO7_cjs.b("invalid-input","operations-review.assign must be [{ item, blocker, owner }]",'e.g. { "assign": [{ "item": "A", "blocker": "A-b1", "owner": "service-delivery-manager" }] }');for(let o of n){let c=chunkXMO2RCXB_cjs.u(i,o.item);c.blockers.some(d=>d.id===o.blocker&&!d.clearedAt)||chunkS3BXVHO7_cjs.b("invalid-input",`item "${o.item}" has no open blocker "${o.blocker}"`,`open blockers: ${c.blockers.filter(d=>!d.clearedAt).map(d=>d.id).join(", ")||"(none)"}`,{items:[o.item]});}return t(i,"ceremony.operations-review",r,(o,c)=>{for(let d of n){let p=chunkXMO2RCXB_cjs.u(o,d.item).blockers.find(g=>g.id===d.blocker).owner;o=chunkXMO2RCXB_cjs.s(o,d.item,g=>({...g,blockers:g.blockers.map(k=>k.id===d.blocker?{...k,owner:d.owner}:k)})),o=chunkXMO2RCXB_cjs.c(o,"blocker.reassigned",r.by,{id:d.item,blocker:d.blocker,from:p,to:d.owner},c);}return chunkXMO2RCXB_cjs.c(o,"cadence.operations-review",r.by,fe(o,c),c)})},"risk-review":(i,r)=>{chunkXMO2RCXB_cjs.o(i,r.by,"facilitate","manage-flow");let n=r.staleAfterMs??7*te;return (typeof n!="number"||!Number.isFinite(n)||n<0)&&chunkS3BXVHO7_cjs.b("invalid-input","risk-review.staleAfterMs must be a non-negative number of milliseconds","omit it for one week"),t(i,"ceremony.risk-review",r,(o,c)=>chunkXMO2RCXB_cjs.c(o,"cadence.risk-review",r.by,ue(o,c,n),c))},"strategy-review":(i,r)=>{chunkXMO2RCXB_cjs.o(i,r.by,"manage-flow");let n=h(i),o=r.classesOfService??{};F(o)||chunkS3BXVHO7_cjs.b("invalid-input","strategy-review.classesOfService must be an object keyed by class",'e.g. { "expedite": { "wipBypass": 2 }, "intangible": null }');let c={...n.classesOfService};for(let[p,g]of Object.entries(o))I.includes(p)||chunkS3BXVHO7_cjs.b("invalid-input",`classesOfService.${p} is not a class of service`,`use one of: ${I.join(", ")}`),g===null?delete c[p]:c[p]=g;let d=H({...n,classesOfService:c,maxExpedite:r.maxExpedite??n.maxExpedite});return t(i,"ceremony.strategy-review",r,(p,g)=>{let k=Object.fromEntries(I.map(M=>[M,0]));for(let M of Object.values(p.items))E.has(M.status)&&D(p,M)&&(k[M.classOfService??"standard"]+=1);return p={...p,config:{...h(p),classesOfService:d.classesOfService,maxExpedite:d.maxExpedite}},chunkXMO2RCXB_cjs.c(p,"cadence.strategy-review",r.by,{mix:k,before:{classesOfService:n.classesOfService,maxExpedite:n.maxExpedite},after:{classesOfService:d.classesOfService,maxExpedite:d.maxExpedite}},g)})}}}function ye(){return [{id:"service-request-manager",name:"Service Request Manager",modelTier:"large",capabilities:["order-backlog","define-acceptance","manage-flow","escalate"],canApprove:[],inputs:["stakeholder-requests","options"],outputs:["ordered-options","acceptance-criteria","classes-of-service"],do_not:["do not implement items yourself","do not push work past the commitment point outside replenishment"]},{id:"service-delivery-manager",name:"Service Delivery Manager",modelTier:"large",capabilities:["facilitate","manage-flow","escalate"],canApprove:[],inputs:["board","flow-metrics","blockers"],outputs:["cadence-records","wip-and-policy-changes","lessons"],do_not:["do not reorder the options","do not assign work; the planner pulls"]},{id:"worker",name:"Worker",modelTier:"small",capabilities:["deliver","review","verify"],canApprove:[],inputs:["brief"],outputs:["code","test-output"],do_not:["do not change acceptance criteria","do not pull more work while your card is open"]}]}var A=(e,t,a,s,m)=>m?{rule:e,severity:t,item:m,message:a,fix:s}:{rule:e,severity:t,message:a,fix:s},z=e=>e.payload??{},oe=e=>{let t=z(e).items;return Array.isArray(t)?t:[]},Ue=(e,t)=>Object.values(e.items).filter(a=>a.stage===t&&P.has(a.status)).length;function ve(){return [{id:"policy-explicit",severity:"error",check(l,i){let r=l.stages.find(n=>n.deliveryPoint)?.id;if(i.type==="init")return l.stages.filter(n=>n.id!==r&&n.exitPolicy.length===0).map(n=>A("policy-explicit","error",`column "${n.id}" has no explicit policy`,`give column "${n.id}" at least one policy, e.g. { "kind": "acceptance-written" }`));if(i.type==="ceremony.service-delivery-review"){let n=z(i).policies??{};return Object.entries(n).filter(([o,c])=>o!==r&&Array.isArray(c)&&c.length===0).map(([o])=>A("policy-explicit","error",`column "${o}" would be left without a policy`,"keep at least one policy per column; Kanban policies are explicit"))}return []}},{id:"commitment-point-once",severity:"error",check(l,i){if(i.type!=="init")return [];let r=[],n=l.stages.filter(c=>c.commitmentPoint),o=l.stages.filter(c=>c.deliveryPoint);if(n.length!==1&&r.push(A("commitment-point-once","error",`${n.length} columns are marked commitmentPoint (${n.map(c=>c.id).join(", ")||"none"})`,"mark exactly one column commitmentPoint: true")),o.length!==1&&r.push(A("commitment-point-once","error",`${o.length} columns are marked deliveryPoint (${o.map(c=>c.id).join(", ")||"none"})`,"mark exactly one column deliveryPoint: true")),n.length===1&&o.length===1){let c=l.stages.indexOf(n[0]),d=l.stages.indexOf(o[0]);d!==l.stages.length-1&&r.push(A("commitment-point-once","error",`delivery column "${o[0].id}" is not the last column`,"move the delivery column to the end; finished cards leave the board there")),c===0?r.push(A("commitment-point-once","error",`commitment column "${n[0].id}" is the first column`,"keep an Options column before the commitment point; replenishment pulls from it")):c>=d&&r.push(A("commitment-point-once","error",`commitment column "${n[0].id}" comes after the delivery column`,"order columns options \u2192 commitment \u2192 \u2026 \u2192 delivery"));}return r}},{id:"wip-respected",severity:"error",check(l,i){if(i.type==="ceremony.replenishment"){let r=l.stages.find(p=>p.commitmentPoint);if(!r||r.wipLimit===void 0)return [];let n=oe(i),o=Object.values(l.items).filter(p=>p.stage===r.id&&E.has(p.status)).length,c=n.some(p=>l.items[p]?.classOfService==="expedite")?h(l).classesOfService.expedite?.wipBypass??1:0,d=r.wipLimit+c;return o+n.length<=d?[]:[A("wip-respected","error",`column "${r.id}" holds ${o} card(s); pulling ${n.length} more exceeds its WIP limit of ${r.wipLimit}${c?` (+${c} expedite bypass)`:""}`,`pull at most ${Math.max(0,d-o)} card(s) now, or raise the limit in a service-delivery-review`)]}if(i.type==="ceremony.service-delivery-review"){let r=z(i).wip??{},n=[];for(let[o,c]of Object.entries(r)){if(typeof c!="number")continue;let d=Ue(l,o);d>c&&n.push(A("wip-respected","warning",`column "${o}" has ${d} active card(s), above the new limit of ${c}`,"nothing new is pulled into it until it drains; finish or move cards"));}return n}return []}},{id:"pull-not-push",severity:"error",check(l,i){if(i.type!=="ceremony.replenishment")return [];let r=l.stages[0],n=l.stages.find(d=>d.commitmentPoint);if(!r||!n)return [];let o=[],c=z(i).column;c!==void 0&&c!==n.id&&o.push(A("pull-not-push","error",`replenishment may only pull into the commitment column "${n.id}", not "${String(c)}"`,"drop column or set it to the commitment column; later columns are pulled by the planner"));for(let d of oe(i)){let p=l.items[d];p&&(p.stage!==r.id||p.status!=="todo")&&o.push(A("pull-not-push","error",`item "${d}" is ${p.status} in "${p.stage}", not an option`,`only todo cards in "${r.id}" can be pulled; cards already on the board flow by pull`,d));}return o}},{id:"blocker-has-owner",severity:"error",check(l,i){if(!i.type.startsWith("ceremony."))return [];let r=[];if(i.type==="ceremony.operations-review"){let n=z(i).assign??[];for(let o of n)(typeof o.owner!="string"||o.owner.trim()==="")&&r.push(A("blocker-has-owner","error",`blocker "${o.blocker}" on "${o.item}" would have no owner`,"name the role or person who clears it",o.item));}for(let n of Object.values(l.items))for(let o of n.blockers)!o.clearedAt&&o.owner.trim()===""&&r.push(A("blocker-has-owner","warning",`blocker "${o.id}" on "${n.id}" has no owner`,`assign one in operations-review: { "assign": [{ "item": "${n.id}", "blocker": "${o.id}", "owner": "<who>" }] }`,n.id));return r}},{id:"one-expedite",severity:"error",check(l,i){if(i.type!=="ceremony.replenishment")return [];let r=oe(i).filter(c=>l.items[c]?.classOfService==="expedite");if(r.length===0)return [];let n=Object.values(l.items).filter(c=>c.classOfService==="expedite"&&E.has(c.status)&&D(l,c)).map(c=>c.id),o=h(l).maxExpedite;return n.length+r.length<=o?[]:[A("one-expedite","error",`${n.length} expedite card(s) already on the board (${n.join(", ")||"none"}); pulling ${r.join(", ")} exceeds maxExpedite ${o}`,"deliver the current expedite first, reclassify the new card, or raise maxExpedite in a strategy-review")]}},{id:"fixed-date-needs-deadline",severity:"error",check(l,i){return i.type!=="ceremony.replenishment"?[]:oe(i).filter(r=>{let n=l.items[r];return n?.classOfService==="fixed-date"&&!(n.deadline&&Number.isFinite(Date.parse(n.deadline)))}).map(r=>A("fixed-date-needs-deadline","error",`fixed-date item "${r}" has no deadline`,`editItem("${r}", { deadline: "<ISO date>" }) before pulling it`,r))}}]}function be(e){let t=e.columns.map(m=>{let f={id:m.id,name:m.name,entryPolicy:[],exitPolicy:m.policies};return m.wipLimit!==void 0&&(f.wipLimit=m.wipLimit),m.commitmentPoint&&(f.commitmentPoint=true),m.deliveryPoint&&(f.deliveryPoint=true),m.review&&(f.review=true),f}),a=t.findIndex(m=>m.commitmentPoint),s=a>=0?t[a+1]:void 0;return s&&(s.entryPolicy=t[a].exitPolicy),t}var He={backlog:"Options",item:"Work Item",stage:"Column",iteration:"Cadence",increment:"Delivery",ceremony:"Cadence",gate:"Policy"},Ge={expedite:0,"fixed-date":1,standard:2,intangible:3},Be=e=>Ge[e.classOfService??"standard"]??2,ke=1e15,Ze=4e9,ze=(e,t,a)=>Math.min(a,Math.max(t,e));function Qe(e,t){let a=e.classOfService??"standard";if(e.type==="question")return 5*ke;if(a==="fixed-date"&&e.deadline!==void 0){let l=Date.parse(e.deadline);if(Number.isFinite(l))return 3*ke+1e10-Math.floor(l/1e3)}let s=t.aging?Math.floor(t.deferrals/t.maxDeferralRounds):0,m=ze(e.priority??0,-1e9,1e9)+s*Ze,f=t.aging&&t.deferrals>=t.maxDeferralRounds;return (a==="expedite"?4:a==="fixed-date"?3:a==="intangible"&&!f?1:2)*ke+m}function Te(e,t){let a=Be(e)-Be(t);if(a!==0)return a;let s=_(e),m=_(t),f=s===void 0?0:Date.parse(s),y=m===void 0?0:Date.parse(m);return f!==y?f-y:e.id<t.id?-1:e.id>t.id?1:0}function Xe(e){return e.map(t=>t.kind==="evidence"?`evidence ${t.evidenceKind}`:t.kind==="custom"?`${t.id}: ${t.description}`:t.kind).join(", ")||"(none)"}function et(){return {name:"kanban",vocabulary:He,validateConfig:H,defaultStages:be,defaultRoles:ye,requiredCapabilities:["manage-flow","deliver"],exclusiveCapabilities:[],plannerOptions(e){let t=h(e),a=K(e),s=e.stages[e.stages.findIndex(n=>n.id===a.id)+1],m=t.classesOfService.expedite?.wipBypass??1,f=[],y=[0],l=new Map;for(let n of e.events)f.push(Date.parse(n.at)),y.push(y[y.length-1]+(n.type==="planner.resolved"?1:0)),n.type==="item.added"&&l.set(n.payload.id,n.at);let i=n=>{let o=0,c=f.length;for(;o<c;){let d=o+c>>1;f[d]<=n?o=d+1:c=d;}return y[f.length]-y[o]},r={schedulerMode:"throughput",fairnessPolicy:t.fairness.aging?"aging":"none",deadlineStrategy:"earliest-first",dispatchStage:n=>n.stage===a.id&&s?s.id:void 0,priorityOf:n=>{let o=Date.parse(_(n)??l.get(n.id)??"");return Qe(n,{deferrals:i(Number.isFinite(o)?o:0),aging:t.fairness.aging,maxDeferralRounds:t.fairness.maxDeferralRounds})},tieBreaker:Te,wipCounts:[...P],wipLimitOf:(n,o)=>n.wipLimit===void 0?void 0:o.classOfService==="expedite"?n.wipLimit+m:n.wipLimit};return r.maxDeferralRounds=t.fairness.maxDeferralRounds,r},candidates(e){let t=Math.max(0,h(e).maxExpedite-U(e).length),a=Object.values(e.items).filter(m=>(m.status==="todo"||m.status==="review")&&D(e,m)),s=exsorted.timSort(a.filter(m=>m.classOfService==="expedite"),Te).slice(0,t);return a.filter(m=>m.classOfService!=="expedite"||s.includes(m))},invariants(e,t){let a=h(e),s=e.stages.find(l=>l.id===t.stage),m=t.classOfService??"standard",f=a.classesOfService[m]?.sle,y=Object.values(e.items).filter(l=>l.stage===s.id&&P.has(l.status)).length;return [`Column "${s.name}" exit policies: ${Xe(s.exitPolicy)}`,`Class of service: ${m}${t.deadline?`; deadline ${t.deadline}`:""}${f?`; service level p${f.percentile} <= ${f.targetMs} ms`:""}`,`WIP limit of "${s.name}": ${s.wipLimit??"none"} (active now: ${y}); finish this card before pulling another`,`Do not change the scope of "${t.id}" or its acceptance criteria; raise open_questions instead`]},ceremonies:ge(et),rules:ve(),metrics:e=>({...Z(e)}),humanDefaults:{gates:"none"},lockedConfigKeys:["columns","classesOfService"],report:e=>({cadencesDue:le(e)})}}exports.A=pe;exports.B=ge;exports.C=ye;exports.D=ve;exports.E=be;exports.F=He;exports.G=Qe;exports.H=Te;exports.I=et;exports.a=P;exports.b=E;exports.c=se;exports.d=K;exports.e=ee;exports.f=X;exports.g=D;exports.h=U;exports.i=_;exports.j=Y;exports.k=I;exports.l=te;exports.m=h;exports.n=Pe;exports.o=H;exports.p=ne;exports.q=ie;exports.r=qe;exports.s=Ee;exports.t=le;exports.u=re;exports.v=V;exports.w=me;exports.x=Z;exports.y=fe;exports.z=ue;//# sourceMappingURL=chunk-CYXVGHQM.cjs.map
2
+ //# sourceMappingURL=chunk-CYXVGHQM.cjs.map