ex-workflow 0.4.0-stage → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +58 -2
- package/README.md +68 -32
- package/dist/adapters/index.cjs +1 -1
- package/dist/adapters/index.mjs +1 -1
- package/dist/{roles-BLBRKhUZ.d.ts → budget-Cx63FX2K.d.ts} +9 -2
- package/dist/{roles-aneKYJ3Z.d.cts → budget-JyNKxP5N.d.cts} +9 -2
- package/dist/chunk-3KFQPSRX.mjs +2 -0
- package/dist/chunk-3KFQPSRX.mjs.map +1 -0
- package/dist/chunk-5PHK72VM.cjs +2 -0
- package/dist/chunk-5PHK72VM.cjs.map +1 -0
- package/dist/chunk-5TXYMLBF.mjs +3 -0
- package/dist/chunk-5TXYMLBF.mjs.map +1 -0
- package/dist/chunk-7IG6EQI4.mjs +6 -0
- package/dist/chunk-7IG6EQI4.mjs.map +1 -0
- package/dist/chunk-CYXVGHQM.cjs +2 -0
- package/dist/chunk-CYXVGHQM.cjs.map +1 -0
- package/dist/chunk-FKTCGQYB.cjs +2 -0
- package/dist/chunk-FKTCGQYB.cjs.map +1 -0
- package/dist/chunk-HIHMBMB5.cjs +2 -0
- package/dist/chunk-HIHMBMB5.cjs.map +1 -0
- package/dist/chunk-MQWMQ4PD.mjs +2 -0
- package/dist/chunk-MQWMQ4PD.mjs.map +1 -0
- package/dist/chunk-QDMEM62U.mjs +2 -0
- package/dist/chunk-QDMEM62U.mjs.map +1 -0
- package/dist/chunk-U3OXAO67.mjs +2 -0
- package/dist/chunk-U3OXAO67.mjs.map +1 -0
- package/dist/chunk-UZQV73X7.mjs +2 -0
- package/dist/chunk-UZQV73X7.mjs.map +1 -0
- package/dist/chunk-VXH2FAKV.cjs +2 -0
- package/dist/chunk-VXH2FAKV.cjs.map +1 -0
- package/dist/chunk-WOGK54HB.cjs +3 -0
- package/dist/chunk-WOGK54HB.cjs.map +1 -0
- package/dist/chunk-XMO2RCXB.cjs +2 -0
- package/dist/chunk-XMO2RCXB.cjs.map +1 -0
- package/dist/chunk-YBHHICTZ.mjs +2 -0
- package/dist/chunk-YBHHICTZ.mjs.map +1 -0
- package/dist/chunk-YJN4JEJU.cjs +2 -0
- package/dist/chunk-YJN4JEJU.cjs.map +1 -0
- package/dist/chunk-YRATJT7P.cjs +6 -0
- package/dist/chunk-YRATJT7P.cjs.map +1 -0
- package/dist/chunk-Z2G7DGDF.mjs +2 -0
- package/dist/chunk-Z2G7DGDF.mjs.map +1 -0
- package/dist/cli/bin.cjs +1 -1
- package/dist/cli/bin.mjs +1 -1
- package/dist/cli/index.cjs +1 -1
- package/dist/cli/index.mjs +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +35 -12
- package/dist/index.d.ts +35 -12
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/kanban/index.cjs +1 -1
- package/dist/kanban/index.mjs +1 -1
- package/dist/schema/index.cjs +1 -1
- package/dist/schema/index.mjs +1 -1
- package/dist/scrum/index.cjs +1 -1
- package/dist/scrum/index.d.cts +18 -3
- package/dist/scrum/index.d.ts +18 -3
- package/dist/scrum/index.mjs +1 -1
- package/dist/types.d.cts +23 -1
- package/dist/types.d.ts +23 -1
- package/dist/waterfall/index.cjs +1 -1
- package/dist/waterfall/index.d.cts +4 -1
- package/dist/waterfall/index.d.ts +4 -1
- package/dist/waterfall/index.mjs +1 -1
- package/package.json +1 -1
- package/dist/chunk-36M6OVUJ.mjs +0 -2
- package/dist/chunk-36M6OVUJ.mjs.map +0 -1
- package/dist/chunk-7KF5K3L7.cjs +0 -2
- package/dist/chunk-7KF5K3L7.cjs.map +0 -1
- package/dist/chunk-CWBH7H52.cjs +0 -2
- package/dist/chunk-CWBH7H52.cjs.map +0 -1
- package/dist/chunk-DXC2RSN5.cjs +0 -3
- package/dist/chunk-DXC2RSN5.cjs.map +0 -1
- package/dist/chunk-GATJZYTB.mjs +0 -2
- package/dist/chunk-GATJZYTB.mjs.map +0 -1
- package/dist/chunk-GFH2FEZH.mjs +0 -2
- package/dist/chunk-GFH2FEZH.mjs.map +0 -1
- package/dist/chunk-HHC5EZ54.cjs +0 -2
- package/dist/chunk-HHC5EZ54.cjs.map +0 -1
- package/dist/chunk-KSKEFYY7.cjs +0 -2
- package/dist/chunk-KSKEFYY7.cjs.map +0 -1
- package/dist/chunk-KUUIAKEJ.cjs +0 -2
- package/dist/chunk-KUUIAKEJ.cjs.map +0 -1
- package/dist/chunk-L2ZN6HEL.mjs +0 -2
- package/dist/chunk-L2ZN6HEL.mjs.map +0 -1
- package/dist/chunk-NDORREWR.mjs +0 -2
- package/dist/chunk-NDORREWR.mjs.map +0 -1
- package/dist/chunk-NZ2DIDOD.mjs +0 -2
- package/dist/chunk-NZ2DIDOD.mjs.map +0 -1
- package/dist/chunk-OHSQ52DW.mjs +0 -6
- package/dist/chunk-OHSQ52DW.mjs.map +0 -1
- package/dist/chunk-RSKZVOYC.cjs +0 -6
- package/dist/chunk-RSKZVOYC.cjs.map +0 -1
- package/dist/chunk-S22CPYXJ.mjs +0 -3
- package/dist/chunk-S22CPYXJ.mjs.map +0 -1
- package/dist/chunk-SHAPFMVP.mjs +0 -2
- package/dist/chunk-SHAPFMVP.mjs.map +0 -1
- package/dist/chunk-SJRRQZ3R.cjs +0 -2
- package/dist/chunk-SJRRQZ3R.cjs.map +0 -1
- package/dist/chunk-UM5X2JHB.cjs +0 -2
- package/dist/chunk-UM5X2JHB.cjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/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","parsed","parseLessonInput","stages","wipChanges","policyChanges","sleChanges","before","gated","_old","applyLessonInput","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-UZQV73X7.mjs","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 { applyLessonInput, parseLessonInput } from \"../lessons.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 const parsed = parseLessonInput(state, input, \"service-delivery-review\");\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 const out = applyLessonInput(s, parsed, input.by, now);\n return appendEvent(\n out.state,\n \"cadence.service-delivery-review\",\n input.by,\n {\n wip: wipChanges,\n policies: policyChanges,\n sle: sleChanges,\n lessons: out.created,\n adopted: out.adopted.slice(out.created.length),\n dismissed: out.dismissed,\n agreements: out.agreements,\n retired: out.retired,\n },\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 chunkXMO2RCXB_cjs=require('./chunk-XMO2RCXB.cjs'),chunkS3BXVHO7_cjs=require('./chunk-S3BXVHO7.cjs');var L=["policy","skill","memory","spec","review"],v={retro:"review in a fresh worker",phaseRetrospective:"qa reads the srs"},w=n=>typeof n=="object"&&n!==null&&!Array.isArray(n);function $(n,i,d){let g=i.lessons??[];(!Array.isArray(g)||!g.every(s=>w(s)&&typeof s.text=="string"&&s.text.trim()!==""&&L.includes(s.scope)))&&chunkS3BXVHO7_cjs.b("invalid-input",`${d}.lessons entries need a text and a scope`,`scope is one of: ${L.join(", ")}`);let m=g,t=["human",...Object.keys(n.roles)];for(let s of m)s.from!==void 0&&(typeof s.from!="string"||!t.includes(s.from))&&chunkS3BXVHO7_cjs.b("invalid-input",`lesson from ${JSON.stringify(s.from)} is not a role`,`from is "human" or one of the roles: ${Object.keys(n.roles).join(", ")||"(none)"}`),s.item!==void 0&&(typeof s.item!="string"&&chunkS3BXVHO7_cjs.b("invalid-input","lesson item must be an item id","name an item with addItem first"),chunkXMO2RCXB_cjs.u(n,s.item));let f=i.adopt??[],a=i.dismiss??[];(!Array.isArray(f)||!f.every(s=>w(s)&&typeof s.id=="string")||!Array.isArray(a)||!a.every(s=>typeof s=="string"))&&chunkS3BXVHO7_cjs.b("invalid-input",`${d}.adopt must be [{ id, suggestedChange? }] and dismiss a string[]`,'e.g. { "adopt": [{ "id": "L1" }], "dismiss": ["L2"] }');let p=[...f.map(s=>s.id),...a],l=p.find((s,o)=>p.indexOf(s)!==o);l!==void 0&&chunkS3BXVHO7_cjs.b("invalid-input",`lesson "${l}" is referenced more than once`,"adopt or dismiss each lesson once");for(let s of p){let o=n.lessons.find(c=>c.id===s);o||chunkS3BXVHO7_cjs.b("invalid-input",`no lesson "${s}"`,`raised lessons: ${n.lessons.filter(c=>c.status==="raised").map(c=>c.id).join(", ")||"(none)"}`),o.status!=="raised"&&chunkS3BXVHO7_cjs.b("invalid-input",`lesson "${s}" is already ${o.status}`,"only raised lessons can be adopted or dismissed");}let e=i.retire??[];return (!Array.isArray(e)||!e.every(s=>typeof s=="string")||e.some((s,o)=>e.indexOf(s)!==o))&&chunkS3BXVHO7_cjs.b("invalid-input",`${d}.retire must be a list of distinct agreement texts`,`e.g. { "retire": ["${v[d]??"review in a fresh worker"}"] }; each agreement once`),{lessons:m,adopt:f,dismiss:a,retire:e}}function x(n,i,d,g,m){let t=n,f=[],a=[],p=[],l=e=>{e&&(e.kind==="agreement"?(t=chunkXMO2RCXB_cjs.D(t,e,d,g),p.push(e.text)):m&&(t=m(t,e)??t));};for(let e of i.lessons){let s=`L${t.lessons.length+1}`,o={id:s,at:g,text:e.text,scope:e.scope,status:"adopted",from:e.from??d};e.item!==void 0&&(o.item=e.item),e.suggestedChange&&(o.suggestedChange=e.suggestedChange),t={...t,lessons:[...t.lessons,o]},f.push(s),a.push(s),l(e.suggestedChange);}for(let e of i.adopt)t={...t,lessons:t.lessons.map(s=>s.id===e.id?{...s,status:"adopted",...e.suggestedChange?{suggestedChange:e.suggestedChange}:{}}:s)},a.push(e.id),l(e.suggestedChange??t.lessons.find(s=>s.id===e.id)?.suggestedChange);for(let e of i.dismiss)t={...t,lessons:t.lessons.map(s=>s.id===e?{...s,status:"dismissed"}:s)};for(let e of i.retire)t=chunkXMO2RCXB_cjs.E(t,e,d,g);return {state:t,created:f,adopted:a,dismissed:i.dismiss,agreements:p,retired:i.retire}}exports.a=$;exports.b=x;//# sourceMappingURL=chunk-VXH2FAKV.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-VXH2FAKV.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lessons.ts"],"names":["LESSON_SCOPES","RETIRE_EXAMPLE","isObj","x","parseLessonInput","state","input","ceremony","lessons","l","fail","newLessons","roleIds","getItem","adopt","dismiss","a","d","refs","dupe","r","i","ref","retire","applyLessonInput","parsed","by","now","applyChange","s","created","adopted","agreements","change","c","applyAgreement","id","lesson","text","retireAgreement"],"mappings":"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","file":"chunk-VXH2FAKV.cjs","sourcesContent":["import { applyAgreement, retireAgreement } from \"./agreements.ts\";\nimport { fail } from \"./errors.ts\";\nimport { getItem } from \"./items.ts\";\nimport type { Lesson, LessonChange, WorkflowState } from \"./types.ts\";\n\nconst LESSON_SCOPES: readonly string[] = [\"policy\", \"skill\", \"memory\", \"spec\", \"review\"];\nconst RETIRE_EXAMPLE: Readonly<Record<string, string>> = {\n retro: \"review in a fresh worker\",\n phaseRetrospective: \"qa reads the srs\",\n};\nconst isObj = (x: unknown): x is Record<string, unknown> =>\n typeof x === \"object\" && x !== null && !Array.isArray(x);\n\nexport interface NewLesson {\n text: string;\n scope: Lesson[\"scope\"];\n from?: string;\n item?: string;\n suggestedChange?: LessonChange;\n}\nexport interface Adopt {\n id: string;\n suggestedChange?: LessonChange;\n}\nexport interface LessonInput {\n lessons: NewLesson[];\n adopt: Adopt[];\n dismiss: string[];\n retire: string[];\n}\nexport interface LessonOutcome {\n state: WorkflowState;\n /** ids of the lessons created by this input */\n created: string[];\n /** created ids first, then the adopted refs */\n adopted: string[];\n dismissed: string[];\n /** texts of the agreements added */\n agreements: string[];\n retired: string[];\n}\n\n/** Validates the lesson keys of a retrospective-style ceremony input; every failure names the ceremony. */\nexport function parseLessonInput(\n state: WorkflowState,\n input: Record<string, unknown>,\n ceremony: string,\n): LessonInput {\n const lessons = input[\"lessons\"] ?? [];\n if (\n !Array.isArray(lessons) ||\n !lessons.every(\n (l) =>\n isObj(l) &&\n typeof l[\"text\"] === \"string\" &&\n l[\"text\"].trim() !== \"\" &&\n LESSON_SCOPES.includes(l[\"scope\"] as string),\n )\n )\n fail(\n \"invalid-input\",\n `${ceremony}.lessons entries need a text and a scope`,\n `scope is one of: ${LESSON_SCOPES.join(\", \")}`,\n );\n const newLessons = lessons as NewLesson[];\n const roleIds = [\"human\", ...Object.keys(state.roles)];\n for (const l of newLessons) {\n if (l.from !== undefined && (typeof l.from !== \"string\" || !roleIds.includes(l.from)))\n fail(\n \"invalid-input\",\n `lesson from ${JSON.stringify(l.from)} is not a role`,\n `from is \"human\" or one of the roles: ${Object.keys(state.roles).join(\", \") || \"(none)\"}`,\n );\n if (l.item !== undefined) {\n if (typeof l.item !== \"string\")\n fail(\"invalid-input\", \"lesson item must be an item id\", \"name an item with addItem first\");\n getItem(state, l.item);\n }\n }\n const adopt = input[\"adopt\"] ?? [];\n const dismiss = input[\"dismiss\"] ?? [];\n if (\n !Array.isArray(adopt) ||\n !adopt.every((a) => isObj(a) && typeof a[\"id\"] === \"string\") ||\n !Array.isArray(dismiss) ||\n !dismiss.every((d) => typeof d === \"string\")\n )\n fail(\n \"invalid-input\",\n `${ceremony}.adopt must be [{ id, suggestedChange? }] and dismiss a string[]`,\n 'e.g. { \"adopt\": [{ \"id\": \"L1\" }], \"dismiss\": [\"L2\"] }',\n );\n const refs = [...(adopt as Adopt[]).map((a) => a.id), ...(dismiss as string[])];\n const dupe = refs.find((r, i) => refs.indexOf(r) !== i);\n if (dupe !== undefined)\n fail(\n \"invalid-input\",\n `lesson \"${dupe}\" is referenced more than once`,\n \"adopt or dismiss each lesson once\",\n );\n for (const ref of refs) {\n const l = state.lessons.find((x) => x.id === ref);\n if (!l)\n fail(\n \"invalid-input\",\n `no lesson \"${ref}\"`,\n `raised lessons: ${\n state.lessons\n .filter((x) => x.status === \"raised\")\n .map((x) => x.id)\n .join(\", \") || \"(none)\"\n }`,\n );\n if (l.status !== \"raised\")\n fail(\n \"invalid-input\",\n `lesson \"${ref}\" is already ${l.status}`,\n \"only raised lessons can be adopted or dismissed\",\n );\n }\n const retire: unknown = input[\"retire\"] ?? [];\n if (\n !Array.isArray(retire) ||\n !retire.every((x) => typeof x === \"string\") ||\n retire.some((x, i) => retire.indexOf(x) !== i)\n )\n fail(\n \"invalid-input\",\n `${ceremony}.retire must be a list of distinct agreement texts`,\n `e.g. { \"retire\": [\"${RETIRE_EXAMPLE[ceremony] ?? \"review in a fresh worker\"}\"] }; each agreement once`,\n );\n return {\n lessons: newLessons,\n adopt: adopt as Adopt[],\n dismiss: dismiss as string[],\n retire: retire as string[],\n };\n}\n\n/**\n * Creates the new lessons as adopted, adopts and dismisses the referenced ones, retires agreements\n * and applies `agreement` changes; every other change kind goes to `applyChange` when given.\n */\nexport function applyLessonInput(\n state: WorkflowState,\n parsed: LessonInput,\n by: string,\n now: string,\n applyChange?: (s: WorkflowState, change: LessonChange) => WorkflowState | void,\n): LessonOutcome {\n let s = state;\n const created: string[] = [];\n const adopted: string[] = [];\n const agreements: string[] = [];\n const change = (c: LessonChange | undefined) => {\n if (!c) return;\n if (c.kind === \"agreement\") {\n s = applyAgreement(s, c, by, now);\n agreements.push(c.text);\n } else if (applyChange) {\n s = applyChange(s, c) ?? s;\n }\n };\n for (const l of parsed.lessons) {\n const id = `L${s.lessons.length + 1}`;\n const lesson: Lesson = {\n id,\n at: now,\n text: l.text,\n scope: l.scope,\n status: \"adopted\",\n from: l.from ?? by,\n };\n if (l.item !== undefined) lesson.item = l.item;\n if (l.suggestedChange) lesson.suggestedChange = l.suggestedChange;\n s = { ...s, lessons: [...s.lessons, lesson] };\n created.push(id);\n adopted.push(id);\n change(l.suggestedChange);\n }\n for (const a of parsed.adopt) {\n s = {\n ...s,\n lessons: s.lessons.map((x) =>\n x.id === a.id\n ? {\n ...x,\n status: \"adopted\" as const,\n ...(a.suggestedChange ? { suggestedChange: a.suggestedChange } : {}),\n }\n : x,\n ),\n };\n adopted.push(a.id);\n change(a.suggestedChange ?? s.lessons.find((x) => x.id === a.id)?.suggestedChange);\n }\n for (const d of parsed.dismiss)\n s = {\n ...s,\n lessons: s.lessons.map((x) => (x.id === d ? { ...x, status: \"dismissed\" as const } : x)),\n };\n for (const text of parsed.retire) s = retireAgreement(s, text, by, now);\n return {\n state: s,\n created,\n adopted,\n dismissed: parsed.dismiss,\n agreements,\n retired: parsed.retire,\n };\n}\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
'use strict';var chunkS3BXVHO7_cjs=require('./chunk-S3BXVHO7.cjs');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)||chunkS3BXVHO7_cjs.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||chunkS3BXVHO7_cjs.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)`:"";chunkS3BXVHO7_cjs.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
|
+
exports.a=w;exports.b=I;exports.c=A;exports.d=J;exports.e=R;exports.f=M;exports.g=B;exports.h=L;exports.i=_;exports.j=D;exports.k=W;//# sourceMappingURL=chunk-WOGK54HB.cjs.map
|
|
3
|
+
//# sourceMappingURL=chunk-WOGK54HB.cjs.map
|