ex-workflow 0.3.0-stage → 0.6.0-stage
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +52 -1
- package/README.md +73 -30
- 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-7HZXZF3L.cjs → chunk-2OVYXXNV.cjs} +2 -2
- package/dist/chunk-2OVYXXNV.cjs.map +1 -0
- package/dist/chunk-3CLDZCHN.cjs +2 -0
- package/dist/chunk-3CLDZCHN.cjs.map +1 -0
- package/dist/chunk-5TXYMLBF.mjs +3 -0
- package/dist/chunk-5TXYMLBF.mjs.map +1 -0
- package/dist/chunk-7CDGPTEJ.mjs +2 -0
- package/dist/chunk-7CDGPTEJ.mjs.map +1 -0
- package/dist/chunk-7IG6EQI4.mjs +6 -0
- package/dist/chunk-7IG6EQI4.mjs.map +1 -0
- package/dist/chunk-GT57PLUT.mjs +2 -0
- package/dist/chunk-GT57PLUT.mjs.map +1 -0
- package/dist/chunk-IHE5K4X3.mjs +2 -0
- package/dist/chunk-IHE5K4X3.mjs.map +1 -0
- package/dist/chunk-KF5VQH3M.mjs +2 -0
- package/dist/chunk-KF5VQH3M.mjs.map +1 -0
- package/dist/chunk-MH66G5KV.cjs +2 -0
- package/dist/chunk-MH66G5KV.cjs.map +1 -0
- package/dist/chunk-N3QB2S7R.cjs +2 -0
- package/dist/chunk-N3QB2S7R.cjs.map +1 -0
- package/dist/chunk-NA53TZE4.mjs +2 -0
- package/dist/chunk-NA53TZE4.mjs.map +1 -0
- package/dist/chunk-TEPK5Y36.mjs +2 -0
- package/dist/chunk-TEPK5Y36.mjs.map +1 -0
- package/dist/chunk-UBFIKDIP.cjs +2 -0
- package/dist/chunk-UBFIKDIP.cjs.map +1 -0
- package/dist/chunk-UUOMQMWT.cjs +2 -0
- package/dist/chunk-UUOMQMWT.cjs.map +1 -0
- package/dist/chunk-WOGK54HB.cjs +3 -0
- package/dist/chunk-WOGK54HB.cjs.map +1 -0
- package/dist/chunk-YRATJT7P.cjs +6 -0
- package/dist/chunk-YRATJT7P.cjs.map +1 -0
- package/dist/chunk-Z3PU6EBI.mjs +2 -0
- package/dist/chunk-Z3PU6EBI.mjs.map +1 -0
- package/dist/chunk-ZTE7LREB.cjs +2 -0
- package/dist/chunk-ZTE7LREB.cjs.map +1 -0
- package/dist/cli/bin.cjs +1 -1
- package/dist/cli/bin.cjs.map +1 -1
- package/dist/cli/bin.mjs +1 -1
- package/dist/cli/bin.mjs.map +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 +36 -13
- package/dist/index.d.ts +36 -13
- 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 +2 -0
- package/dist/schema/index.cjs.map +1 -0
- package/dist/schema/index.d.cts +57 -0
- package/dist/schema/index.d.ts +57 -0
- package/dist/schema/index.mjs +2 -0
- package/dist/schema/index.mjs.map +1 -0
- 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 +32 -3
- package/dist/types.d.ts +32 -3
- package/dist/waterfall/index.cjs +1 -1
- package/dist/waterfall/index.d.cts +2 -0
- package/dist/waterfall/index.d.ts +2 -0
- package/dist/waterfall/index.mjs +1 -1
- package/package.json +18 -2
- package/dist/chunk-23P7C25E.cjs +0 -2
- package/dist/chunk-23P7C25E.cjs.map +0 -1
- package/dist/chunk-2IKIBB73.cjs +0 -2
- package/dist/chunk-2IKIBB73.cjs.map +0 -1
- package/dist/chunk-4A4TD4MH.cjs +0 -2
- package/dist/chunk-4A4TD4MH.cjs.map +0 -1
- package/dist/chunk-6R3YFUUV.cjs +0 -6
- package/dist/chunk-6R3YFUUV.cjs.map +0 -1
- package/dist/chunk-7HZXZF3L.cjs.map +0 -1
- package/dist/chunk-AUZIQPFT.cjs +0 -2
- package/dist/chunk-AUZIQPFT.cjs.map +0 -1
- package/dist/chunk-BJEOTG6P.mjs +0 -2
- package/dist/chunk-BJEOTG6P.mjs.map +0 -1
- package/dist/chunk-FLCYD2QF.mjs +0 -2
- package/dist/chunk-FLCYD2QF.mjs.map +0 -1
- package/dist/chunk-NN3XJUHP.cjs +0 -2
- package/dist/chunk-NN3XJUHP.cjs.map +0 -1
- package/dist/chunk-P4P4JTE5.mjs +0 -2
- package/dist/chunk-P4P4JTE5.mjs.map +0 -1
- package/dist/chunk-R27STIER.mjs +0 -2
- package/dist/chunk-R27STIER.mjs.map +0 -1
- package/dist/chunk-TMKCALFT.cjs +0 -2
- package/dist/chunk-TMKCALFT.cjs.map +0 -1
- package/dist/chunk-UOGNVWVO.mjs +0 -2
- package/dist/chunk-UOGNVWVO.mjs.map +0 -1
- package/dist/chunk-VGD4V5BA.mjs +0 -6
- package/dist/chunk-VGD4V5BA.mjs.map +0 -1
- package/dist/chunk-WOKNWJKU.mjs +0 -2
- package/dist/chunk-WOKNWJKU.mjs.map +0 -1
- package/dist/chunk-ZX4DAMTG.mjs +0 -2
- package/dist/chunk-ZX4DAMTG.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/kanban/columns.ts","../src/kanban/config.ts","../src/kanban/board.ts","../src/kanban/replay.ts","../src/kanban/metrics.ts","../src/kanban/reports.ts","../src/kanban/ceremonies.ts","../src/kanban/roles.ts","../src/kanban/rules.ts","../src/kanban/stages.ts","../src/kanban/index.ts"],"names":["ACTIVE","OPEN","optionsColumn","state","first","fail","commitmentColumn","st","s","deliveryColumn","columnIndex","stageId","stageOf","onBoard","item","idx","activeExpedites","i","enteredStageAt","t","KANBAN_CADENCES","CLASSES","DAY_MS","configOf","DEFAULT_COLUMNS","isObj","x","positive","v","field","fix","min","BARE_POLICY_KINDS","nonEmpty","validatePolicies","raw","out","p","at","column","assertId","id","wip","flag","validateKanbanConfig","c","columns","seen","col","classesOfService","cos","k","entry","bypass","sle","target","f","rounds","fairness","cadences","cad","every","addedAt","e","cardAge","now","board","here","cards","timSort","b","a","active","queued","CADENCE_EVENT","cadencesDue","cfg","lastSeq","lastAt","turnsSince","everyTurns","ms","from","to","carried","replay","events","commitment","delivery","items","blockers","stamp","it","stage","applyTransition","ev","list","percentile","values","sorted","rank","ratio","num","den","boardOf","staysOf","r","columnStays","kanbanMetrics","index","delivered","y","leadTimeMs","cycleTimeMsByColumn","commits","throughput","start","lo","n","wipByColumn","agingWipMs","firstEntry","per","days","cumulativeFlow","day","sleCompliance","cls","mine","blockerTimeMs","opsReport","stays","aging","history","p85Ms","ageMs","committedAt","commit","riskReport","staleAfterMs","lead","pLead","fixedDate","staleBlockers","elapsed","projectedRemainingMs","timeLeftMs","wantItems","input","cadence","dupe","getItem","validLevel","withWip","limit","_w","rest","kanbanCeremonies","methodology","act","type","reduce","applyAction","nowOf","requireCap","options","assertPolicies","moveItem","appendEvent","last","policies","checked","level","stages","wipChanges","policyChanges","sleChanges","before","gated","_old","assign","patchItem","stale","patch","merged","next","mix","kanbanRoles","rule","severity","message","payloadOf","itemsOf","activeIn","kanbanRules","delivers","ci","di","open","fresh","already","max","kanbanStages","config","after","KANBAN_VOCABULARY","RANK","rankOf","BAND","AGE_STEP","clamp","hi","priorityByClass","ctx","aged","offset","promoted","byClassThenAge","ageA","ageB","ta","tb","describePolicies","kanban","times","resolvedBefore","added","deferralsSince","mid","po","since","slots","all","expedites"],"mappings":"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","file":"chunk-2OVYXXNV.cjs","sourcesContent":["import { fail } from \"../errors.ts\";\nimport { stageOf } from \"../items.ts\";\nimport type { ItemStatus, Stage, WorkItem, WorkflowState } from \"../types.ts\";\n\n/** Statuses that hold a WIP slot. */\nexport const ACTIVE: ReadonlySet<ItemStatus> = new Set([\n \"in_progress\",\n \"blocked\",\n \"awaiting_human\",\n]);\n/** Every status but done and dropped: the cards on the board. */\nexport const OPEN: ReadonlySet<ItemStatus> = new Set([\n \"todo\",\n \"in_progress\",\n \"blocked\",\n \"review\",\n \"awaiting_human\",\n]);\n\nexport function optionsColumn(state: WorkflowState): Stage {\n const first = state.stages[0];\n if (!first)\n fail(\n \"config-invalid\",\n \"kanban board has no columns\",\n \"init with at least options, a commitment column and a delivery column\",\n );\n return first;\n}\n\nexport function commitmentColumn(state: WorkflowState): Stage {\n const st = state.stages.find((s) => s.commitmentPoint);\n if (!st)\n fail(\n \"config-invalid\",\n \"no column is the commitment point\",\n \"set commitmentPoint: true on exactly one column\",\n );\n return st;\n}\n\nexport function deliveryColumn(state: WorkflowState): Stage {\n const st = state.stages.find((s) => s.deliveryPoint);\n if (!st)\n fail(\n \"config-invalid\",\n \"no column is the delivery point\",\n \"set deliveryPoint: true on the last column\",\n );\n return st;\n}\n\nexport function columnIndex(state: WorkflowState, stageId: string): number {\n stageOf(state, stageId);\n return state.stages.findIndex((s) => s.id === stageId);\n}\n\n/** Committed and not yet delivered: column index in [commitment, delivery). */\nexport function onBoard(state: WorkflowState, item: WorkItem): boolean {\n const idx = columnIndex(state, item.stage);\n return (\n idx >= columnIndex(state, commitmentColumn(state).id) &&\n idx < columnIndex(state, deliveryColumn(state).id)\n );\n}\n\nexport function activeExpedites(state: WorkflowState): string[] {\n return Object.values(state.items)\n .filter((i) => i.classOfService === \"expedite\" && ACTIVE.has(i.status) && onBoard(state, i))\n .map((i) => i.id);\n}\n\n/** ISO time the item last entered its current column; undefined when it was added there and never moved. */\nexport function enteredStageAt(item: WorkItem): string | undefined {\n for (let i = item.transitions.length - 1; i >= 0; i--) {\n const t = item.transitions[i]!;\n if (t.to.stage === item.stage && t.from.stage !== item.stage) return t.at;\n }\n return undefined;\n}\n","import { assertId, fail } from \"../errors.ts\";\nimport type { ClassOfService, Policy, WorkflowState } from \"../types.ts\";\n\nexport type KanbanCadence =\n | \"replenishment\"\n | \"delivery-planning\"\n | \"service-delivery-review\"\n | \"operations-review\"\n | \"risk-review\"\n | \"strategy-review\";\nexport const KANBAN_CADENCES: readonly KanbanCadence[] = [\n \"replenishment\",\n \"delivery-planning\",\n \"service-delivery-review\",\n \"operations-review\",\n \"risk-review\",\n \"strategy-review\",\n];\nexport const CLASSES: readonly ClassOfService[] = [\n \"expedite\",\n \"fixed-date\",\n \"standard\",\n \"intangible\",\n];\nexport const DAY_MS = 86_400_000;\n\nexport interface KanbanColumn {\n id: string;\n name: string;\n wipLimit?: number;\n /** Explicit policies a card must satisfy before it LEAVES the column (checked by complete()). */\n policies: Policy[];\n commitmentPoint?: boolean;\n deliveryPoint?: boolean;\n /** Cards entering this column wait for a reviewer (status \"review\"). */\n review?: boolean;\n}\nexport interface ServiceLevel {\n percentile: number;\n targetMs: number;\n}\nexport interface ClassConfig {\n wipBypass?: number;\n sle?: ServiceLevel;\n}\nexport interface KanbanConfig {\n columns: KanbanColumn[];\n classesOfService: Partial<Record<ClassOfService, ClassConfig>>;\n fairness: { aging: boolean; maxDeferralRounds: number };\n cadences: Partial<Record<KanbanCadence, { everyTurns?: number }>>;\n throughputWindowMs: number;\n maxExpedite: number;\n}\n\nexport function configOf(state: WorkflowState): KanbanConfig {\n return state.config as KanbanConfig;\n}\n\nexport const DEFAULT_COLUMNS: KanbanColumn[] = [\n { id: \"options\", name: \"Options\", policies: [{ kind: \"acceptance-written\" }] },\n {\n id: \"ready\",\n name: \"Ready\",\n wipLimit: 4,\n commitmentPoint: true,\n policies: [{ kind: \"dependencies-done\" }],\n },\n {\n id: \"dev\",\n name: \"Development\",\n wipLimit: 3,\n policies: [{ kind: \"evidence\", evidenceKind: \"test-output\" }],\n },\n {\n id: \"review\",\n name: \"Review\",\n wipLimit: 2,\n review: true,\n policies: [{ kind: \"no-open-blockers\" }],\n },\n { id: \"done\", name: \"Done\", deliveryPoint: true, policies: [] },\n];\n\nconst isObj = (x: unknown): x is Record<string, unknown> =>\n typeof x === \"object\" && x !== null && !Array.isArray(x);\n\nfunction positive(v: unknown, field: string, fix: string, min = 1): number | undefined {\n if (v === undefined) return undefined;\n if (typeof v !== \"number\" || !Number.isFinite(v) || v < min)\n fail(\n \"config-invalid\",\n `kanban config.${field} must be a number >= ${min} (got ${JSON.stringify(v)})`,\n fix,\n );\n return v;\n}\n\nconst BARE_POLICY_KINDS = [\n \"acceptance-written\",\n \"estimate-present\",\n \"no-open-blockers\",\n \"dependencies-done\",\n];\n\nconst nonEmpty = (x: unknown): boolean => typeof x === \"string\" && x.trim() !== \"\";\n\n/** Validate a Policy[]: every entry must be a core Policy object. Returns a fresh array. */\nexport function validatePolicies(raw: unknown, field: string): Policy[] {\n if (!Array.isArray(raw))\n fail(\n \"config-invalid\",\n `kanban config.${field} must be an array of Policy objects`,\n 'e.g. [{ \"kind\": \"evidence\", \"evidenceKind\": \"test-output\" }]',\n );\n const out: Policy[] = [];\n raw.forEach((p: unknown, i: number) => {\n const at = `kanban config.${field}[${i}]`;\n const ok =\n isObj(p) &&\n (p[\"kind\"] === \"evidence\"\n ? nonEmpty(p[\"evidenceKind\"])\n : p[\"kind\"] === \"custom\"\n ? nonEmpty(p[\"id\"]) && nonEmpty(p[\"description\"])\n : typeof p[\"kind\"] === \"string\" && BARE_POLICY_KINDS.includes(p[\"kind\"]));\n if (!ok)\n fail(\n \"config-invalid\",\n `${at} must be a Policy`,\n `use a Policy such as { \"kind\": \"evidence\", \"evidenceKind\": \"test-output\" }, { \"kind\": \"custom\", \"id\": \"x\", \"description\": \"...\" } or one of: ${BARE_POLICY_KINDS.join(\", \")}`,\n );\n out.push(p as Policy);\n });\n return out;\n}\n\nfunction column(raw: unknown, i: number): KanbanColumn {\n if (!isObj(raw))\n fail(\n \"config-invalid\",\n `kanban config.columns[${i}] must be an object`,\n 'e.g. { \"id\": \"dev\", \"policies\": [] }',\n );\n assertId(raw[\"id\"], `kanban config.columns[${i}].id`);\n const id = raw[\"id\"] as string;\n if (!Array.isArray(raw[\"policies\"]))\n fail(\n \"config-invalid\",\n `kanban config.columns[${i}] (\"${id}\") needs policies: Policy[]`,\n 'every column states its policies explicitly, e.g. [{ \"kind\": \"acceptance-written\" }]',\n );\n const out: KanbanColumn = {\n id,\n name: typeof raw[\"name\"] === \"string\" && raw[\"name\"].trim() !== \"\" ? raw[\"name\"] : id,\n policies: validatePolicies(raw[\"policies\"], `columns[${i}].policies`),\n };\n const wip = positive(raw[\"wipLimit\"], `columns[${i}].wipLimit`, \"omit wipLimit for no limit\");\n if (wip !== undefined) out.wipLimit = wip;\n for (const flag of [\"commitmentPoint\", \"deliveryPoint\", \"review\"] as const) {\n if (raw[flag] === undefined) continue;\n if (typeof raw[flag] !== \"boolean\")\n fail(\n \"config-invalid\",\n `kanban config.columns[${i}].${flag} must be a boolean`,\n `set ${flag}: true or omit it`,\n );\n if (raw[flag]) out[flag] = true;\n }\n return out;\n}\n\nexport function validateKanbanConfig(raw: unknown): KanbanConfig {\n const c = (raw ?? {}) as Record<string, unknown>;\n if (c[\"columns\"] !== undefined && !Array.isArray(c[\"columns\"]))\n fail(\n \"config-invalid\",\n \"kanban config.columns must be an array of columns\",\n \"omit columns for the default board (options, ready, dev, review, done)\",\n );\n const columns =\n c[\"columns\"] === undefined\n ? DEFAULT_COLUMNS.map((x) => ({ ...x }))\n : (c[\"columns\"] as unknown[]).map(column);\n const seen = new Set<string>();\n for (const col of columns) {\n if (seen.has(col.id))\n fail(\"config-invalid\", `duplicate column id \"${col.id}\"`, \"give every column a unique id\");\n seen.add(col.id);\n }\n const classesOfService: KanbanConfig[\"classesOfService\"] = {};\n const cos = c[\"classesOfService\"] ?? {};\n if (!isObj(cos))\n fail(\n \"config-invalid\",\n \"kanban config.classesOfService must be an object keyed by class\",\n 'e.g. { \"expedite\": { \"wipBypass\": 1 } }',\n );\n for (const [k, v] of Object.entries(cos)) {\n if (!(CLASSES as readonly string[]).includes(k))\n fail(\n \"config-invalid\",\n `kanban config.classesOfService.${k} is not a class of service`,\n `use one of: ${CLASSES.join(\", \")}`,\n );\n if (!isObj(v))\n fail(\n \"config-invalid\",\n `kanban config.classesOfService.${k} must be an object`,\n 'e.g. { \"wipBypass\": 1, \"sle\": { \"percentile\": 85, \"targetMs\": 604800000 } }',\n );\n const entry: ClassConfig = {};\n const bypass = positive(\n v[\"wipBypass\"],\n `classesOfService.${k}.wipBypass`,\n \"omit it for the default 1\",\n 0,\n );\n if (bypass !== undefined) entry.wipBypass = bypass;\n if (v[\"sle\"] !== undefined) {\n const sle = v[\"sle\"];\n if (\n !isObj(sle) ||\n typeof sle[\"percentile\"] !== \"number\" ||\n sle[\"percentile\"] < 0 ||\n sle[\"percentile\"] > 100\n )\n fail(\n \"config-invalid\",\n `kanban config.classesOfService.${k}.sle.percentile must be 0..100`,\n 'e.g. { \"percentile\": 85, \"targetMs\": 604800000 }',\n );\n const target = positive(\n sle[\"targetMs\"],\n `classesOfService.${k}.sle.targetMs`,\n \"state the service level target in milliseconds\",\n );\n if (target === undefined)\n fail(\n \"config-invalid\",\n `kanban config.classesOfService.${k}.sle.targetMs is required`,\n \"state the service level target in milliseconds\",\n );\n entry.sle = { percentile: sle[\"percentile\"], targetMs: target };\n }\n classesOfService[k as ClassOfService] = entry;\n }\n const f = c[\"fairness\"] ?? {};\n if (!isObj(f) || (f[\"aging\"] !== undefined && typeof f[\"aging\"] !== \"boolean\"))\n fail(\n \"config-invalid\",\n \"kanban config.fairness must be { aging: boolean, maxDeferralRounds?: number }\",\n \"omit it for aging on\",\n );\n const rounds = positive(\n f[\"maxDeferralRounds\"],\n \"fairness.maxDeferralRounds\",\n \"omit it for 5 rounds\",\n );\n const fairness: KanbanConfig[\"fairness\"] = {\n aging: f[\"aging\"] === undefined ? true : (f[\"aging\"] as boolean),\n maxDeferralRounds: rounds ?? 5,\n };\n const cadences: KanbanConfig[\"cadences\"] = {};\n const cad = c[\"cadences\"] ?? {};\n if (!isObj(cad))\n fail(\n \"config-invalid\",\n \"kanban config.cadences must be an object keyed by cadence\",\n 'e.g. { \"replenishment\": { \"everyTurns\": 10 } }',\n );\n for (const [k, v] of Object.entries(cad)) {\n if (!(KANBAN_CADENCES as readonly string[]).includes(k))\n fail(\n \"config-invalid\",\n `kanban config.cadences.${k} is not a cadence`,\n `use one of: ${KANBAN_CADENCES.join(\", \")}`,\n );\n if (!isObj(v))\n fail(\n \"config-invalid\",\n `kanban config.cadences.${k} must be an object`,\n 'e.g. { \"everyTurns\": 10 }',\n );\n const every = positive(\n v[\"everyTurns\"],\n `cadences.${k}.everyTurns`,\n \"omit it when the cadence is run by hand\",\n );\n cadences[k as KanbanCadence] = every === undefined ? {} : { everyTurns: every };\n }\n return {\n columns,\n classesOfService,\n fairness,\n cadences,\n throughputWindowMs:\n positive(c[\"throughputWindowMs\"], \"throughputWindowMs\", \"omit it for one week\") ?? 7 * DAY_MS,\n maxExpedite: positive(c[\"maxExpedite\"], \"maxExpedite\", \"omit it for 1\") ?? 1,\n };\n}\n","import { timSort } from \"exsorted\";\nimport type { ItemStatus, WorkItem, WorkflowState } from \"../types.ts\";\nimport { ACTIVE, enteredStageAt } from \"./columns.ts\";\nimport { configOf, KANBAN_CADENCES, type KanbanCadence } from \"./config.ts\";\n\nexport interface BoardCard {\n id: string;\n title: string;\n type: string;\n status: ItemStatus;\n classOfService: string;\n role: string | null;\n ageMs: number;\n blocked: boolean;\n deadline: string | null;\n}\nexport interface BoardColumn {\n id: string;\n name: string;\n wipLimit: number | null;\n active: number;\n queued: number;\n overLimit: boolean;\n commitmentPoint: boolean;\n deliveryPoint: boolean;\n cards: BoardCard[];\n}\n\n/** Time the item was added (its item.added event), else the first event's time. */\nexport function addedAt(state: WorkflowState, id: string): string {\n const ev = state.events.find(\n (e) => e.type === \"item.added\" && (e.payload as { id: string }).id === id,\n );\n return ev?.at ?? state.events[0]!.at;\n}\n\nexport function cardAge(state: WorkflowState, item: WorkItem, now: string): number {\n return Date.parse(now) - Date.parse(enteredStageAt(item) ?? addedAt(state, item.id));\n}\n\nexport function board(state: WorkflowState, now: string): BoardColumn[] {\n return state.stages.map((st) => {\n const here = Object.values(state.items).filter(\n (i) => i.stage === st.id && i.status !== \"dropped\",\n );\n const cards: BoardCard[] = timSort(\n here.map((i) => ({\n id: i.id,\n title: i.title,\n type: i.type,\n status: i.status,\n classOfService: i.classOfService ?? \"standard\",\n role: i.role ?? null,\n ageMs: cardAge(state, i, now),\n blocked: i.blockers.some((b) => !b.clearedAt),\n deadline: i.deadline ?? null,\n })),\n (a, b) => b.ageMs - a.ageMs || (a.id < b.id ? -1 : 1),\n );\n const active = cards.filter((c) => ACTIVE.has(c.status)).length;\n const queued = cards.filter((c) => c.status === \"todo\" || c.status === \"review\").length;\n return {\n id: st.id,\n name: st.name,\n wipLimit: st.wipLimit ?? null,\n active,\n queued,\n overLimit: st.wipLimit !== undefined && active > st.wipLimit,\n commitmentPoint: st.commitmentPoint === true,\n deliveryPoint: st.deliveryPoint === true,\n cards,\n };\n });\n}\n\nexport const CADENCE_EVENT = (c: KanbanCadence): string => `cadence.${c}`;\n\nexport interface CadenceStatus {\n cadence: KanbanCadence;\n everyTurns: number | null;\n lastAt: string | null;\n turnsSince: number;\n due: boolean;\n}\n\nexport function cadencesDue(state: WorkflowState): CadenceStatus[] {\n const cfg = configOf(state);\n return KANBAN_CADENCES.map((c) => {\n let lastSeq = 0;\n let lastAt: string | null = null;\n for (const e of state.events) {\n if (e.type === CADENCE_EVENT(c)) {\n lastSeq = e.seq;\n lastAt = e.at;\n }\n }\n const turnsSince = state.events.filter(\n (e) => e.type === \"item.completed\" && e.seq > lastSeq,\n ).length;\n const everyTurns = cfg.cadences[c]?.everyTurns ?? null;\n return {\n cadence: c,\n everyTurns,\n lastAt,\n turnsSince,\n due: everyTurns !== null && turnsSince >= everyTurns,\n };\n });\n}\n","import type { ClassOfService, Event, ItemStatus } from \"../types.ts\";\n\nexport interface Stay {\n stage: string;\n enteredAt: string;\n leftAt?: string;\n}\nexport interface ReplayedItem {\n id: string;\n /** item type from item.added; \"question\" items are escalations, not deliveries */\n type: string;\n stage: string;\n status: ItemStatus;\n /** one entry per contiguous visit to a column; status changes inside a column do not end a stay */\n stays: Stay[];\n /** first entry into the commitment column */\n committedAt?: string;\n /** first entry into the delivery column */\n deliveredAt?: string;\n /** from the replenishment payload; \"standard\" when never replenished */\n classOfService: ClassOfService;\n deadline?: string;\n /** closed in_progress intervals */\n activeMs: number;\n /** closed blocked intervals */\n blockedMs: number;\n /** the open status interval */\n since: { status: ItemStatus; at: string };\n}\nexport interface ReplayedBlocker {\n item: string;\n blocker: string;\n raisedAt: string;\n clearedAt?: string;\n}\nexport interface Replay {\n items: Map<string, ReplayedItem>;\n blockers: ReplayedBlocker[];\n /** time of the last event: the clock every \"still open\" measurement uses */\n lastAt: string;\n}\n\nconst ms = (from: string, to: string) => Date.parse(to) - Date.parse(from);\n\nconst carried = (p: Record<string, unknown>) =>\n (p[\"transition\"] ?? null) as { to: { stage: string; status: ItemStatus } } | null;\n\nexport function replay(events: Event[], commitment: string, delivery: string): Replay {\n const items = new Map<string, ReplayedItem>();\n const blockers: ReplayedBlocker[] = [];\n let lastAt = events[0]?.at ?? \"1970-01-01T00:00:00.000Z\";\n const stamp = (it: ReplayedItem, stage: string, at: string) => {\n if (stage === commitment && it.committedAt === undefined) it.committedAt = at;\n if (stage === delivery && it.deliveredAt === undefined) it.deliveredAt = at;\n };\n /** the one place a transition (from item.transition or carried by a blocker event) is applied */\n const applyTransition = (\n it: ReplayedItem,\n to: { stage: string; status: ItemStatus },\n at: string,\n ) => {\n if (it.since.status === \"in_progress\") it.activeMs += ms(it.since.at, at);\n if (it.since.status === \"blocked\") it.blockedMs += ms(it.since.at, at);\n it.since = { status: to.status, at };\n if (to.stage !== it.stage) {\n it.stays[it.stays.length - 1]!.leftAt = at;\n it.stays.push({ stage: to.stage, enteredAt: at });\n stamp(it, to.stage, at);\n }\n it.stage = to.stage;\n it.status = to.status;\n };\n for (const ev of events) {\n lastAt = ev.at;\n const p = (ev.payload ?? {}) as Record<string, unknown>;\n switch (ev.type) {\n case \"item.added\": {\n const id = p[\"id\"] as string;\n const stage = p[\"stage\"] as string;\n const it: ReplayedItem = {\n id,\n type: typeof p[\"type\"] === \"string\" ? p[\"type\"] : \"task\",\n stage,\n status: \"todo\",\n stays: [{ stage, enteredAt: ev.at }],\n classOfService: \"standard\",\n activeMs: 0,\n blockedMs: 0,\n since: { status: \"todo\", at: ev.at },\n };\n stamp(it, stage, ev.at);\n items.set(id, it);\n break;\n }\n case \"item.transition\": {\n const it = items.get(p[\"id\"] as string);\n if (!it) break;\n applyTransition(it, p[\"to\"] as { stage: string; status: ItemStatus }, ev.at);\n break;\n }\n case \"cadence.replenishment\": {\n const list = (p[\"items\"] ?? []) as Array<{\n id: string;\n classOfService: ClassOfService;\n deadline: string | null;\n }>;\n for (const c of list) {\n const it = items.get(c.id);\n if (!it) continue;\n it.classOfService = c.classOfService;\n if (c.deadline) it.deadline = c.deadline;\n else delete it.deadline;\n }\n break;\n }\n case \"blocker.raised\": {\n blockers.push({\n item: p[\"id\"] as string,\n blocker: p[\"blocker\"] as string,\n raisedAt: ev.at,\n });\n const it = items.get(p[\"id\"] as string);\n const t = carried(p);\n if (it && t) applyTransition(it, t.to, ev.at);\n break;\n }\n case \"blocker.cleared\": {\n const b = blockers.find(\n (x) => x.item === p[\"id\"] && x.blocker === p[\"blocker\"] && x.clearedAt === undefined,\n );\n if (b) b.clearedAt = ev.at;\n const it = items.get(p[\"id\"] as string);\n const t = carried(p);\n if (it && t) applyTransition(it, t.to, ev.at);\n break;\n }\n default:\n break;\n }\n }\n return { items, blockers, lastAt };\n}\n","import { timSort } from \"exsorted\";\nimport type { WorkflowState } from \"../types.ts\";\nimport { OPEN } from \"./columns.ts\";\nimport { configOf } from \"./config.ts\";\nimport { replay, type Replay } from \"./replay.ts\";\n\nexport interface KanbanMetrics {\n leadTimeMs: number[];\n leadTimeP50: number;\n leadTimeP85: number;\n cycleTimeMsByColumn: Record<string, number>;\n throughput: number[];\n wipByColumn: Record<string, number>;\n flowEfficiency: number;\n agingWipMs: Record<string, number>;\n cumulativeFlow: Record<string, number>;\n sleCompliance: Record<string, number>;\n blockerTimeMs: number;\n meanBlockerTimeMs: number;\n}\n\n/** Nearest-rank percentile; 0 for an empty list. */\nexport function percentile(values: number[], p: number): number {\n if (values.length === 0) return 0;\n const sorted = timSort([...values], (a, b) => a - b);\n const rank = Math.min(sorted.length, Math.max(1, Math.ceil((p / 100) * sorted.length)));\n return sorted[rank - 1]!;\n}\n\nconst ms = (from: string, to: string) => Date.parse(to) - Date.parse(from);\nconst ratio = (num: number, den: number) => (den === 0 ? 0 : num / den);\n\nfunction boardOf(state: WorkflowState) {\n const commitment = state.stages.find((s) => s.commitmentPoint)?.id ?? \"\";\n const delivery = state.stages.find((s) => s.deliveryPoint)?.id ?? \"\";\n return {\n commitment,\n delivery,\n ci: state.stages.findIndex((s) => s.id === commitment),\n di: state.stages.findIndex((s) => s.id === delivery),\n };\n}\n\nfunction staysOf(r: Replay): Record<string, number[]> {\n const out: Record<string, number[]> = {};\n for (const it of r.items.values())\n for (const st of it.stays)\n if (st.leftAt !== undefined) (out[st.stage] ??= []).push(ms(st.enteredAt, st.leftAt));\n return out;\n}\n\n/** Completed stay durations per column. */\nexport function columnStays(state: WorkflowState): Record<string, number[]> {\n const b = boardOf(state);\n return staysOf(replay(state.events, b.commitment, b.delivery));\n}\n\nexport function kanbanMetrics(state: WorkflowState): KanbanMetrics {\n const cfg = configOf(state);\n const b = boardOf(state);\n const r = replay(state.events, b.commitment, b.delivery);\n const items = [...r.items.values()];\n const columns = state.stages.map((s) => s.id);\n const index = new Map(columns.map((id, i) => [id, i] as const));\n\n // questions (escalations) are born on the board and answered, never delivered\n const delivered = timSort(\n items.filter(\n (i) => i.type !== \"question\" && i.committedAt !== undefined && i.deliveredAt !== undefined,\n ),\n (x, y) => Date.parse(x.deliveredAt!) - Date.parse(y.deliveredAt!),\n );\n const leadTimeMs = delivered.map((i) => ms(i.committedAt!, i.deliveredAt!));\n\n const cycleTimeMsByColumn: Record<string, number> = {};\n for (const [col, list] of Object.entries(staysOf(r)))\n cycleTimeMsByColumn[col] = list.reduce((s, x) => s + x, 0) / list.length;\n\n const commits = items\n .filter((i) => i.type !== \"question\" && i.committedAt !== undefined)\n .map((i) => Date.parse(i.committedAt!));\n let throughput: number[] = [];\n if (commits.length > 0) {\n const start = commits.reduce((lo, x) => (x < lo ? x : lo), commits[0]!);\n const n = Math.floor((Date.parse(r.lastAt) - start) / cfg.throughputWindowMs) + 1;\n throughput = Array.from({ length: n }, () => 0);\n for (const i of delivered) {\n const idx = Math.floor((Date.parse(i.deliveredAt!) - start) / cfg.throughputWindowMs);\n if (idx >= 0 && idx < n) throughput[idx]! += 1;\n }\n }\n\n const wipByColumn: Record<string, number> = Object.fromEntries(columns.map((c) => [c, 0]));\n const agingWipMs: Record<string, number> = {};\n for (const i of items) {\n if (!OPEN.has(i.status)) continue;\n if (Object.hasOwn(wipByColumn, i.stage)) wipByColumn[i.stage]! += 1;\n const idx = index.get(i.stage);\n if (idx !== undefined && idx >= b.ci && idx < b.di)\n agingWipMs[i.id] = ms(i.stays[i.stays.length - 1]!.enteredAt, r.lastAt);\n }\n\n const firstEntry = new Map<string, Map<string, string>>();\n for (const i of items)\n for (const st of i.stays) {\n const per = firstEntry.get(st.stage) ?? new Map<string, string>();\n if (!per.has(i.id)) per.set(i.id, st.enteredAt);\n firstEntry.set(st.stage, per);\n }\n const days = timSort([...new Set(state.events.map((e) => e.at.slice(0, 10)))], (x, y) =>\n x < y ? -1 : x > y ? 1 : 0,\n );\n const cumulativeFlow: Record<string, number> = {};\n for (const day of days)\n for (const col of columns)\n cumulativeFlow[`${day}:${col}`] = [...(firstEntry.get(col)?.values() ?? [])].filter(\n (at) => at.slice(0, 10) <= day,\n ).length;\n\n const sleCompliance: Record<string, number> = {};\n for (const [cls, entry] of Object.entries(cfg.classesOfService)) {\n if (!entry?.sle) continue;\n const mine = delivered.filter((i) => i.classOfService === cls);\n if (mine.length === 0) continue;\n sleCompliance[cls] =\n mine.filter((i) => ms(i.committedAt!, i.deliveredAt!) <= entry.sle!.targetMs).length /\n mine.length;\n }\n\n const blockerTimeMs = r.blockers.reduce((s, x) => s + ms(x.raisedAt, x.clearedAt ?? r.lastAt), 0);\n\n return {\n leadTimeMs,\n leadTimeP50: percentile(leadTimeMs, 50),\n leadTimeP85: percentile(leadTimeMs, 85),\n cycleTimeMsByColumn,\n throughput,\n wipByColumn,\n flowEfficiency: ratio(\n delivered.reduce((s, i) => s + i.activeMs, 0),\n leadTimeMs.reduce((s, x) => s + x, 0),\n ),\n agingWipMs,\n cumulativeFlow,\n sleCompliance,\n blockerTimeMs,\n meanBlockerTimeMs: ratio(blockerTimeMs, r.blockers.length),\n };\n}\n","import { timSort } from \"exsorted\";\nimport type { WorkflowState } from \"../types.ts\";\nimport { addedAt, cardAge } from \"./board.ts\";\nimport { ACTIVE, OPEN, activeExpedites, commitmentColumn, onBoard } from \"./columns.ts\";\nimport { configOf } from \"./config.ts\";\nimport { columnStays, kanbanMetrics, percentile } from \"./metrics.ts\";\n\nexport interface OpsReport {\n blockers: Array<{ item: string; blocker: string; owner: string; reason: string; ageMs: number }>;\n agingWip: Array<{\n item: string;\n column: string;\n status: string;\n ageMs: number;\n p85Ms: number | null;\n overP85: boolean;\n }>;\n queued: Record<string, number>;\n active: Record<string, number>;\n}\n\nexport function opsReport(state: WorkflowState, now: string): OpsReport {\n const t = Date.parse(now);\n const stays = columnStays(state);\n const blockers: OpsReport[\"blockers\"] = [];\n const aging: OpsReport[\"agingWip\"] = [];\n const queued: Record<string, number> = Object.fromEntries(state.stages.map((s) => [s.id, 0]));\n const active: Record<string, number> = Object.fromEntries(state.stages.map((s) => [s.id, 0]));\n for (const it of Object.values(state.items)) {\n for (const b of it.blockers)\n if (!b.clearedAt)\n blockers.push({\n item: it.id,\n blocker: b.id,\n owner: b.owner,\n reason: b.reason,\n ageMs: t - Date.parse(b.raisedAt),\n });\n if (ACTIVE.has(it.status)) active[it.stage] = (active[it.stage] ?? 0) + 1;\n else if (it.status === \"todo\" || it.status === \"review\")\n queued[it.stage] = (queued[it.stage] ?? 0) + 1;\n if (OPEN.has(it.status) && onBoard(state, it)) {\n const history = stays[it.stage] ?? [];\n const p85Ms = history.length ? percentile(history, 85) : null;\n const ageMs = cardAge(state, it, now);\n aging.push({\n item: it.id,\n column: it.stage,\n status: it.status,\n ageMs,\n p85Ms,\n overP85: p85Ms !== null && ageMs > p85Ms,\n });\n }\n }\n return {\n blockers,\n agingWip: timSort(aging, (a, b) => b.ageMs - a.ageMs || (a.item < b.item ? -1 : 1)),\n queued,\n active,\n };\n}\n\nexport interface RiskReport {\n fixedDate: Array<{\n item: string;\n deadline: string;\n timeLeftMs: number;\n projectedRemainingMs: number | null;\n atRisk: boolean;\n }>;\n staleBlockers: Array<{ item: string; blocker: string; owner: string; ageMs: number }>;\n expediteActive: string[];\n}\n\n/** Time the item entered the commitment column (its first transition there), else when it was added. */\nfunction committedAt(state: WorkflowState, id: string): string {\n const commit = commitmentColumn(state).id;\n const it = state.items[id]!;\n const t = it.transitions.find((x) => x.to.stage === commit && x.from.stage !== commit);\n return t?.at ?? addedAt(state, id);\n}\n\nexport function riskReport(state: WorkflowState, now: string, staleAfterMs: number): RiskReport {\n const t = Date.parse(now);\n const cfg = configOf(state);\n const lead = kanbanMetrics(state).leadTimeMs;\n const p = cfg.classesOfService[\"fixed-date\"]?.sle?.percentile ?? 85;\n const pLead = lead.length ? percentile(lead, p) : null;\n const fixedDate: RiskReport[\"fixedDate\"] = [];\n const staleBlockers: RiskReport[\"staleBlockers\"] = [];\n for (const it of Object.values(state.items)) {\n for (const b of it.blockers) {\n const ageMs = b.clearedAt ? 0 : t - Date.parse(b.raisedAt);\n if (!b.clearedAt && ageMs > staleAfterMs)\n staleBlockers.push({ item: it.id, blocker: b.id, owner: b.owner, ageMs });\n }\n if (\n it.classOfService !== \"fixed-date\" ||\n !it.deadline ||\n !OPEN.has(it.status) ||\n !onBoard(state, it)\n )\n continue;\n const elapsed = t - Date.parse(committedAt(state, it.id));\n const projectedRemainingMs = pLead === null ? null : Math.max(0, pLead - elapsed);\n const timeLeftMs = Date.parse(it.deadline) - t;\n fixedDate.push({\n item: it.id,\n deadline: it.deadline,\n timeLeftMs,\n projectedRemainingMs,\n atRisk:\n timeLeftMs < 0 || (projectedRemainingMs !== null && projectedRemainingMs > timeLeftMs),\n });\n }\n return { fixedDate, staleBlockers, expediteActive: activeExpedites(state) };\n}\n","import { fail } from \"../errors.ts\";\nimport { getItem, moveItem, patchItem, stageOf } from \"../items.ts\";\nimport { applyAction } from \"../methodology.ts\";\nimport { assertPolicies } from \"../policies.ts\";\nimport { requireCap } from \"../roles.ts\";\nimport { appendEvent, nowOf } from \"../state.ts\";\nimport type {\n Ceremony,\n CeremonyInput,\n ClassOfService,\n Methodology,\n Policy,\n Stage,\n WorkflowState,\n} from \"../types.ts\";\nimport { OPEN, commitmentColumn, deliveryColumn, onBoard, optionsColumn } from \"./columns.ts\";\nimport {\n CLASSES,\n DAY_MS,\n configOf,\n validateKanbanConfig,\n validatePolicies,\n type ClassConfig,\n type KanbanColumn,\n type ServiceLevel,\n} from \"./config.ts\";\nimport { opsReport, riskReport } from \"./reports.ts\";\n\nconst isObj = (x: unknown): x is Record<string, unknown> =>\n typeof x === \"object\" && x !== null && !Array.isArray(x);\n\n/** input.items as a non-empty, duplicate-free string[] of existing item ids. */\nexport function wantItems(state: WorkflowState, input: CeremonyInput, cadence: string): string[] {\n const items = input[\"items\"];\n if (!Array.isArray(items) || items.length === 0 || !items.every((x) => typeof x === \"string\"))\n fail(\"invalid-input\", `${cadence} needs items: string[]`, 'pass [\"A\", \"B\"]');\n const dupe = items.find((id, i) => items.indexOf(id) !== i);\n if (dupe !== undefined)\n fail(\"invalid-input\", `item \"${dupe}\" appears twice in items[]`, \"list each item once\", {\n items: [dupe],\n });\n for (const id of items) getItem(state, id);\n return items;\n}\n\nfunction validLevel(x: unknown): x is ServiceLevel {\n return (\n isObj(x) &&\n typeof x[\"percentile\"] === \"number\" &&\n x[\"percentile\"] >= 0 &&\n x[\"percentile\"] <= 100 &&\n typeof x[\"targetMs\"] === \"number\" &&\n Number.isFinite(x[\"targetMs\"]) &&\n x[\"targetMs\"] > 0\n );\n}\n\nfunction withWip<T extends Stage | KanbanColumn>(x: T, limit: number | null): T {\n const { wipLimit: _w, ...rest } = x;\n return (limit === null ? rest : { ...rest, wipLimit: limit }) as T;\n}\n\nexport function kanbanCeremonies(methodology: () => Methodology): Record<string, Ceremony> {\n const act = (\n state: WorkflowState,\n type: string,\n input: CeremonyInput,\n reduce: (s: WorkflowState, now: string) => WorkflowState,\n ) =>\n applyAction(state, methodology(), { type, by: input.by, payload: input }, (s) =>\n reduce(s, nowOf(input.now)),\n );\n\n const replenishment: Ceremony = (state, input) => {\n requireCap(state, input.by, \"order-backlog\", \"manage-flow\");\n const items = wantItems(state, input, \"replenishment\");\n const target = commitmentColumn(state);\n const options = optionsColumn(state);\n for (const id of items)\n assertPolicies(state, getItem(state, id), options.exitPolicy, `leave \"${options.id}\"`);\n return act(state, \"ceremony.replenishment\", input, (s, now) => {\n for (const id of items)\n s = moveItem(s, id, { stage: target.id, status: \"todo\" }, input.by, now);\n return appendEvent(\n s,\n \"cadence.replenishment\",\n input.by,\n {\n column: target.id,\n items: items.map((id) => {\n const it = getItem(s, id);\n return {\n id,\n classOfService: it.classOfService ?? \"standard\",\n deadline: it.deadline ?? null,\n };\n }),\n },\n now,\n );\n });\n };\n\n const deliveryPlanning: Ceremony = (state, input) => {\n requireCap(state, input.by, \"facilitate\", \"manage-flow\");\n const items = wantItems(state, input, \"delivery-planning\");\n const delivery = deliveryColumn(state);\n const last = state.stages[state.stages.findIndex((st) => st.id === delivery.id) - 1]!;\n for (const id of items) {\n const it = getItem(state, id);\n if (it.stage !== last.id && it.stage !== delivery.id)\n fail(\n \"invalid-input\",\n `item \"${id}\" is in \"${it.stage}\", not ready for delivery`,\n `only cards in \"${last.id}\" or \"${delivery.id}\" can be planned for delivery`,\n { items: [id] },\n );\n }\n return act(state, \"ceremony.delivery-planning\", input, (s, now) =>\n appendEvent(\n s,\n \"cadence.delivery-planning\",\n input.by,\n {\n items,\n window: typeof input[\"window\"] === \"string\" ? input[\"window\"] : null,\n delivered: items.filter((id) => getItem(s, id).status === \"done\"),\n },\n now,\n ),\n );\n };\n\n const serviceDeliveryReview: Ceremony = (state, input) => {\n requireCap(state, input.by, \"manage-flow\");\n const wip = input[\"wip\"] ?? {};\n const policies = input[\"policies\"] ?? {};\n const sle = input[\"sle\"] ?? {};\n if (!isObj(wip) || !isObj(policies) || !isObj(sle))\n fail(\n \"invalid-input\",\n \"service-delivery-review takes wip, policies and sle objects keyed by column or class\",\n 'e.g. { \"wip\": { \"dev\": 2 }, \"policies\": { \"dev\": [{ \"kind\": \"no-open-blockers\" }] }, \"sle\": { \"standard\": { \"percentile\": 85, \"targetMs\": 604800000 } } }',\n );\n for (const [id, limit] of Object.entries(wip)) {\n stageOf(state, id);\n if (limit !== null && (typeof limit !== \"number\" || !Number.isFinite(limit) || limit < 1))\n fail(\n \"invalid-input\",\n `wip.${id} must be a positive number or null`,\n \"null removes the limit\",\n );\n }\n const checked: Record<string, Policy[]> = {};\n for (const [id, p] of Object.entries(policies)) {\n stageOf(state, id);\n checked[id] = validatePolicies(p, `policies.${id}`);\n }\n for (const [cls, level] of Object.entries(sle)) {\n if (!(CLASSES as readonly string[]).includes(cls))\n fail(\n \"invalid-input\",\n `sle.${cls} is not a class of service`,\n `use one of: ${CLASSES.join(\", \")}`,\n );\n if (level !== null && !validLevel(level))\n fail(\n \"invalid-input\",\n `sle.${cls} must be { percentile: 0..100, targetMs: > 0 } or null`,\n \"null removes the service level\",\n );\n }\n return act(state, \"ceremony.service-delivery-review\", input, (s, now) => {\n const cfg = configOf(s);\n let stages = s.stages;\n let columns = cfg.columns;\n let classesOfService = { ...cfg.classesOfService };\n const wipChanges: Array<{ column: string; before: number | null; after: number | null }> = [];\n const policyChanges: Array<{ column: string; before: Policy[]; after: Policy[] }> = [];\n const sleChanges: Array<{\n classOfService: string;\n before: ServiceLevel | null;\n after: ServiceLevel | null;\n }> = [];\n for (const [id, limit] of Object.entries(wip) as Array<[string, number | null]>) {\n const before = stages.find((st) => st.id === id)!.wipLimit ?? null;\n if (before === limit) continue;\n wipChanges.push({ column: id, before, after: limit });\n stages = stages.map((st) => (st.id === id ? withWip(st, limit) : st));\n columns = columns.map((col) => (col.id === id ? withWip(col, limit) : col));\n }\n for (const [id, p] of Object.entries(checked)) {\n const before = stages.find((st) => st.id === id)!.exitPolicy;\n if (JSON.stringify(before) === JSON.stringify(p)) continue;\n policyChanges.push({ column: id, before, after: p });\n const at = stages.findIndex((st) => st.id === id);\n // the commitment column's policies also gate the pull out of it: the next column's entry policy\n const gated = stages[at]!.commitmentPoint ? stages[at + 1]?.id : undefined;\n stages = stages.map((st) =>\n st.id === id\n ? { ...st, exitPolicy: p }\n : st.id === gated\n ? { ...st, entryPolicy: p }\n : st,\n );\n columns = columns.map((col) => (col.id === id ? { ...col, policies: p } : col));\n }\n for (const [cls, level] of Object.entries(sle) as Array<\n [ClassOfService, ServiceLevel | null]\n >) {\n const before = classesOfService[cls]?.sle ?? null;\n if (JSON.stringify(before) === JSON.stringify(level)) continue;\n sleChanges.push({ classOfService: cls, before, after: level });\n const { sle: _old, ...rest } = classesOfService[cls] ?? {};\n classesOfService = {\n ...classesOfService,\n [cls]: level === null ? rest : { ...rest, sle: level },\n };\n }\n s = { ...s, stages, config: { ...cfg, columns, classesOfService } };\n return appendEvent(\n s,\n \"cadence.service-delivery-review\",\n input.by,\n { wip: wipChanges, policies: policyChanges, sle: sleChanges },\n now,\n );\n });\n };\n\n const operationsReview: Ceremony = (state, input) => {\n requireCap(state, input.by, \"facilitate\", \"manage-flow\");\n const assign = (input[\"assign\"] ?? []) as Array<{\n item: string;\n blocker: string;\n owner: string;\n }>;\n if (\n !Array.isArray(assign) ||\n !assign.every(\n (x) => isObj(x) && typeof x[\"item\"] === \"string\" && typeof x[\"blocker\"] === \"string\",\n )\n )\n fail(\n \"invalid-input\",\n \"operations-review.assign must be [{ item, blocker, owner }]\",\n 'e.g. { \"assign\": [{ \"item\": \"A\", \"blocker\": \"A-b1\", \"owner\": \"service-delivery-manager\" }] }',\n );\n for (const x of assign) {\n const it = getItem(state, x.item);\n if (!it.blockers.some((b) => b.id === x.blocker && !b.clearedAt))\n fail(\n \"invalid-input\",\n `item \"${x.item}\" has no open blocker \"${x.blocker}\"`,\n `open blockers: ${\n it.blockers\n .filter((b) => !b.clearedAt)\n .map((b) => b.id)\n .join(\", \") || \"(none)\"\n }`,\n { items: [x.item] },\n );\n }\n return act(state, \"ceremony.operations-review\", input, (s, now) => {\n for (const x of assign) {\n const from = getItem(s, x.item).blockers.find((b) => b.id === x.blocker)!.owner;\n s = patchItem(s, x.item, (it) => ({\n ...it,\n blockers: it.blockers.map((b) => (b.id === x.blocker ? { ...b, owner: x.owner } : b)),\n }));\n s = appendEvent(\n s,\n \"blocker.reassigned\",\n input.by,\n { id: x.item, blocker: x.blocker, from, to: x.owner },\n now,\n );\n }\n return appendEvent(s, \"cadence.operations-review\", input.by, opsReport(s, now), now);\n });\n };\n\n const riskReview: Ceremony = (state, input) => {\n requireCap(state, input.by, \"facilitate\", \"manage-flow\");\n const stale = input[\"staleAfterMs\"] ?? 7 * DAY_MS;\n if (typeof stale !== \"number\" || !Number.isFinite(stale) || stale < 0)\n fail(\n \"invalid-input\",\n \"risk-review.staleAfterMs must be a non-negative number of milliseconds\",\n \"omit it for one week\",\n );\n return act(state, \"ceremony.risk-review\", input, (s, now) =>\n appendEvent(s, \"cadence.risk-review\", input.by, riskReport(s, now, stale), now),\n );\n };\n\n const strategyReview: Ceremony = (state, input) => {\n requireCap(state, input.by, \"manage-flow\");\n const cfg = configOf(state);\n const patch = input[\"classesOfService\"] ?? {};\n if (!isObj(patch))\n fail(\n \"invalid-input\",\n \"strategy-review.classesOfService must be an object keyed by class\",\n 'e.g. { \"expedite\": { \"wipBypass\": 2 }, \"intangible\": null }',\n );\n const merged: Record<string, ClassConfig> = { ...cfg.classesOfService } as Record<\n string,\n ClassConfig\n >;\n for (const [cls, entry] of Object.entries(patch)) {\n if (!(CLASSES as readonly string[]).includes(cls))\n fail(\n \"invalid-input\",\n `classesOfService.${cls} is not a class of service`,\n `use one of: ${CLASSES.join(\", \")}`,\n );\n if (entry === null) delete merged[cls];\n else merged[cls] = entry as ClassConfig;\n }\n const next = validateKanbanConfig({\n ...cfg,\n classesOfService: merged,\n maxExpedite: input[\"maxExpedite\"] ?? cfg.maxExpedite,\n });\n return act(state, \"ceremony.strategy-review\", input, (s, now) => {\n const mix: Record<string, number> = Object.fromEntries(CLASSES.map((k) => [k, 0]));\n for (const it of Object.values(s.items))\n if (OPEN.has(it.status) && onBoard(s, it)) mix[it.classOfService ?? \"standard\"]! += 1;\n s = {\n ...s,\n config: {\n ...configOf(s),\n classesOfService: next.classesOfService,\n maxExpedite: next.maxExpedite,\n },\n };\n return appendEvent(\n s,\n \"cadence.strategy-review\",\n input.by,\n {\n mix,\n before: { classesOfService: cfg.classesOfService, maxExpedite: cfg.maxExpedite },\n after: { classesOfService: next.classesOfService, maxExpedite: next.maxExpedite },\n },\n now,\n );\n });\n };\n\n return {\n replenishment,\n \"delivery-planning\": deliveryPlanning,\n \"service-delivery-review\": serviceDeliveryReview,\n \"operations-review\": operationsReview,\n \"risk-review\": riskReview,\n \"strategy-review\": strategyReview,\n };\n}\n","import type { Role } from \"../types.ts\";\n\nexport function kanbanRoles(): Role[] {\n return [\n {\n id: \"service-request-manager\",\n name: \"Service Request Manager\",\n modelTier: \"large\",\n capabilities: [\"order-backlog\", \"define-acceptance\", \"manage-flow\", \"escalate\"],\n canApprove: [],\n inputs: [\"stakeholder-requests\", \"options\"],\n outputs: [\"ordered-options\", \"acceptance-criteria\", \"classes-of-service\"],\n do_not: [\n \"do not implement items yourself\",\n \"do not push work past the commitment point outside replenishment\",\n ],\n },\n {\n id: \"service-delivery-manager\",\n name: \"Service Delivery Manager\",\n modelTier: \"large\",\n capabilities: [\"facilitate\", \"manage-flow\", \"escalate\"],\n canApprove: [],\n inputs: [\"board\", \"flow-metrics\", \"blockers\"],\n outputs: [\"cadence-records\", \"wip-and-policy-changes\", \"lessons\"],\n do_not: [\"do not reorder the options\", \"do not assign work; the planner pulls\"],\n },\n {\n id: \"worker\",\n name: \"Worker\",\n modelTier: \"small\",\n capabilities: [\"deliver\", \"review\", \"verify\"],\n canApprove: [],\n inputs: [\"brief\"],\n outputs: [\"code\", \"test-output\"],\n do_not: [\n \"do not change acceptance criteria\",\n \"do not pull more work while your card is open\",\n ],\n },\n ];\n}\n","import type { Action, Policy, Rule, Violation, WorkflowState } from \"../types.ts\";\nimport { ACTIVE, OPEN, onBoard } from \"./columns.ts\";\nimport { configOf } from \"./config.ts\";\n\nconst v = (\n rule: string,\n severity: Violation[\"severity\"],\n message: string,\n fix: string,\n item?: string,\n): Violation => (item ? { rule, severity, item, message, fix } : { rule, severity, message, fix });\n\nconst payloadOf = (a: Action): Record<string, unknown> =>\n (a.payload ?? {}) as Record<string, unknown>;\nconst itemsOf = (a: Action): string[] => {\n const items = payloadOf(a)[\"items\"];\n return Array.isArray(items) ? (items as string[]) : [];\n};\nconst activeIn = (s: WorkflowState, column: string) =>\n Object.values(s.items).filter((i) => i.stage === column && ACTIVE.has(i.status)).length;\n\nexport function kanbanRules(): Rule[] {\n const policyExplicit: Rule = {\n id: \"policy-explicit\",\n severity: \"error\",\n check(s, a) {\n const delivery = s.stages.find((st) => st.deliveryPoint)?.id;\n if (a.type === \"init\")\n return s.stages\n .filter((st) => st.id !== delivery && st.exitPolicy.length === 0)\n .map((st) =>\n v(\n \"policy-explicit\",\n \"error\",\n `column \"${st.id}\" has no explicit policy`,\n `give column \"${st.id}\" at least one policy, e.g. { \"kind\": \"acceptance-written\" }`,\n ),\n );\n if (a.type === \"ceremony.service-delivery-review\") {\n const policies = (payloadOf(a)[\"policies\"] ?? {}) as Record<string, Policy[]>;\n return Object.entries(policies)\n .filter(([id, p]) => id !== delivery && Array.isArray(p) && p.length === 0)\n .map(([id]) =>\n v(\n \"policy-explicit\",\n \"error\",\n `column \"${id}\" would be left without a policy`,\n \"keep at least one policy per column; Kanban policies are explicit\",\n ),\n );\n }\n return [];\n },\n };\n\n const commitmentOnce: Rule = {\n id: \"commitment-point-once\",\n severity: \"error\",\n check(s, a) {\n if (a.type !== \"init\") return [];\n const out: Violation[] = [];\n const commits = s.stages.filter((st) => st.commitmentPoint);\n const delivers = s.stages.filter((st) => st.deliveryPoint);\n if (commits.length !== 1)\n out.push(\n v(\n \"commitment-point-once\",\n \"error\",\n `${commits.length} columns are marked commitmentPoint (${commits.map((c) => c.id).join(\", \") || \"none\"})`,\n \"mark exactly one column commitmentPoint: true\",\n ),\n );\n if (delivers.length !== 1)\n out.push(\n v(\n \"commitment-point-once\",\n \"error\",\n `${delivers.length} columns are marked deliveryPoint (${delivers.map((c) => c.id).join(\", \") || \"none\"})`,\n \"mark exactly one column deliveryPoint: true\",\n ),\n );\n if (commits.length === 1 && delivers.length === 1) {\n const ci = s.stages.indexOf(commits[0]!);\n const di = s.stages.indexOf(delivers[0]!);\n if (di !== s.stages.length - 1)\n out.push(\n v(\n \"commitment-point-once\",\n \"error\",\n `delivery column \"${delivers[0]!.id}\" is not the last column`,\n \"move the delivery column to the end; finished cards leave the board there\",\n ),\n );\n if (ci === 0)\n out.push(\n v(\n \"commitment-point-once\",\n \"error\",\n `commitment column \"${commits[0]!.id}\" is the first column`,\n \"keep an Options column before the commitment point; replenishment pulls from it\",\n ),\n );\n else if (ci >= di)\n out.push(\n v(\n \"commitment-point-once\",\n \"error\",\n `commitment column \"${commits[0]!.id}\" comes after the delivery column`,\n \"order columns options → commitment → … → delivery\",\n ),\n );\n }\n return out;\n },\n };\n\n const wipRespected: Rule = {\n id: \"wip-respected\",\n severity: \"error\",\n check(s, a) {\n if (a.type === \"ceremony.replenishment\") {\n const target = s.stages.find((st) => st.commitmentPoint);\n if (!target || target.wipLimit === undefined) return [];\n const items = itemsOf(a);\n const open = Object.values(s.items).filter(\n (i) => i.stage === target.id && OPEN.has(i.status),\n ).length;\n const bypass = items.some((id) => s.items[id]?.classOfService === \"expedite\")\n ? (configOf(s).classesOfService.expedite?.wipBypass ?? 1)\n : 0;\n const limit = target.wipLimit + bypass;\n if (open + items.length <= limit) return [];\n return [\n v(\n \"wip-respected\",\n \"error\",\n `column \"${target.id}\" holds ${open} card(s); pulling ${items.length} more exceeds its WIP limit of ${target.wipLimit}${bypass ? ` (+${bypass} expedite bypass)` : \"\"}`,\n `pull at most ${Math.max(0, limit - open)} card(s) now, or raise the limit in a service-delivery-review`,\n ),\n ];\n }\n if (a.type === \"ceremony.service-delivery-review\") {\n const wip = (payloadOf(a)[\"wip\"] ?? {}) as Record<string, number | null>;\n const out: Violation[] = [];\n for (const [id, limit] of Object.entries(wip)) {\n if (typeof limit !== \"number\") continue;\n const active = activeIn(s, id);\n if (active > limit)\n out.push(\n v(\n \"wip-respected\",\n \"warning\",\n `column \"${id}\" has ${active} active card(s), above the new limit of ${limit}`,\n \"nothing new is pulled into it until it drains; finish or move cards\",\n ),\n );\n }\n return out;\n }\n return [];\n },\n };\n\n const pullNotPush: Rule = {\n id: \"pull-not-push\",\n severity: \"error\",\n check(s, a) {\n if (a.type !== \"ceremony.replenishment\") return [];\n const options = s.stages[0];\n const commit = s.stages.find((st) => st.commitmentPoint);\n if (!options || !commit) return [];\n const out: Violation[] = [];\n const column = payloadOf(a)[\"column\"];\n if (column !== undefined && column !== commit.id)\n out.push(\n v(\n \"pull-not-push\",\n \"error\",\n `replenishment may only pull into the commitment column \"${commit.id}\", not \"${String(column)}\"`,\n \"drop column or set it to the commitment column; later columns are pulled by the planner\",\n ),\n );\n for (const id of itemsOf(a)) {\n const it = s.items[id];\n if (!it) continue;\n if (it.stage !== options.id || it.status !== \"todo\")\n out.push(\n v(\n \"pull-not-push\",\n \"error\",\n `item \"${id}\" is ${it.status} in \"${it.stage}\", not an option`,\n `only todo cards in \"${options.id}\" can be pulled; cards already on the board flow by pull`,\n id,\n ),\n );\n }\n return out;\n },\n };\n\n const blockerHasOwner: Rule = {\n id: \"blocker-has-owner\",\n severity: \"error\",\n check(s, a) {\n if (!a.type.startsWith(\"ceremony.\")) return [];\n const out: Violation[] = [];\n if (a.type === \"ceremony.operations-review\") {\n const assign = (payloadOf(a)[\"assign\"] ?? []) as Array<{\n item: string;\n blocker: string;\n owner: string;\n }>;\n for (const x of assign)\n if (typeof x.owner !== \"string\" || x.owner.trim() === \"\")\n out.push(\n v(\n \"blocker-has-owner\",\n \"error\",\n `blocker \"${x.blocker}\" on \"${x.item}\" would have no owner`,\n \"name the role or person who clears it\",\n x.item,\n ),\n );\n }\n for (const it of Object.values(s.items))\n for (const b of it.blockers)\n if (!b.clearedAt && b.owner.trim() === \"\")\n out.push(\n v(\n \"blocker-has-owner\",\n \"warning\",\n `blocker \"${b.id}\" on \"${it.id}\" has no owner`,\n `assign one in operations-review: { \"assign\": [{ \"item\": \"${it.id}\", \"blocker\": \"${b.id}\", \"owner\": \"<who>\" }] }`,\n it.id,\n ),\n );\n return out;\n },\n };\n\n const oneExpedite: Rule = {\n id: \"one-expedite\",\n severity: \"error\",\n check(s, a) {\n if (a.type !== \"ceremony.replenishment\") return [];\n const fresh = itemsOf(a).filter((id) => s.items[id]?.classOfService === \"expedite\");\n if (fresh.length === 0) return [];\n const already = Object.values(s.items)\n .filter((i) => i.classOfService === \"expedite\" && OPEN.has(i.status) && onBoard(s, i))\n .map((i) => i.id);\n const max = configOf(s).maxExpedite;\n if (already.length + fresh.length <= max) return [];\n return [\n v(\n \"one-expedite\",\n \"error\",\n `${already.length} expedite card(s) already on the board (${already.join(\", \") || \"none\"}); pulling ${fresh.join(\", \")} exceeds maxExpedite ${max}`,\n \"deliver the current expedite first, reclassify the new card, or raise maxExpedite in a strategy-review\",\n ),\n ];\n },\n };\n\n const fixedDate: Rule = {\n id: \"fixed-date-needs-deadline\",\n severity: \"error\",\n check(s, a) {\n if (a.type !== \"ceremony.replenishment\") return [];\n return itemsOf(a)\n .filter((id) => {\n const it = s.items[id];\n return (\n it?.classOfService === \"fixed-date\" &&\n !(it.deadline && Number.isFinite(Date.parse(it.deadline)))\n );\n })\n .map((id) =>\n v(\n \"fixed-date-needs-deadline\",\n \"error\",\n `fixed-date item \"${id}\" has no deadline`,\n `editItem(\"${id}\", { deadline: \"<ISO date>\" }) before pulling it`,\n id,\n ),\n );\n },\n };\n\n return [\n policyExplicit,\n commitmentOnce,\n wipRespected,\n pullNotPush,\n blockerHasOwner,\n oneExpedite,\n fixedDate,\n ];\n}\n","import type { Stage } from \"../types.ts\";\nimport type { KanbanConfig } from \"./config.ts\";\n\nexport function kanbanStages(config: KanbanConfig): Stage[] {\n const stages = config.columns.map((c) => {\n const st: Stage = { id: c.id, name: c.name, entryPolicy: [], exitPolicy: c.policies };\n if (c.wipLimit !== undefined) st.wipLimit = c.wipLimit;\n if (c.commitmentPoint) st.commitmentPoint = true;\n if (c.deliveryPoint) st.deliveryPoint = true;\n if (c.review) st.review = true;\n return st;\n });\n // the commitment column's policies also gate the pull out of it: the next column's entry policy\n const at = stages.findIndex((s) => s.commitmentPoint);\n const after = at >= 0 ? stages[at + 1] : undefined;\n if (after) after.entryPolicy = stages[at]!.exitPolicy;\n return stages;\n}\n","import { timSort } from \"exsorted\";\nimport type { CoreTerm, Methodology, PlannerOptions, Policy, WorkItem } from \"../types.ts\";\nimport { cadencesDue } from \"./board.ts\";\nimport { kanbanCeremonies } from \"./ceremonies.ts\";\nimport { ACTIVE, activeExpedites, commitmentColumn, enteredStageAt, onBoard } from \"./columns.ts\";\nimport { configOf, validateKanbanConfig, type KanbanConfig } from \"./config.ts\";\nimport { kanbanMetrics } from \"./metrics.ts\";\nimport { kanbanRoles } from \"./roles.ts\";\nimport { kanbanRules } from \"./rules.ts\";\nimport { kanbanStages } from \"./stages.ts\";\n\nexport {\n validateKanbanConfig,\n DEFAULT_COLUMNS,\n KANBAN_CADENCES,\n CLASSES,\n DAY_MS,\n} from \"./config.ts\";\nexport { kanbanRoles } from \"./roles.ts\";\nexport { kanbanStages } from \"./stages.ts\";\nexport { kanbanRules } from \"./rules.ts\";\nexport { kanbanCeremonies, wantItems } from \"./ceremonies.ts\";\nexport type {\n KanbanConfig,\n KanbanColumn,\n KanbanCadence,\n ClassConfig,\n ServiceLevel,\n} from \"./config.ts\";\nexport {\n ACTIVE,\n OPEN,\n optionsColumn,\n commitmentColumn,\n deliveryColumn,\n columnIndex,\n onBoard,\n activeExpedites,\n enteredStageAt,\n} from \"./columns.ts\";\n\nexport const KANBAN_VOCABULARY: Record<CoreTerm, string> = {\n backlog: \"Options\",\n item: \"Work Item\",\n stage: \"Column\",\n iteration: \"Cadence\",\n increment: \"Delivery\",\n ceremony: \"Cadence\",\n gate: \"Policy\",\n};\n\nexport { configOf } from \"./config.ts\";\nexport { board, cardAge, addedAt, cadencesDue, CADENCE_EVENT } from \"./board.ts\";\nexport type { BoardCard, BoardColumn, CadenceStatus } from \"./board.ts\";\nexport { opsReport, riskReport } from \"./reports.ts\";\nexport type { OpsReport, RiskReport } from \"./reports.ts\";\nexport { replay } from \"./replay.ts\";\nexport { kanbanMetrics, percentile, columnStays } from \"./metrics.ts\";\nexport type { KanbanMetrics } from \"./metrics.ts\";\nexport type { Replay, ReplayedItem, ReplayedBlocker, Stay } from \"./replay.ts\";\n\nconst RANK: Record<string, number> = { expedite: 0, \"fixed-date\": 1, standard: 2, intangible: 3 };\nconst rankOf = (item: WorkItem) => RANK[item.classOfService ?? \"standard\"] ?? 2;\n\n/** What the priority function needs besides the card: how long it has been passed over, and the fairness config. */\nexport interface PriorityContext {\n /** next() rounds that resolved since the card entered its column */\n deferrals: number;\n aging: boolean;\n maxDeferralRounds: number;\n}\n\nconst BAND = 1e15;\nconst AGE_STEP = 4e9;\nconst clamp = (n: number, lo: number, hi: number) => Math.min(hi, Math.max(lo, n));\n\n/**\n * Class band x 1e15 + an in-band offset. Bands: question 5, expedite 4, fixed-date 3, standard 2,\n * intangible 1. Fixed-date: earlier deadline = larger offset. Others: own priority (clamped to +-1e9)\n * plus, with aging, 4e9 per full window of maxDeferralRounds deferrals (priority decides within a window). An intangible card deferred that many\n * times is scored in the standard band, so it overtakes fresh standard cards.\n */\nexport function priorityByClass(item: WorkItem, ctx: PriorityContext): number {\n const cos = item.classOfService ?? \"standard\";\n if (item.type === \"question\") return 5 * BAND;\n if (cos === \"fixed-date\" && item.deadline !== undefined) {\n const t = Date.parse(item.deadline);\n if (Number.isFinite(t)) return 3 * BAND + 1e10 - Math.floor(t / 1000);\n }\n const aged = ctx.aging ? Math.floor(ctx.deferrals / ctx.maxDeferralRounds) : 0;\n const offset = clamp(item.priority ?? 0, -1e9, 1e9) + aged * AGE_STEP;\n const promoted = ctx.aging && ctx.deferrals >= ctx.maxDeferralRounds;\n const band =\n cos === \"expedite\" ? 4 : cos === \"fixed-date\" ? 3 : cos === \"intangible\" && !promoted ? 1 : 2;\n return band * BAND + offset;\n}\n\n/** Class rank, then the card that has waited longest in its column, then id (FIFO by aging). */\nexport function byClassThenAge(a: WorkItem, b: WorkItem): number {\n const r = rankOf(a) - rankOf(b);\n if (r !== 0) return r;\n const ageA = enteredStageAt(a);\n const ageB = enteredStageAt(b);\n const ta = ageA === undefined ? 0 : Date.parse(ageA);\n const tb = ageB === undefined ? 0 : Date.parse(ageB);\n if (ta !== tb) return ta - tb;\n return a.id < b.id ? -1 : a.id > b.id ? 1 : 0;\n}\n\nfunction describePolicies(policies: Policy[]): string {\n return (\n policies\n .map((p) =>\n p.kind === \"evidence\"\n ? `evidence ${p.evidenceKind}`\n : p.kind === \"custom\"\n ? `${p.id}: ${p.description}`\n : p.kind,\n )\n .join(\", \") || \"(none)\"\n );\n}\n\nexport function kanban(): Methodology<KanbanConfig> {\n return {\n name: \"kanban\",\n vocabulary: KANBAN_VOCABULARY,\n validateConfig: validateKanbanConfig,\n defaultStages: kanbanStages,\n defaultRoles: kanbanRoles,\n requiredCapabilities: [\"manage-flow\", \"deliver\"],\n exclusiveCapabilities: [],\n plannerOptions(state): PlannerOptions {\n const cfg = configOf(state);\n const commit = commitmentColumn(state);\n const after = state.stages[state.stages.findIndex((s) => s.id === commit.id) + 1];\n const bypass = cfg.classesOfService.expedite?.wipBypass ?? 1;\n // one pass over the events: times, planner.resolved prefix counts and item.added times\n const times: number[] = [];\n const resolvedBefore: number[] = [0]; // resolvedBefore[i] = resolved events among events[0..i)\n const added = new Map<string, string>();\n for (const e of state.events) {\n times.push(Date.parse(e.at));\n resolvedBefore.push(\n resolvedBefore[resolvedBefore.length - 1]! + (e.type === \"planner.resolved\" ? 1 : 0),\n );\n if (e.type === \"item.added\") added.set((e.payload as { id: string }).id, e.at);\n }\n /** planner.resolved events after the last event at or before `t` (events are time-ordered). */\n const deferralsSince = (t: number): number => {\n let lo = 0;\n let hi = times.length;\n while (lo < hi) {\n const mid = (lo + hi) >> 1;\n if (times[mid]! <= t) lo = mid + 1;\n else hi = mid;\n }\n return resolvedBefore[times.length]! - resolvedBefore[lo]!;\n };\n const po: PlannerOptions = {\n schedulerMode: \"throughput\",\n fairnessPolicy: cfg.fairness.aging ? \"aging\" : \"none\",\n deadlineStrategy: \"earliest-first\",\n dispatchStage: (item) => (item.stage === commit.id && after ? after.id : undefined),\n priorityOf: (item) => {\n const since = Date.parse(enteredStageAt(item) ?? added.get(item.id) ?? \"\");\n return priorityByClass(item, {\n deferrals: deferralsSince(Number.isFinite(since) ? since : 0),\n aging: cfg.fairness.aging,\n maxDeferralRounds: cfg.fairness.maxDeferralRounds,\n });\n },\n tieBreaker: byClassThenAge,\n wipCounts: [...ACTIVE],\n wipLimitOf: (stage, item) =>\n stage.wipLimit === undefined\n ? undefined\n : item.classOfService === \"expedite\"\n ? stage.wipLimit + bypass\n : stage.wipLimit,\n };\n po.maxDeferralRounds = cfg.fairness.maxDeferralRounds;\n return po;\n },\n candidates(state): WorkItem[] {\n // at most maxExpedite expedite cards may be active; the free slots go to the oldest waiting expedites\n const slots = Math.max(0, configOf(state).maxExpedite - activeExpedites(state).length);\n const all = Object.values(state.items).filter(\n (i) => (i.status === \"todo\" || i.status === \"review\") && onBoard(state, i),\n );\n const expedites = timSort(\n all.filter((i) => i.classOfService === \"expedite\"),\n byClassThenAge,\n ).slice(0, slots);\n return all.filter((i) => i.classOfService !== \"expedite\" || expedites.includes(i));\n },\n invariants(state, item): string[] {\n const cfg = configOf(state);\n const st = state.stages.find((s) => s.id === item.stage)!;\n const cos = item.classOfService ?? \"standard\";\n const sle = cfg.classesOfService[cos]?.sle;\n const active = Object.values(state.items).filter(\n (i) => i.stage === st.id && ACTIVE.has(i.status),\n ).length;\n return [\n `Column \"${st.name}\" exit policies: ${describePolicies(st.exitPolicy)}`,\n `Class of service: ${cos}${item.deadline ? `; deadline ${item.deadline}` : \"\"}${sle ? `; service level p${sle.percentile} <= ${sle.targetMs} ms` : \"\"}`,\n `WIP limit of \"${st.name}\": ${st.wipLimit ?? \"none\"} (active now: ${active}); finish this card before pulling another`,\n `Do not change the scope of \"${item.id}\" or its acceptance criteria; raise open_questions instead`,\n ];\n },\n ceremonies: kanbanCeremonies(kanban),\n rules: kanbanRules(),\n metrics: (state) => ({ ...kanbanMetrics(state) }),\n humanDefaults: { gates: \"none\" },\n lockedConfigKeys: [\"columns\", \"classesOfService\"],\n report: (state) => ({ cadencesDue: cadencesDue(state) }),\n };\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunkMH66G5KV_cjs=require('./chunk-MH66G5KV.cjs'),chunkUUOMQMWT_cjs=require('./chunk-UUOMQMWT.cjs'),chunk2OVYXXNV_cjs=require('./chunk-2OVYXXNV.cjs'),chunkUBFIKDIP_cjs=require('./chunk-UBFIKDIP.cjs'),chunkZTE7LREB_cjs=require('./chunk-ZTE7LREB.cjs'),chunkYRATJT7P_cjs=require('./chunk-YRATJT7P.cjs'),chunkWOGK54HB_cjs=require('./chunk-WOGK54HB.cjs'),chunkS3BXVHO7_cjs=require('./chunk-S3BXVHO7.cjs'),promises=require('fs/promises'),w=require('path');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var w__default=/*#__PURE__*/_interopDefault(w);var $={scrum:chunkUUOMQMWT_cjs.l,kanban:chunk2OVYXXNV_cjs.I,waterfall:chunkUBFIKDIP_cjs.N},p=["exwf init <scrum|kanban|waterfall> --config <file> [--roles <file>]","exwf add <item.json> [--by who] exwf edit <id> <patch.json> [--by who]","exwf next [--max n] [--fallback-tokens-per-weight n]","exwf complete <id> <handoff.json> --tokens-in n --tokens-out n --duration-ms n --model m [--estimate] [--role r]","exwf account <item> [--line n] [--tokens-in n] [--tokens-out n] [--duration-ms n] [--model m] [--by who]","exwf ceremony <name> [input.json] [--by who]","exwf decide <pendingId> approve|reject [--by who] [--note text]","exwf config set <patch.json> [--by who] exwf unblock <item> [--blocker id] [--note text] [--by who]","exwf status | board | metrics | pending | lessons","exwf validate <action.json> exwf role add <manifest.json> | role list"],at=new Set(["estimate"]);function et(l){let t=[],u={};for(let a=0;a<l.length;a++){let v=l[a];if(v.startsWith("--")){let n=v.slice(2);if(at.has(n)){u[n]="true";continue}let m=l[a+1];(m===void 0||m.startsWith("--"))&&chunkS3BXVHO7_cjs.b("invalid-input",`--${n} needs a value`,`pass --${n} <text>`),u[n]=m,a++;}else t.push(v);}return {positional:t,flags:u}}async function x(l){try{return JSON.parse(await promises.readFile(l,"utf8"))}catch(t){return chunkS3BXVHO7_cjs.b("invalid-input",`cannot read JSON from ${l}: ${t.message}`,"check the path and that the file is valid JSON")}}function h(l){let t=Object.hasOwn($,l.methodology)?$[l.methodology]:void 0;return t||chunkS3BXVHO7_cjs.b("config-invalid",`methodology "${l.methodology}" is not available in this build`,`available: ${Object.keys($).join(", ")}`),t()}function y(l,t){let u=Number(l[t]);return Number.isFinite(u)||chunkS3BXVHO7_cjs.b("invalid-input",`--${t} must be a number (got ${JSON.stringify(l[t])})`,`pass --${t} <n>`),u}var it=new Set(["init","add","edit","next","complete","account","ceremony","decide","unblock"]);async function St(l,t){try{let[u,a]=et(l).positional;return u!==void 0&&(it.has(u)||u==="role"&&a==="add"||u==="config"&&a==="set")?await chunkYRATJT7P_cjs.c(t,()=>tt(l,t)):await tt(l,t)}catch(u){if(u instanceof chunkS3BXVHO7_cjs.a)return {exit:1,out:{ok:false,error:u.toJSON()}};throw u}}async function tt(l,t){let{positional:u,flags:a}=et(l),[v,...n]=u,m=a.by??"human",d=new Date().toISOString();switch(v){case "init":{let[e]=n,o=e&&Object.hasOwn($,e)?$[e]:void 0;if(!o||!a.config)return {exit:2,out:{ok:false,usage:p}};try{await promises.stat(chunkYRATJT7P_cjs.b(t)),chunkS3BXVHO7_cjs.b("invalid-input",`${chunkYRATJT7P_cjs.b(t)} already exists`,"delete .workflow/state.json to start over");}catch(c){if(c instanceof chunkS3BXVHO7_cjs.a||c.code!=="ENOENT")throw c}let s=await x(w__default.default.resolve(t,a.config)),i=a.roles?await x(w__default.default.resolve(t,a.roles)):void 0;if(i!==void 0){Array.isArray(i)||chunkS3BXVHO7_cjs.b("invalid-input",`roles file ${a.roles} must contain an array of role manifests`,"wrap the manifests in [ ... ]");for(let c of i)chunkWOGK54HB_cjs.b(chunkWOGK54HB_cjs.e,c,`roles file ${a.roles}`);}let r=chunkZTE7LREB_cjs.X(i?{methodology:o(),config:s,roles:i,by:m,now:d}:{methodology:o(),config:s,by:m,now:d});return await chunkYRATJT7P_cjs.d(t,r.state),{exit:0,out:{ok:true,warnings:r.warnings,state:{methodology:r.state.methodology,stages:r.state.stages.map(c=>c.id),roles:Object.keys(r.state.roles)}}}}case "add":{if(!n[0])return {exit:2,out:{ok:false,usage:p}};let e=await chunkYRATJT7P_cjs.e(t),o=await x(w__default.default.resolve(t,n[0]));chunkWOGK54HB_cjs.b(chunkWOGK54HB_cjs.f,o,`item file ${n[0]}`);let s=chunkZTE7LREB_cjs.W(e,h(e),{type:"item.add",by:m,payload:{item:o}},i=>chunkZTE7LREB_cjs.v(i,o,m,d));return await chunkYRATJT7P_cjs.d(t,s.state),{exit:0,out:{ok:true,warnings:s.warnings,item:chunkZTE7LREB_cjs.u(s.state,o.id)}}}case "edit":{if(!n[0]||!n[1])return {exit:2,out:{ok:false,usage:p}};let e=await chunkYRATJT7P_cjs.e(t),o=n[0],s=await x(w__default.default.resolve(t,n[1]));chunkWOGK54HB_cjs.b(chunkWOGK54HB_cjs.g,s,`patch file ${n[1]}`);let i=chunkZTE7LREB_cjs.W(e,h(e),{type:"item.edit",by:m,payload:{id:o,patch:s}},r=>chunkZTE7LREB_cjs.w(r,o,s,m,d));return await chunkYRATJT7P_cjs.d(t,i.state),{exit:0,out:{ok:true,warnings:i.warnings,item:chunkZTE7LREB_cjs.u(i.state,o)}}}case "next":{let e=await chunkYRATJT7P_cjs.e(t),o={now:d};a.max&&(o.max=y(a,"max")),a["fallback-tokens-per-weight"]&&(o.fallbackTokensPerWeight=y(a,"fallback-tokens-per-weight"));let s=chunkMH66G5KV_cjs.c(e,h(e),o);for(let i of s.briefs)await chunkYRATJT7P_cjs.f(t,i);return await chunkYRATJT7P_cjs.d(t,s.state),{exit:0,out:{ok:true,reason:s.reason??null,skipped:s.skipped,briefs:s.briefs}}}case "complete":{if(!n[0]||!n[1])return {exit:2,out:{ok:false,usage:p}};let e=await chunkYRATJT7P_cjs.e(t),o=await x(w__default.default.resolve(t,n[1]));chunkWOGK54HB_cjs.b(chunkWOGK54HB_cjs.h,o,`handoff file ${n[1]}`),o.item!==n[0]&&chunkS3BXVHO7_cjs.b("handoff-invalid",`handoff.item "${o.item}" differs from the command's item "${n[0]}"`,"make them match");let s=a.role??o.role,i=y(a,"duration-ms"),r={item:n[0],role:s,model:a.model??"",tokensIn:y(a,"tokens-in"),tokensOut:y(a,"tokens-out"),durationMs:i,startedAt:new Date(Date.parse(d)-i).toISOString(),endedAt:d};a.estimate==="true"&&(r.estimate=true);let c=chunkMH66G5KV_cjs.d(e,h(e),{...o,role:s},r,d);return await chunkYRATJT7P_cjs.g(t,o,c.state.events.length),await chunkYRATJT7P_cjs.d(t,c.state),{exit:0,out:{ok:true,warnings:c.warnings,item:chunkZTE7LREB_cjs.u(c.state,n[0])}}}case "account":{if(!n[0])return {exit:2,out:{ok:false,usage:p}};let e=await chunkYRATJT7P_cjs.e(t),o={};a["tokens-in"]!==void 0&&(o.tokensIn=y(a,"tokens-in")),a["tokens-out"]!==void 0&&(o.tokensOut=y(a,"tokens-out")),a["duration-ms"]!==void 0&&(o.durationMs=y(a,"duration-ms")),a.model!==void 0&&(o.model=a.model);let s=a.line!==void 0?y(a,"line"):void 0,i=chunkMH66G5KV_cjs.e(e,n[0],o,a.by??"human",d,s);await chunkYRATJT7P_cjs.d(t,i);let r=chunkZTE7LREB_cjs.d(i),c=r.payload.line;return {exit:0,out:{ok:true,line:i.accounting.filter(A=>A.item===n[0])[c-1],event:r}}}case "ceremony":{if(!n[0])return {exit:2,out:{ok:false,usage:p}};let e=await chunkYRATJT7P_cjs.e(t),o=h(e),s=Object.hasOwn(o.ceremonies,n[0])?o.ceremonies[n[0]]:void 0;s||chunkS3BXVHO7_cjs.b("unknown-ceremony",`"${n[0]}" is not a ${o.name} ceremony`,`available: ${Object.keys(o.ceremonies).join(", ")}`);let i=n[1]?await x(w__default.default.resolve(t,n[1])):{},r=s(e,{...i,by:m,now:d});return await chunkYRATJT7P_cjs.d(t,r.state),{exit:0,out:{ok:true,warnings:r.warnings,lastEvent:chunkZTE7LREB_cjs.d(r.state)}}}case "config":{if(n[0]!=="set"||!n[1])return {exit:2,out:{ok:false,usage:p}};let e=await chunkYRATJT7P_cjs.e(t),o=await x(w__default.default.resolve(t,n[1])),s=chunkZTE7LREB_cjs.Y(e,h(e),o,m,d);return await chunkYRATJT7P_cjs.d(t,s.state),{exit:0,out:{ok:true,warnings:s.warnings,changed:chunkZTE7LREB_cjs.d(s.state).payload.changed,config:s.state.config}}}case "unblock":{if(!n[0])return {exit:2,out:{ok:false,usage:p}};let e=n[0],o=await chunkYRATJT7P_cjs.e(t),s=chunkZTE7LREB_cjs.u(o,e).blockers.filter(O=>!O.clearedAt).map(O=>O.id);s.length===0&&chunkS3BXVHO7_cjs.b("invalid-input",`item ${e} has no open blocker`,"nothing to clear; check exwf board");let i=a.blocker!==void 0?[a.blocker]:s,r=a.note,c=chunkZTE7LREB_cjs.W(o,h(o),{type:"blocker.clear",by:m,payload:{id:e,blockers:i,note:r??null}},O=>i.reduce((A,ot)=>chunkZTE7LREB_cjs.A(A,e,ot,m,d,r),O));return await chunkYRATJT7P_cjs.d(t,c.state),{exit:0,out:{ok:true,warnings:c.warnings,item:chunkZTE7LREB_cjs.u(c.state,e)}}}case "decide":{if(!n[0]||n[1]!=="approve"&&n[1]!=="reject")return {exit:2,out:{ok:false,usage:p}};let e=await chunkYRATJT7P_cjs.e(t),o=e.pending.find(i=>i.id===n[0]),s=chunkZTE7LREB_cjs.J(e,n[0],n[1],m,a.note??"",d,h(e));return await chunkYRATJT7P_cjs.d(t,s),{exit:0,out:{ok:true,item:o?.item?chunkZTE7LREB_cjs.u(s,o.item):null}}}case "status":{let e=await chunkYRATJT7P_cjs.e(t),o=h(e),s={todo:0,in_progress:0,blocked:0,review:0,awaiting_human:0,done:0,dropped:0};for(let i of Object.values(e.items))s[i.status]+=1;return {exit:0,out:{ok:true,methodology:e.methodology,openIteration:chunkZTE7LREB_cjs.P(e)??null,counts:s,pending:e.pending,openQuestions:chunkMH66G5KV_cjs.b(e),lastEvent:chunkZTE7LREB_cjs.d(e),report:o.report?o.report(e):null}}}case "board":{let e=await chunkYRATJT7P_cjs.e(t);return {exit:0,out:{ok:true,columns:e.stages.map(s=>({stage:s.id,wipLimit:s.wipLimit??null,items:Object.values(e.items).filter(i=>i.stage===s.id&&i.status!=="dropped").map(i=>({id:i.id,title:i.title,status:i.status,role:i.role??null,age:i.transitions.length?Date.parse(d)-Date.parse(i.transitions[i.transitions.length-1].at):null}))}))}}}case "metrics":{let e=await chunkYRATJT7P_cjs.e(t);return {exit:0,out:{ok:true,metrics:h(e).metrics(e)}}}case "pending":return {exit:0,out:{ok:true,pending:(await chunkYRATJT7P_cjs.e(t)).pending}};case "lessons":return {exit:0,out:{ok:true,lessons:(await chunkYRATJT7P_cjs.e(t)).lessons}};case "validate":{if(!n[0])return {exit:2,out:{ok:false,usage:p}};let e=await chunkYRATJT7P_cjs.e(t),o=await x(w__default.default.resolve(t,n[0]));return {exit:0,out:{ok:true,violations:chunkZTE7LREB_cjs.V(e,h(e),o)}}}case "role":{let e=await chunkYRATJT7P_cjs.e(t);if(n[0]==="list")return {exit:0,out:{ok:true,roles:Object.keys(e.roles),detail:e.roles}};if(n[0]==="add"&&n[1]){let o=await x(w__default.default.resolve(t,n[1]));chunkWOGK54HB_cjs.b(chunkWOGK54HB_cjs.e,o,`role manifest ${n[1]}`);let s=chunkZTE7LREB_cjs.f(e,o,m,d);return await chunkYRATJT7P_cjs.d(t,s),{exit:0,out:{ok:true,roles:Object.keys(s.roles)}}}return {exit:2,out:{ok:false,usage:p}}}default:return {exit:2,out:{ok:false,usage:p}}}}exports.a=p;exports.b=et;exports.c=St;//# sourceMappingURL=chunk-3CLDZCHN.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-3CLDZCHN.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/commands.ts"],"names":["METHODOLOGIES","scrum","kanban","waterfall","USAGE","BOOLEAN_FLAGS","parseArgs","argv","positional","flags","i","a","key","val","fail","readJson","file","readFile","e","methodologyOf","state","f","num","v","WRITERS","runCommand","cwd","cmd","sub","withStateLock","execute","WorkflowError","rest","by","now","name","stat","statePath","config","path","roles","r","assertValid","roleSchema","res","init","saveState","s","loadState","item","newItemSchema","applyAction","addItem","getItem","id","patch","itemPatchSchema","editItem","opts","next","b","saveBrief","handoff","handoffSchema","role","durationMs","acc","complete","saveHandoff","line","s2","correctAccounting","ev","lastEvent","idx","m","c","input","changeConfig","open","blockers","note","clearBlocker","entry","p","decide","counts","openIteration","openQuestions","st","action","validateAction","manifest","registerRole"],"mappings":"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","file":"chunk-3CLDZCHN.cjs","sourcesContent":["import { readFile, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport {\n loadState,\n saveBrief,\n saveHandoff,\n saveState,\n statePath,\n withStateLock,\n} from \"../adapters/file.ts\";\nimport { next as planNext, openQuestions } from \"../brief.ts\";\nimport { complete } from \"../complete.ts\";\nimport { correctAccounting, type AccountingPatch } from \"../accounting.ts\";\nimport { WorkflowError, fail } from \"../errors.ts\";\nimport { decide } from \"../gates.ts\";\nimport { addItem, clearBlocker, editItem, getItem, type ItemPatch } from \"../items.ts\";\nimport { applyAction, changeConfig, init, validateAction } from \"../methodology.ts\";\nimport { openIteration, type PlanOptions } from \"../planner.ts\";\nimport { registerRole } from \"../roles.ts\";\nimport {\n assertValid,\n handoffSchema,\n itemPatchSchema,\n newItemSchema,\n roleSchema,\n} from \"../schema/index.ts\";\nimport { lastEvent } from \"../state.ts\";\nimport { scrum } from \"../scrum/index.ts\";\nimport { kanban } from \"../kanban/index.ts\";\nimport { waterfall } from \"../waterfall/index.ts\";\nimport type {\n Accounting,\n Action,\n Handoff,\n ItemStatus,\n Methodology,\n NewItem,\n Role,\n WorkflowState,\n} from \"../types.ts\";\n\nconst METHODOLOGIES: Record<string, () => Methodology> = {\n scrum: scrum as () => Methodology,\n kanban: kanban as () => Methodology,\n waterfall: waterfall as () => Methodology,\n};\n\nexport const USAGE = [\n \"exwf init <scrum|kanban|waterfall> --config <file> [--roles <file>]\",\n \"exwf add <item.json> [--by who] exwf edit <id> <patch.json> [--by who]\",\n \"exwf next [--max n] [--fallback-tokens-per-weight n]\",\n \"exwf complete <id> <handoff.json> --tokens-in n --tokens-out n --duration-ms n --model m [--estimate] [--role r]\",\n \"exwf account <item> [--line n] [--tokens-in n] [--tokens-out n] [--duration-ms n] [--model m] [--by who]\",\n \"exwf ceremony <name> [input.json] [--by who]\",\n \"exwf decide <pendingId> approve|reject [--by who] [--note text]\",\n \"exwf config set <patch.json> [--by who] exwf unblock <item> [--blocker id] [--note text] [--by who]\",\n \"exwf status | board | metrics | pending | lessons\",\n \"exwf validate <action.json> exwf role add <manifest.json> | role list\",\n];\n\nexport interface Parsed {\n positional: string[];\n flags: Record<string, string>;\n}\n/** Flags that take no value; every other flag needs one. */\nconst BOOLEAN_FLAGS = new Set([\"estimate\"]);\n\nexport function parseArgs(argv: string[]): Parsed {\n const positional: string[] = [];\n const flags: Record<string, string> = {};\n for (let i = 0; i < argv.length; i++) {\n const a = argv[i]!;\n if (a.startsWith(\"--\")) {\n const key = a.slice(2);\n if (BOOLEAN_FLAGS.has(key)) {\n flags[key] = \"true\";\n continue;\n }\n const val = argv[i + 1];\n if (val === undefined || val.startsWith(\"--\"))\n fail(\"invalid-input\", `--${key} needs a value`, `pass --${key} <text>`);\n flags[key] = val;\n i++;\n } else positional.push(a);\n }\n return { positional, flags };\n}\n\nasync function readJson<T>(file: string): Promise<T> {\n try {\n return JSON.parse(await readFile(file, \"utf8\")) as T;\n } catch (e) {\n return fail(\n \"invalid-input\",\n `cannot read JSON from ${file}: ${(e as Error).message}`,\n \"check the path and that the file is valid JSON\",\n );\n }\n}\n\nfunction methodologyOf(state: WorkflowState): Methodology {\n const f = Object.hasOwn(METHODOLOGIES, state.methodology)\n ? METHODOLOGIES[state.methodology]\n : undefined;\n if (!f)\n fail(\n \"config-invalid\",\n `methodology \"${state.methodology}\" is not available in this build`,\n `available: ${Object.keys(METHODOLOGIES).join(\", \")}`,\n );\n return f();\n}\n\nfunction num(flags: Record<string, string>, key: string): number {\n const v = Number(flags[key]);\n if (!Number.isFinite(v))\n fail(\n \"invalid-input\",\n `--${key} must be a number (got ${JSON.stringify(flags[key])})`,\n `pass --${key} <n>`,\n );\n return v;\n}\n\nexport interface CommandResult {\n exit: 0 | 1 | 2;\n out: unknown;\n}\n\n/** Commands that load, change and save the state: they run under .workflow/state.lock. */\nconst WRITERS = new Set([\n \"init\",\n \"add\",\n \"edit\",\n \"next\",\n \"complete\",\n \"account\",\n \"ceremony\",\n \"decide\",\n \"unblock\",\n]);\n\nexport async function runCommand(argv: string[], cwd: string): Promise<CommandResult> {\n try {\n const [cmd, sub] = parseArgs(argv).positional;\n const writes =\n cmd !== undefined &&\n (WRITERS.has(cmd) ||\n (cmd === \"role\" && sub === \"add\") ||\n (cmd === \"config\" && sub === \"set\"));\n return writes ? await withStateLock(cwd, () => execute(argv, cwd)) : await execute(argv, cwd);\n } catch (e) {\n if (e instanceof WorkflowError) return { exit: 1, out: { ok: false, error: e.toJSON() } };\n throw e;\n }\n}\n\nasync function execute(argv: string[], cwd: string): Promise<CommandResult> {\n const { positional, flags } = parseArgs(argv);\n const [cmd, ...rest] = positional;\n const by = flags[\"by\"] ?? \"human\";\n const now = new Date().toISOString();\n switch (cmd) {\n case \"init\": {\n const [name] = rest;\n const f = name && Object.hasOwn(METHODOLOGIES, name) ? METHODOLOGIES[name] : undefined;\n if (!f || !flags[\"config\"]) return { exit: 2, out: { ok: false, usage: USAGE } };\n try {\n await stat(statePath(cwd));\n fail(\n \"invalid-input\",\n `${statePath(cwd)} already exists`,\n \"delete .workflow/state.json to start over\",\n );\n } catch (e) {\n if (e instanceof WorkflowError) throw e;\n if ((e as NodeJS.ErrnoException).code !== \"ENOENT\") throw e;\n }\n const config = await readJson<unknown>(path.resolve(cwd, flags[\"config\"]));\n const roles = flags[\"roles\"]\n ? await readJson<Role[]>(path.resolve(cwd, flags[\"roles\"]))\n : undefined;\n if (roles !== undefined) {\n if (!Array.isArray(roles))\n fail(\n \"invalid-input\",\n `roles file ${flags[\"roles\"]} must contain an array of role manifests`,\n \"wrap the manifests in [ ... ]\",\n );\n for (const r of roles) assertValid(roleSchema, r, `roles file ${flags[\"roles\"]}`);\n }\n const res = init(\n roles\n ? { methodology: f(), config, roles, by, now }\n : { methodology: f(), config, by, now },\n );\n await saveState(cwd, res.state);\n return {\n exit: 0,\n out: {\n ok: true,\n warnings: res.warnings,\n state: {\n methodology: res.state.methodology,\n stages: res.state.stages.map((s) => s.id),\n roles: Object.keys(res.state.roles),\n },\n },\n };\n }\n case \"add\": {\n if (!rest[0]) return { exit: 2, out: { ok: false, usage: USAGE } };\n const state = await loadState(cwd);\n const item = await readJson<NewItem>(path.resolve(cwd, rest[0]));\n assertValid(newItemSchema, item, `item file ${rest[0]}`);\n const res = applyAction(\n state,\n methodologyOf(state),\n { type: \"item.add\", by, payload: { item } },\n (s) => addItem(s, item, by, now),\n );\n await saveState(cwd, res.state);\n return {\n exit: 0,\n out: {\n ok: true,\n warnings: res.warnings,\n item: getItem(res.state, item.id),\n },\n };\n }\n case \"edit\": {\n if (!rest[0] || !rest[1]) return { exit: 2, out: { ok: false, usage: USAGE } };\n const state = await loadState(cwd);\n const id = rest[0];\n const patch = await readJson<ItemPatch>(path.resolve(cwd, rest[1]));\n assertValid(itemPatchSchema, patch, `patch file ${rest[1]}`);\n const res = applyAction(\n state,\n methodologyOf(state),\n { type: \"item.edit\", by, payload: { id, patch } },\n (s) => editItem(s, id, patch, by, now),\n );\n await saveState(cwd, res.state);\n return {\n exit: 0,\n out: { ok: true, warnings: res.warnings, item: getItem(res.state, id) },\n };\n }\n case \"next\": {\n const state = await loadState(cwd);\n const opts: PlanOptions = { now };\n if (flags[\"max\"]) opts.max = num(flags, \"max\");\n if (flags[\"fallback-tokens-per-weight\"])\n opts.fallbackTokensPerWeight = num(flags, \"fallback-tokens-per-weight\");\n const res = planNext(state, methodologyOf(state), opts);\n // briefs first: a crash then leaves an orphan brief (overwritten next dispatch), never a dispatched item without one\n for (const b of res.briefs) await saveBrief(cwd, b);\n await saveState(cwd, res.state);\n return {\n exit: 0,\n out: {\n ok: true,\n reason: res.reason ?? null,\n skipped: res.skipped,\n briefs: res.briefs,\n },\n };\n }\n case \"complete\": {\n if (!rest[0] || !rest[1]) return { exit: 2, out: { ok: false, usage: USAGE } };\n const state = await loadState(cwd);\n const handoff = await readJson<Handoff>(path.resolve(cwd, rest[1]));\n assertValid(handoffSchema, handoff, `handoff file ${rest[1]}`);\n if (handoff.item !== rest[0])\n fail(\n \"handoff-invalid\",\n `handoff.item \"${handoff.item}\" differs from the command's item \"${rest[0]}\"`,\n \"make them match\",\n );\n const role = flags[\"role\"] ?? handoff.role;\n const durationMs = num(flags, \"duration-ms\");\n const acc: Accounting = {\n item: rest[0],\n role,\n model: flags[\"model\"] ?? \"\",\n tokensIn: num(flags, \"tokens-in\"),\n tokensOut: num(flags, \"tokens-out\"),\n durationMs,\n startedAt: new Date(Date.parse(now) - durationMs).toISOString(),\n endedAt: now,\n };\n if (flags[\"estimate\"] === \"true\") acc.estimate = true;\n const res = complete(state, methodologyOf(state), { ...handoff, role }, acc, now);\n // handoff first: a retry of the same command reproduces the same seq and overwrites an orphan\n await saveHandoff(cwd, handoff, res.state.events.length);\n await saveState(cwd, res.state);\n return {\n exit: 0,\n out: {\n ok: true,\n warnings: res.warnings,\n item: getItem(res.state, rest[0]),\n },\n };\n }\n case \"account\": {\n if (!rest[0]) return { exit: 2, out: { ok: false, usage: USAGE } };\n const state = await loadState(cwd);\n const patch: AccountingPatch = {};\n if (flags[\"tokens-in\"] !== undefined) patch.tokensIn = num(flags, \"tokens-in\");\n if (flags[\"tokens-out\"] !== undefined) patch.tokensOut = num(flags, \"tokens-out\");\n if (flags[\"duration-ms\"] !== undefined) patch.durationMs = num(flags, \"duration-ms\");\n if (flags[\"model\"] !== undefined) patch.model = flags[\"model\"];\n const line = flags[\"line\"] !== undefined ? num(flags, \"line\") : undefined;\n const s2 = correctAccounting(state, rest[0], patch, flags[\"by\"] ?? \"human\", now, line);\n await saveState(cwd, s2);\n const ev = lastEvent(s2)!;\n const idx = (ev.payload as { line: number }).line;\n const mine = s2.accounting.filter((a) => a.item === rest[0]);\n return { exit: 0, out: { ok: true, line: mine[idx - 1], event: ev } };\n }\n case \"ceremony\": {\n if (!rest[0]) return { exit: 2, out: { ok: false, usage: USAGE } };\n const state = await loadState(cwd);\n const m = methodologyOf(state);\n const c = Object.hasOwn(m.ceremonies, rest[0]) ? m.ceremonies[rest[0]] : undefined;\n if (!c)\n fail(\n \"unknown-ceremony\",\n `\"${rest[0]}\" is not a ${m.name} ceremony`,\n `available: ${Object.keys(m.ceremonies).join(\", \")}`,\n );\n const input = rest[1]\n ? await readJson<Record<string, unknown>>(path.resolve(cwd, rest[1]))\n : {};\n const res = c(state, { ...input, by, now });\n await saveState(cwd, res.state);\n return {\n exit: 0,\n out: {\n ok: true,\n warnings: res.warnings,\n lastEvent: lastEvent(res.state),\n },\n };\n }\n case \"config\": {\n if (rest[0] !== \"set\" || !rest[1]) return { exit: 2, out: { ok: false, usage: USAGE } };\n const state = await loadState(cwd);\n const patch = await readJson<Record<string, unknown>>(path.resolve(cwd, rest[1]));\n const res = changeConfig(state, methodologyOf(state), patch, by, now);\n await saveState(cwd, res.state);\n return {\n exit: 0,\n out: {\n ok: true,\n warnings: res.warnings,\n changed: (lastEvent(res.state)!.payload as { changed: string[] }).changed,\n config: res.state.config,\n },\n };\n }\n case \"unblock\": {\n if (!rest[0]) return { exit: 2, out: { ok: false, usage: USAGE } };\n const id = rest[0];\n const state = await loadState(cwd);\n const open = getItem(state, id)\n .blockers.filter((b) => !b.clearedAt)\n .map((b) => b.id);\n if (open.length === 0)\n fail(\n \"invalid-input\",\n `item ${id} has no open blocker`,\n \"nothing to clear; check exwf board\",\n );\n const blockers = flags[\"blocker\"] !== undefined ? [flags[\"blocker\"]] : open;\n const note = flags[\"note\"];\n const res = applyAction(\n state,\n methodologyOf(state),\n { type: \"blocker.clear\", by, payload: { id, blockers, note: note ?? null } },\n (s) => blockers.reduce((acc, b) => clearBlocker(acc, id, b, by, now, note), s),\n );\n await saveState(cwd, res.state);\n return { exit: 0, out: { ok: true, warnings: res.warnings, item: getItem(res.state, id) } };\n }\n case \"decide\": {\n if (!rest[0] || (rest[1] !== \"approve\" && rest[1] !== \"reject\"))\n return { exit: 2, out: { ok: false, usage: USAGE } };\n const state = await loadState(cwd);\n const entry = state.pending.find((p) => p.id === rest[0]);\n const s2 = decide(\n state,\n rest[0],\n rest[1],\n by,\n flags[\"note\"] ?? \"\",\n now,\n methodologyOf(state),\n );\n await saveState(cwd, s2);\n return {\n exit: 0,\n out: { ok: true, item: entry?.item ? getItem(s2, entry.item) : null },\n };\n }\n case \"status\": {\n const state = await loadState(cwd);\n const m = methodologyOf(state);\n const counts: Record<ItemStatus, number> = {\n todo: 0,\n in_progress: 0,\n blocked: 0,\n review: 0,\n awaiting_human: 0,\n done: 0,\n dropped: 0,\n };\n for (const i of Object.values(state.items)) counts[i.status] += 1;\n return {\n exit: 0,\n out: {\n ok: true,\n methodology: state.methodology,\n openIteration: openIteration(state) ?? null,\n counts,\n pending: state.pending,\n openQuestions: openQuestions(state),\n lastEvent: lastEvent(state),\n report: m.report ? m.report(state) : null,\n },\n };\n }\n case \"board\": {\n const state = await loadState(cwd);\n const columns = state.stages.map((st) => ({\n stage: st.id,\n wipLimit: st.wipLimit ?? null,\n items: Object.values(state.items)\n .filter((i) => i.stage === st.id && i.status !== \"dropped\")\n .map((i) => ({\n id: i.id,\n title: i.title,\n status: i.status,\n role: i.role ?? null,\n age: i.transitions.length\n ? Date.parse(now) - Date.parse(i.transitions[i.transitions.length - 1]!.at)\n : null,\n })),\n }));\n return { exit: 0, out: { ok: true, columns } };\n }\n case \"metrics\": {\n const state = await loadState(cwd);\n return {\n exit: 0,\n out: { ok: true, metrics: methodologyOf(state).metrics(state) },\n };\n }\n case \"pending\":\n return {\n exit: 0,\n out: { ok: true, pending: (await loadState(cwd)).pending },\n };\n case \"lessons\":\n return {\n exit: 0,\n out: { ok: true, lessons: (await loadState(cwd)).lessons },\n };\n case \"validate\": {\n if (!rest[0]) return { exit: 2, out: { ok: false, usage: USAGE } };\n const state = await loadState(cwd);\n const action = await readJson<Action>(path.resolve(cwd, rest[0]));\n return {\n exit: 0,\n out: {\n ok: true,\n violations: validateAction(state, methodologyOf(state), action),\n },\n };\n }\n case \"role\": {\n const state = await loadState(cwd);\n if (rest[0] === \"list\")\n return {\n exit: 0,\n out: {\n ok: true,\n roles: Object.keys(state.roles),\n detail: state.roles,\n },\n };\n if (rest[0] === \"add\" && rest[1]) {\n const manifest = await readJson<Role>(path.resolve(cwd, rest[1]));\n assertValid(roleSchema, manifest, `role manifest ${rest[1]}`);\n const s2 = registerRole(state, manifest, by, now);\n await saveState(cwd, s2);\n return { exit: 0, out: { ok: true, roles: Object.keys(s2.roles) } };\n }\n return { exit: 2, out: { ok: false, usage: USAGE } };\n }\n default:\n return { exit: 2, out: { ok: false, usage: USAGE } };\n }\n}\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import {b}from'./chunk-2FRRD6A3.mjs';var f={Accounting:{type:"object",properties:{item:{type:"string"},role:{type:"string"},model:{type:"string"},tokensIn:{type:"number"},tokensOut:{type:"number"},durationMs:{type:"number"},startedAt:{type:"string"},endedAt:{type:"string"},estimate:{type:"boolean"}},required:["item","role","model","tokensIn","tokensOut","durationMs","startedAt","endedAt"],additionalProperties:false},Baseline:{type:"object",properties:{phase:{type:"string"},version:{type:"number"},at:{type:"string"},approvedBy:{type:"array",items:{type:"string"}},itemSnapshot:{type:"object",additionalProperties:{$ref:"#/definitions/WorkItem"}}},required:["phase","version","at","approvedBy","itemSnapshot"],additionalProperties:false},Blocker:{type:"object",properties:{id:{type:"string"},reason:{type:"string"},owner:{type:"string"},raisedAt:{type:"string"},clearedAt:{type:"string"}},required:["id","reason","owner","raisedAt"],additionalProperties:false},Budget:{type:"object",properties:{tokens:{type:"number"},turns:{type:"number"},wallclockMs:{type:"number"}},additionalProperties:false},Capability:{type:"string",enum:["order-backlog","define-acceptance","facilitate","deliver","review","verify","approve-gate","manage-flow","control-change","escalate"]},ClassOfService:{type:"string",enum:["expedite","fixed-date","standard","intangible"]},Event:{type:"object",properties:{seq:{type:"number"},at:{type:"string"},type:{type:"string"},by:{type:"string"},payload:{}},required:["seq","at","type","by","payload"],additionalProperties:false},Evidence:{type:"object",properties:{kind:{type:"string"},ref:{type:"string"},by:{type:"string"},at:{type:"string"}},required:["kind","ref","by","at"],additionalProperties:false},Gate:{type:"object",properties:{id:{type:"string"},requires:{type:"array",items:{$ref:"#/definitions/GateRequirement"}},evidence:{type:"array",items:{type:"string"}},onFail:{anyOf:[{type:"object",properties:{action:{type:"string",const:"block"}},required:["action"],additionalProperties:false},{type:"object",properties:{action:{type:"string",const:"return-to"},stage:{type:"string"}},required:["action","stage"],additionalProperties:false}]}},required:["id","requires","evidence","onFail"],additionalProperties:false},GateRequirement:{anyOf:[{type:"string",const:"human"},{type:"object",properties:{capability:{type:"string"}},required:["capability"],additionalProperties:false}]},Handoff:{type:"object",properties:{item:{type:"string"},role:{type:"string"},produced:{type:"array",items:{type:"object",properties:{kind:{type:"string"},ref:{type:"string"}},required:["kind","ref"],additionalProperties:false}},notes:{type:"string"},do_not:{type:"array",items:{type:"string"}},open_questions:{type:"array",items:{type:"string"}},verdict:{$ref:"#/definitions/Verdict"},follow_ups:{type:"array",items:{$ref:"#/definitions/NewItem"}},lessons:{type:"array",items:{type:"object",properties:{text:{type:"string"},scope:{type:"string",enum:["policy","skill","memory","spec","review"]}},required:["text","scope"],additionalProperties:false}}},required:["item","role","produced","notes","do_not","open_questions"],additionalProperties:false},ImpactAnalysis:{type:"object",properties:{summary:{type:"string"},reopen:{type:"array",items:{type:"string"}},weight:{type:"number"}},required:["summary","reopen","weight"],additionalProperties:false},ItemPatch:{type:"object",properties:{type:{$ref:"#/definitions/ItemType"},title:{type:"string"},description:{type:"string"},dependsOn:{type:"array",items:{type:"string"}},priority:{type:"number"},weight:{type:"number"},deadline:{type:"string"},classOfService:{$ref:"#/definitions/ClassOfService"},role:{type:"string"},parent:{type:"string"},acceptance:{type:"array",items:{type:"string"}},iteration:{type:"string"},traces:{type:"array",items:{type:"string"}},tags:{type:"array",items:{type:"string"}},affects:{type:"array",items:{type:"string"}},phase:{type:"string"},impactAnalysis:{$ref:"#/definitions/ImpactAnalysis"}},additionalProperties:false},ItemStatus:{type:"string",enum:["todo","in_progress","blocked","review","awaiting_human","done","dropped"]},ItemType:{type:"string",enum:["epic","story","task","bug","change-request","deliverable","question"]},Iteration:{type:"object",properties:{id:{type:"string"},goal:{type:"string"},budget:{$ref:"#/definitions/Budget"},spent:{$ref:"#/definitions/Spent"},startedAt:{type:"string"},endedAt:{type:"string"},committed:{type:"array",items:{type:"string"}},carryover:{type:"array",items:{type:"string"}},outcome:{type:"string",enum:["completed","cancelled"]},closing:{type:"boolean"}},required:["id","goal","budget","spent","startedAt","committed","carryover"],additionalProperties:false},Lesson:{type:"object",properties:{id:{type:"string"},at:{type:"string"},text:{type:"string"},scope:{type:"string",enum:["policy","skill","memory","spec","review"]},status:{type:"string",enum:["raised","adopted","dismissed"]},from:{type:"string"},item:{type:"string"},suggestedChange:{$ref:"#/definitions/LessonChange"}},required:["id","at","text","scope","status"],additionalProperties:false},LessonChange:{anyOf:[{type:"object",properties:{kind:{type:"string",const:"agreement"},text:{type:"string"},replaces:{type:"string"}},required:["kind","text"],additionalProperties:false},{type:"object",properties:{kind:{type:"string",const:"dod"},policy:{$ref:"#/definitions/Policy"}},required:["kind","policy"],additionalProperties:false},{type:"object",properties:{kind:{type:"string",const:"backlog"},item:{$ref:"#/definitions/NewItem"}},required:["kind","item"],additionalProperties:false},{type:"object",properties:{kind:{type:"string",const:"skill"},note:{type:"string"}},required:["kind","note"],additionalProperties:false}]},MethodologyName:{type:"string",enum:["scrum","kanban","waterfall"]},ModelTier:{type:"string",enum:["small","medium","large"]},NewItem:{type:"object",additionalProperties:false,properties:{stage:{type:"string"},type:{$ref:"#/definitions/ItemType"},description:{type:"string"},dependsOn:{type:"array",items:{type:"string"}},priority:{type:"number"},weight:{type:"number"},deadline:{type:"string"},classOfService:{$ref:"#/definitions/ClassOfService"},role:{type:"string"},parent:{type:"string"},acceptance:{type:"array",items:{type:"string"}},iteration:{type:"string"},traces:{type:"array",items:{type:"string"}},tags:{type:"array",items:{type:"string"}},affects:{type:"array",items:{type:"string"}},phase:{type:"string"},impactAnalysis:{$ref:"#/definitions/ImpactAnalysis"},id:{type:"string"},title:{type:"string"}},required:["id","title"]},PendingHuman:{type:"object",properties:{id:{type:"string"},kind:{type:"string",enum:["gate","decision"]},item:{type:"string"},gate:{type:"string"},question:{type:"string"},raisedAt:{type:"string"}},required:["id","kind","question","raisedAt"],additionalProperties:false},Phase:{type:"object",properties:{id:{type:"string"},name:{type:"string"},deliverables:{type:"array",items:{type:"string"}},gate:{$ref:"#/definitions/Gate"},status:{type:"string",enum:["pending","open","baselined","reopened"]},budget:{$ref:"#/definitions/Budget"},produced:{type:"array",items:{$ref:"#/definitions/Produced"}}},required:["id","name","deliverables","gate","status"],additionalProperties:false},Policy:{anyOf:[{type:"object",properties:{kind:{type:"string",const:"evidence"},evidenceKind:{type:"string"}},required:["kind","evidenceKind"],additionalProperties:false},{type:"object",properties:{kind:{type:"string",const:"acceptance-written"}},required:["kind"],additionalProperties:false},{type:"object",properties:{kind:{type:"string",const:"estimate-present"}},required:["kind"],additionalProperties:false},{type:"object",properties:{kind:{type:"string",const:"no-open-blockers"}},required:["kind"],additionalProperties:false},{type:"object",properties:{kind:{type:"string",const:"dependencies-done"}},required:["kind"],additionalProperties:false},{type:"object",properties:{kind:{type:"string",const:"custom"},id:{type:"string"},description:{type:"string"}},required:["kind","id","description"],additionalProperties:false}]},Produced:{type:"object",properties:{kind:{type:"string"},ref:{type:"string"},by:{type:"string"},at:{type:"string"}},required:["kind","ref","by","at"],additionalProperties:false},Role:{type:"object",properties:{id:{type:"string"},name:{type:"string"},modelTier:{$ref:"#/definitions/ModelTier"},resourceClass:{type:"string"},maxConcurrent:{type:"number"},capabilities:{type:"array",items:{$ref:"#/definitions/Capability"}},canApprove:{type:"array",items:{type:"string"}},inputs:{type:"array",items:{type:"string"}},outputs:{type:"array",items:{type:"string"}},do_not:{type:"array",items:{type:"string"}},constraints:{type:"array",items:{type:"string"}}},required:["id","name","modelTier","capabilities","canApprove","inputs","outputs","do_not"],additionalProperties:false},Spent:{type:"object",properties:{tokens:{type:"number"},turns:{type:"number"},wallclockMs:{type:"number"}},required:["tokens","turns","wallclockMs"],additionalProperties:false},Stage:{type:"object",properties:{id:{type:"string"},name:{type:"string"},wipLimit:{type:"number"},entryPolicy:{type:"array",items:{$ref:"#/definitions/Policy"}},exitPolicy:{type:"array",items:{$ref:"#/definitions/Policy"}},gate:{$ref:"#/definitions/Gate"},commitmentPoint:{type:"boolean"},deliveryPoint:{type:"boolean"},review:{type:"boolean"}},required:["id","name","entryPolicy","exitPolicy"],additionalProperties:false},Transition:{type:"object",properties:{from:{type:"object",properties:{stage:{type:"string"},status:{$ref:"#/definitions/ItemStatus"}},required:["stage","status"],additionalProperties:false},to:{type:"object",properties:{stage:{type:"string"},status:{$ref:"#/definitions/ItemStatus"}},required:["stage","status"],additionalProperties:false},at:{type:"string"},by:{type:"string"}},required:["from","to","at","by"],additionalProperties:false},Verdict:{type:"string",enum:["done","blocked","needs-review","rework","escalate"]},WorkItem:{type:"object",properties:{id:{type:"string"},type:{$ref:"#/definitions/ItemType"},title:{type:"string"},description:{type:"string"},dependsOn:{type:"array",items:{type:"string"}},priority:{type:"number"},weight:{type:"number"},deadline:{type:"string"},classOfService:{$ref:"#/definitions/ClassOfService"},stage:{type:"string"},status:{$ref:"#/definitions/ItemStatus"},role:{type:"string"},parent:{type:"string"},acceptance:{type:"array",items:{type:"string"}},evidence:{type:"array",items:{$ref:"#/definitions/Evidence"}},blockers:{type:"array",items:{$ref:"#/definitions/Blocker"}},transitions:{type:"array",items:{$ref:"#/definitions/Transition"}},iteration:{type:"string"},traces:{type:"array",items:{type:"string"}},tags:{type:"array",items:{type:"string"}},affects:{type:"array",items:{type:"string"}},phase:{type:"string"},impactAnalysis:{$ref:"#/definitions/ImpactAnalysis"}},required:["id","type","title","dependsOn","stage","status","acceptance","evidence","blockers","transitions"],additionalProperties:false},WorkflowState:{type:"object",properties:{version:{type:"number",const:1},methodology:{$ref:"#/definitions/MethodologyName"},config:{},items:{type:"object",additionalProperties:{$ref:"#/definitions/WorkItem"}},stages:{type:"array",items:{$ref:"#/definitions/Stage"}},roles:{type:"object",additionalProperties:{$ref:"#/definitions/Role"}},iterations:{type:"array",items:{$ref:"#/definitions/Iteration"}},phases:{type:"array",items:{$ref:"#/definitions/Phase"}},baseline:{$ref:"#/definitions/Baseline"},baselines:{type:"array",items:{$ref:"#/definitions/Baseline"}},events:{type:"array",items:{$ref:"#/definitions/Event"}},accounting:{type:"array",items:{$ref:"#/definitions/Accounting"}},pending:{type:"array",items:{$ref:"#/definitions/PendingHuman"}},lessons:{type:"array",items:{$ref:"#/definitions/Lesson"}},agreements:{type:"array",items:{type:"string"}}},required:["version","methodology","config","items","stages","roles","iterations","events","accounting","pending","lessons","agreements"],additionalProperties:false}},k={Budget:{type:"object",properties:{tokens:{type:"number"},turns:{type:"number"},wallclockMs:{type:"number"}},additionalProperties:false},EstimateMode:{type:"string",enum:["per-weight","per-call"]},Policy:{anyOf:[{type:"object",properties:{kind:{type:"string",const:"evidence"},evidenceKind:{type:"string"}},required:["kind","evidenceKind"],additionalProperties:false},{type:"object",properties:{kind:{type:"string",const:"acceptance-written"}},required:["kind"],additionalProperties:false},{type:"object",properties:{kind:{type:"string",const:"estimate-present"}},required:["kind"],additionalProperties:false},{type:"object",properties:{kind:{type:"string",const:"no-open-blockers"}},required:["kind"],additionalProperties:false},{type:"object",properties:{kind:{type:"string",const:"dependencies-done"}},required:["kind"],additionalProperties:false},{type:"object",properties:{kind:{type:"string",const:"custom"},id:{type:"string"},description:{type:"string"}},required:["kind","id","description"],additionalProperties:false}]},ScrumConfig:{type:"object",properties:{sprintBudget:{$ref:"#/definitions/Budget"},productGoal:{type:"string"},definitionOfDone:{type:"array",items:{$ref:"#/definitions/Policy"}},refinementSharePct:{type:"number"},allowMidSprintAdd:{type:"string",enum:["never","po-only","any"]},inProgressWipLimit:{type:"number"},autoClose:{type:"boolean"},estimateMode:{$ref:"#/definitions/EstimateMode"},fallbackTokensPerWeight:{type:"number"}},required:["sprintBudget","productGoal","definitionOfDone","refinementSharePct","allowMidSprintAdd"],additionalProperties:false}},P={ClassConfig:{type:"object",properties:{wipBypass:{type:"number"},sle:{$ref:"#/definitions/ServiceLevel"}},additionalProperties:false},KanbanColumn:{type:"object",properties:{id:{type:"string"},name:{type:"string"},wipLimit:{type:"number"},policies:{type:"array",items:{$ref:"#/definitions/Policy"}},commitmentPoint:{type:"boolean"},deliveryPoint:{type:"boolean"},review:{type:"boolean"}},required:["id","name","policies"],additionalProperties:false},KanbanConfig:{type:"object",properties:{columns:{type:"array",items:{$ref:"#/definitions/KanbanColumn"}},classesOfService:{type:"object",properties:{expedite:{$ref:"#/definitions/ClassConfig"},"fixed-date":{$ref:"#/definitions/ClassConfig"},standard:{$ref:"#/definitions/ClassConfig"},intangible:{$ref:"#/definitions/ClassConfig"}},additionalProperties:false},fairness:{type:"object",properties:{aging:{type:"boolean"},maxDeferralRounds:{type:"number"}},required:["aging","maxDeferralRounds"],additionalProperties:false},cadences:{type:"object",properties:{replenishment:{type:"object",properties:{everyTurns:{type:"number"}},additionalProperties:false},"delivery-planning":{type:"object",properties:{everyTurns:{type:"number"}},additionalProperties:false},"service-delivery-review":{type:"object",properties:{everyTurns:{type:"number"}},additionalProperties:false},"operations-review":{type:"object",properties:{everyTurns:{type:"number"}},additionalProperties:false},"risk-review":{type:"object",properties:{everyTurns:{type:"number"}},additionalProperties:false},"strategy-review":{type:"object",properties:{everyTurns:{type:"number"}},additionalProperties:false}},additionalProperties:false},throughputWindowMs:{type:"number"},maxExpedite:{type:"number"}},required:["columns","classesOfService","fairness","cadences","throughputWindowMs","maxExpedite"],additionalProperties:false},Policy:{anyOf:[{type:"object",properties:{kind:{type:"string",const:"evidence"},evidenceKind:{type:"string"}},required:["kind","evidenceKind"],additionalProperties:false},{type:"object",properties:{kind:{type:"string",const:"acceptance-written"}},required:["kind"],additionalProperties:false},{type:"object",properties:{kind:{type:"string",const:"estimate-present"}},required:["kind"],additionalProperties:false},{type:"object",properties:{kind:{type:"string",const:"no-open-blockers"}},required:["kind"],additionalProperties:false},{type:"object",properties:{kind:{type:"string",const:"dependencies-done"}},required:["kind"],additionalProperties:false},{type:"object",properties:{kind:{type:"string",const:"custom"},id:{type:"string"},description:{type:"string"}},required:["kind","id","description"],additionalProperties:false}]},ServiceLevel:{type:"object",properties:{percentile:{type:"number"},targetMs:{type:"number"}},required:["percentile","targetMs"],additionalProperties:false}},$={Budget:{type:"object",properties:{tokens:{type:"number"},turns:{type:"number"},wallclockMs:{type:"number"}},additionalProperties:false},Gate:{type:"object",properties:{id:{type:"string"},requires:{type:"array",items:{$ref:"#/definitions/GateRequirement"}},evidence:{type:"array",items:{type:"string"}},onFail:{anyOf:[{type:"object",properties:{action:{type:"string",const:"block"}},required:["action"],additionalProperties:false},{type:"object",properties:{action:{type:"string",const:"return-to"},stage:{type:"string"}},required:["action","stage"],additionalProperties:false}]}},required:["id","requires","evidence","onFail"],additionalProperties:false},GateRequirement:{anyOf:[{type:"string",const:"human"},{type:"object",properties:{capability:{type:"string"}},required:["capability"],additionalProperties:false}]},WaterfallConfig:{type:"object",properties:{phases:{type:"array",items:{$ref:"#/definitions/WaterfallPhaseConfig"}},changeControl:{type:"object",properties:{requiresImpactAnalysis:{type:"boolean"},approvers:{type:"array",items:{$ref:"#/definitions/GateRequirement"}}},required:["requiresImpactAnalysis","approvers"],additionalProperties:false},traceability:{type:"object",properties:{from:{type:"string"},to:{type:"array",items:{type:"string"}}},required:["from","to"],additionalProperties:false},humanGates:{anyOf:[{type:"string",const:"all"},{type:"array",items:{type:"string"}}]},fallbackTokensPerWeight:{type:"number"}},required:["phases","changeControl","traceability","humanGates"],additionalProperties:false},WaterfallPhaseConfig:{type:"object",properties:{id:{type:"string"},name:{type:"string"},deliverables:{type:"array",items:{type:"string"}},gate:{$ref:"#/definitions/Gate"},budget:{$ref:"#/definitions/Budget"},deliverBy:{type:"string"}},required:["id","name","deliverables","gate"],additionalProperties:false}};var j="#/definitions/";function u(e){return e===null?"null":Array.isArray(e)?"array":typeof e}function v(e,t){return e==="integer"?typeof t=="number"&&Number.isInteger(t):u(t)===e}function p(e){let t=JSON.stringify(e);return t===void 0?String(e):t.length>60?`${t.slice(0,57)}...`:t}function h(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}function S(e,t){return JSON.stringify(e)===JSON.stringify(t)}function a(e,t,s,n,i){return {path:e===""?"/":e,keyword:t,message:s,expected:n,found:i}}function x(e,t){e.startsWith(j)||b("invalid-input",`schema $ref ${JSON.stringify(e)} is not #/definitions/<name>`,"regenerate the schema with pnpm schema:gen");let s=e.slice(j.length),n=t.definitions&&Object.hasOwn(t.definitions,s)?t.definitions[s]:void 0;return n||b("invalid-input",`schema $ref ${JSON.stringify(e)} names no definition`,"regenerate the schema with pnpm schema:gen"),n}function q(e,t){let s=t===""?"/":t;return e.reduce((n,i)=>n+(i.keyword==="type"&&i.path===s?1e3:i.keyword==="const"?100:1),0)}function O(e){let t=e[0]?.filter(s=>s.keyword==="const")??[];for(let s of t){let n=e.map(r=>r.find(o=>o.keyword==="const"&&o.path===s.path));if(n.some(r=>r===void 0))continue;let i=[...new Set(n.map(r=>r?.expected))].join(" | ");return {path:s.path,keyword:"enum",message:`expected one of ${i}`,expected:i,found:s.found}}}function w(e,t){return l(e,t,e,"")}function l(e,t,s,n){if(e.$ref!==void 0)return l(x(e.$ref,s),t,s,n);let i=[];if(e.type!==void 0){let r=Array.isArray(e.type)?e.type:[e.type];if(!r.some(o=>v(o,t))){let o=r.join(" | ");return [a(n,"type",`expected ${o}, got ${u(t)}`,o,p(t))]}}if(e.const!==void 0&&!S(t,e.const)&&i.push(a(n,"const",`expected ${p(e.const)}`,p(e.const),p(t))),e.enum!==void 0&&!e.enum.some(r=>S(r,t))){let r=e.enum.map(p).join(" | ");i.push(a(n,"enum",`expected one of ${r}`,r,p(t)));}if(typeof t=="number"&&(e.minimum!==void 0&&t<e.minimum&&i.push(a(n,"minimum",`expected >= ${e.minimum}`,`>= ${e.minimum}`,p(t))),e.maximum!==void 0&&t>e.maximum&&i.push(a(n,"maximum",`expected <= ${e.maximum}`,`<= ${e.maximum}`,p(t)))),typeof t=="string"&&(e.minLength!==void 0&&t.length<e.minLength&&i.push(a(n,"minLength",`expected at least ${e.minLength} characters`,`length >= ${e.minLength}`,p(t))),e.pattern!==void 0&&!new RegExp(e.pattern,"u").test(t)&&i.push(a(n,"pattern",`expected to match /${e.pattern}/`,`/${e.pattern}/`,p(t)))),Array.isArray(t)&&e.items!==void 0){let r=e.items;t.forEach((o,c)=>i.push(...l(r,o,s,`${n}/${c}`)));}if(u(t)==="object"){let r=t;for(let[o,c]of Object.entries(r)){let g=e.properties&&Object.hasOwn(e.properties,o)?e.properties[o]:void 0,d=`${n}/${h(o)}`;if(g)i.push(...l(g,c,s,d));else if(e.additionalProperties===false){let b=Object.keys(e.properties??{}).join(", ");i.push(a(d,"additionalProperties",`unknown property ${JSON.stringify(o)}`,b?`one of ${b}`:"no properties",o));}else typeof e.additionalProperties=="object"&&i.push(...l(e.additionalProperties,c,s,d));}for(let o of e.required??[])Object.hasOwn(r,o)||i.push(a(`${n}/${h(o)}`,"required",`missing required property ${JSON.stringify(o)}`,"present","absent"));}if(e.anyOf!==void 0){let r,o=[];for(let g of e.anyOf){let d=l(g,t,s,n);if(d.length===0){r=[];break}o.push(d),(r===void 0||q(d,n)<q(r,n))&&(r=d);}let c=r&&r.length>0?O(o):void 0;c?i.push(c):r&&i.push(...r);}return i}function I(e,t,s){let n=w(e,t),i=n[0];if(!i)return;let r=n.length>1?` (+${n.length-1} more)`:"";b("invalid-input",`${s} does not match its schema: ${i.path} ${i.message}${r}`,`fix ${s} at ${i.path}: expected ${i.expected}, found ${i.found}`);}var A="http://json-schema.org/draft-07/schema#";function y(e,t){return {$schema:A,$ref:`#/definitions/${e}`,definitions:t}}var J=y("WorkflowState",f),R=y("Role",f),M=y("NewItem",f),B=y("ItemPatch",f),L=y("Handoff",f),_=y("ScrumConfig",k),D=y("KanbanConfig",P),W=y("WaterfallConfig",$);
|
|
2
|
+
export{w as a,I as b,A as c,J as d,R as e,M as f,B as g,L as h,_ as i,D as j,W as k};//# sourceMappingURL=chunk-5TXYMLBF.mjs.map
|
|
3
|
+
//# sourceMappingURL=chunk-5TXYMLBF.mjs.map
|