ex-workflow 0.3.0-stage → 0.4.0-stage
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -1
- package/README.md +16 -3
- package/dist/adapters/index.cjs +1 -1
- package/dist/adapters/index.mjs +1 -1
- package/dist/chunk-36M6OVUJ.mjs +2 -0
- package/dist/chunk-36M6OVUJ.mjs.map +1 -0
- package/dist/{chunk-4A4TD4MH.cjs → chunk-7KF5K3L7.cjs} +2 -2
- package/dist/{chunk-4A4TD4MH.cjs.map → chunk-7KF5K3L7.cjs.map} +1 -1
- package/dist/{chunk-2IKIBB73.cjs → chunk-CWBH7H52.cjs} +2 -2
- package/dist/{chunk-2IKIBB73.cjs.map → chunk-CWBH7H52.cjs.map} +1 -1
- package/dist/chunk-DXC2RSN5.cjs +3 -0
- package/dist/chunk-DXC2RSN5.cjs.map +1 -0
- package/dist/{chunk-UOGNVWVO.mjs → chunk-GATJZYTB.mjs} +2 -2
- package/dist/{chunk-UOGNVWVO.mjs.map → chunk-GATJZYTB.mjs.map} +1 -1
- package/dist/{chunk-ZX4DAMTG.mjs → chunk-GFH2FEZH.mjs} +2 -2
- package/dist/{chunk-ZX4DAMTG.mjs.map → chunk-GFH2FEZH.mjs.map} +1 -1
- package/dist/{chunk-NN3XJUHP.cjs → chunk-HHC5EZ54.cjs} +2 -2
- package/dist/{chunk-NN3XJUHP.cjs.map → chunk-HHC5EZ54.cjs.map} +1 -1
- package/dist/{chunk-TMKCALFT.cjs → chunk-KSKEFYY7.cjs} +2 -2
- package/dist/{chunk-TMKCALFT.cjs.map → chunk-KSKEFYY7.cjs.map} +1 -1
- package/dist/chunk-KUUIAKEJ.cjs +2 -0
- package/dist/chunk-KUUIAKEJ.cjs.map +1 -0
- package/dist/{chunk-R27STIER.mjs → chunk-L2ZN6HEL.mjs} +2 -2
- package/dist/{chunk-R27STIER.mjs.map → chunk-L2ZN6HEL.mjs.map} +1 -1
- package/dist/{chunk-BJEOTG6P.mjs → chunk-NDORREWR.mjs} +2 -2
- package/dist/{chunk-BJEOTG6P.mjs.map → chunk-NDORREWR.mjs.map} +1 -1
- package/dist/{chunk-WOKNWJKU.mjs → chunk-NZ2DIDOD.mjs} +2 -2
- package/dist/{chunk-WOKNWJKU.mjs.map → chunk-NZ2DIDOD.mjs.map} +1 -1
- package/dist/chunk-OHSQ52DW.mjs +6 -0
- package/dist/chunk-OHSQ52DW.mjs.map +1 -0
- package/dist/chunk-RSKZVOYC.cjs +6 -0
- package/dist/chunk-RSKZVOYC.cjs.map +1 -0
- package/dist/chunk-S22CPYXJ.mjs +3 -0
- package/dist/chunk-S22CPYXJ.mjs.map +1 -0
- package/dist/{chunk-FLCYD2QF.mjs → chunk-SHAPFMVP.mjs} +2 -2
- package/dist/{chunk-FLCYD2QF.mjs.map → chunk-SHAPFMVP.mjs.map} +1 -1
- package/dist/{chunk-23P7C25E.cjs → chunk-SJRRQZ3R.cjs} +2 -2
- package/dist/{chunk-23P7C25E.cjs.map → chunk-SJRRQZ3R.cjs.map} +1 -1
- package/dist/{chunk-7HZXZF3L.cjs → chunk-UM5X2JHB.cjs} +2 -2
- package/dist/{chunk-7HZXZF3L.cjs.map → chunk-UM5X2JHB.cjs.map} +1 -1
- package/dist/cli/bin.cjs +1 -1
- package/dist/cli/bin.cjs.map +1 -1
- package/dist/cli/bin.mjs +1 -1
- package/dist/cli/bin.mjs.map +1 -1
- package/dist/cli/index.cjs +1 -1
- package/dist/cli/index.mjs +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -5
- package/dist/index.d.ts +5 -5
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/kanban/index.cjs +1 -1
- package/dist/kanban/index.mjs +1 -1
- package/dist/schema/index.cjs +2 -0
- package/dist/schema/index.cjs.map +1 -0
- package/dist/schema/index.d.cts +57 -0
- package/dist/schema/index.d.ts +57 -0
- package/dist/schema/index.mjs +2 -0
- package/dist/schema/index.mjs.map +1 -0
- package/dist/scrum/index.cjs +1 -1
- package/dist/scrum/index.mjs +1 -1
- package/dist/types.d.cts +9 -2
- package/dist/types.d.ts +9 -2
- package/dist/waterfall/index.cjs +1 -1
- package/dist/waterfall/index.mjs +1 -1
- package/package.json +18 -2
- package/dist/chunk-6R3YFUUV.cjs +0 -6
- package/dist/chunk-6R3YFUUV.cjs.map +0 -1
- package/dist/chunk-AUZIQPFT.cjs +0 -2
- package/dist/chunk-AUZIQPFT.cjs.map +0 -1
- package/dist/chunk-P4P4JTE5.mjs +0 -2
- package/dist/chunk-P4P4JTE5.mjs.map +0 -1
- package/dist/chunk-VGD4V5BA.mjs +0 -6
- package/dist/chunk-VGD4V5BA.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/waterfall/config.ts","../src/waterfall/phases.ts","../src/waterfall/baseline.ts","../src/waterfall/change.ts","../src/waterfall/retro.ts","../src/waterfall/traceability.ts","../src/waterfall/ceremonies.ts","../src/waterfall/metrics.ts","../src/waterfall/roles.ts","../src/waterfall/rules.ts","../src/waterfall/stages.ts","../src/waterfall/index.ts"],"names":["DEFAULT_PHASE_IDS","DEFAULT_DELIVERABLES","DEFAULT_DELIVER_BY","GATE_ID","id","CHANGE_GATE","CAPABILITIES","title","defaultPhases","p","by","configOf","state","isObj","x","strings","s","budget","raw","where","fail","out","k","v","requirements","q","phase","i","human","assertId","deliverables","gate","g","evidence","b","validateWaterfallConfig","c","hg","phases","ids","dupe","cc","changeControl","tr","traceability","to","t","WORK","REVIEW","DONE","phasesOf","ph","withPhases","phaseIndex","idx","getPhase","phaseOf","item","seen","cur","itemsInPhase","phaseId","openPhase","currentPhase","isFrozen","producedKinds","kinds","it","e","missingDeliverables","extra","have","wanted","lastToPhase","order","a","closeIteration","prefix","outcome","now","openIteration","baselinePhase","approvedBy","items","itemSnapshot","earlier","baseline","appendEvent","reopenPhases","reopened","suspended","earliest","open","approveChange","changeId","note","cr","getItem","ia","r","moveItem","rejectChange","LESSON_SCOPES","validLessons","l","assertRefs","adopt","dismiss","refs","ref","phaseRetrospective","methodology","input","requireCap","wantPhase","newLessons","d","applyAction","s0","nowOf","agreements","agree","ch","created","lesson","adopted","byId","artefacts","timSort","linked","traceabilityMatrix","cfg","rows","f","links","missing","m","missingTraces","toPhase","ceremony","recordDeliverable","kind","waterfallCeremonies","act","type","reduce","version","ZERO_SPENT","approvers","approverIds","already","given","raisePending","pending","decision","canDo","rolesWith","needsHuman","waterfallAfterDecide","entry","reviewer","waterfallMetrics","zero","total","done","planned","spent","defects","typeOf","status","traced","reqTotal","changeRequests","approved","rejected","reworkWeight","phasesReopened","counted","ev","was","completion","variance","n","decided","waterfallRoles","config","gates","rule","message","fix","payloadOf","phaseArg","phaseById","phaseIds","itemById","phaseOfNew","parent","governed","frozenFix","changeOf","waterfallRules","patch","approve","mine","authorOf","others","added","waterfallStages","_config","WATERFALL_VOCABULARY","deliverRoleFor","phaseReport","waterfall","frozen","itemId","_now","acc","addSpent"],"mappings":"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","file":"chunk-BJEOTG6P.mjs","sourcesContent":["import { assertId, fail } from \"../errors.ts\";\nimport type { Budget, Gate, GateRequirement, WorkflowState } from \"../types.ts\";\n\nexport interface WaterfallPhaseConfig {\n id: string;\n name: string;\n deliverables: string[];\n gate: Gate;\n budget?: Budget;\n /** role id that delivers this phase's items; default: the first role with \"deliver\" */\n deliverBy?: string;\n}\nexport interface WaterfallConfig {\n phases: WaterfallPhaseConfig[];\n changeControl: { requiresImpactAnalysis: boolean; approvers: GateRequirement[] };\n /** phase ids: every item of `from` must trace to an item of each `to` phase before that phase's gate */\n traceability: { from: string; to: string[] };\n humanGates: \"all\" | string[];\n}\n\nexport const DEFAULT_PHASE_IDS: readonly string[] = [\n \"requirements\",\n \"design\",\n \"implementation\",\n \"verification\",\n \"deployment\",\n \"maintenance\",\n];\nexport const DEFAULT_DELIVERABLES: Record<string, string[]> = {\n requirements: [\"srs\"],\n design: [\"design-doc\", \"interface-spec\"],\n implementation: [\"code-baseline\"],\n verification: [\"test-report\", \"traceability-matrix\"],\n deployment: [\"release-notes\", \"deployment-record\"],\n maintenance: [\"change-log\"],\n};\nexport const DEFAULT_DELIVER_BY: Record<string, string> = {\n requirements: \"business-analyst\",\n design: \"architect\",\n deployment: \"release-manager\",\n};\nexport const GATE_ID = (id: string): string => `${id}-gate`;\nexport const CHANGE_GATE = \"change-control\";\nexport const CAPABILITIES: readonly string[] = [\n \"order-backlog\",\n \"define-acceptance\",\n \"facilitate\",\n \"deliver\",\n \"review\",\n \"verify\",\n \"approve-gate\",\n \"manage-flow\",\n \"control-change\",\n \"escalate\",\n];\n\nconst title = (id: string) => id.charAt(0).toUpperCase() + id.slice(1);\n\nexport function defaultPhases(): WaterfallPhaseConfig[] {\n return DEFAULT_PHASE_IDS.map((id) => {\n const p: WaterfallPhaseConfig = {\n id,\n name: title(id),\n deliverables: [...(DEFAULT_DELIVERABLES[id] ?? [])],\n gate: {\n id: GATE_ID(id),\n requires: [{ capability: \"approve-gate\" }],\n evidence: [],\n onFail: { action: \"block\" },\n },\n };\n const by = DEFAULT_DELIVER_BY[id];\n if (by !== undefined) p.deliverBy = by;\n return p;\n });\n}\n\nexport function configOf(state: WorkflowState): WaterfallConfig {\n return state.config as WaterfallConfig;\n}\n\nconst isObj = (x: unknown): x is Record<string, unknown> =>\n typeof x === \"object\" && x !== null && !Array.isArray(x);\nconst strings = (x: unknown): x is string[] =>\n Array.isArray(x) && x.every((s) => typeof s === \"string\" && s.trim() !== \"\");\n\nfunction budget(raw: unknown, where: string): Budget | undefined {\n if (raw === undefined) return undefined;\n if (!isObj(raw))\n fail(\"config-invalid\", `${where}.budget must be an object`, 'e.g. { \"tokens\": 400000 }');\n const out: Budget = {};\n for (const k of [\"tokens\", \"turns\", \"wallclockMs\"] as const) {\n const v = raw[k];\n if (v === undefined) continue;\n if (typeof v !== \"number\" || !Number.isFinite(v) || v < 0)\n fail(\n \"config-invalid\",\n `${where}.budget.${k} must be a non-negative number`,\n \"omit it for no limit\",\n );\n out[k] = v;\n }\n return out;\n}\n\nfunction requirements(raw: unknown, where: string): GateRequirement[] {\n if (!Array.isArray(raw) || raw.length === 0)\n fail(\n \"config-invalid\",\n `${where} must be a non-empty array of \"human\" | { capability }`,\n 'e.g. [\"human\", { \"capability\": \"approve-gate\" }]',\n );\n return raw.map((q: unknown): GateRequirement => {\n if (q === \"human\") return \"human\";\n if (isObj(q) && typeof q[\"capability\"] === \"string\" && CAPABILITIES.includes(q[\"capability\"]))\n return { capability: q[\"capability\"] };\n return fail(\n \"config-invalid\",\n `${where} entry ${JSON.stringify(q)} is not \"human\" or a known capability`,\n `use \"human\" or { \"capability\": one of ${CAPABILITIES.join(\", \")} }`,\n );\n });\n}\n\nfunction phase(raw: unknown, i: number, human: (id: string) => boolean): WaterfallPhaseConfig {\n const where = `waterfall config.phases[${i}]`;\n if (!isObj(raw)) fail(\"config-invalid\", `${where} must be an object`, 'e.g. { \"id\": \"design\" }');\n assertId(raw[\"id\"], `${where}.id`);\n const id = raw[\"id\"] as string;\n const deliverables = raw[\"deliverables\"] ?? DEFAULT_DELIVERABLES[id] ?? [];\n if (!strings(deliverables))\n fail(\n \"config-invalid\",\n `${where}.deliverables must be a string[] of evidence kinds`,\n 'e.g. [\"srs\"]',\n );\n let gate: Gate;\n if (raw[\"gate\"] === undefined) {\n gate = {\n id: GATE_ID(id),\n requires: [{ capability: \"approve-gate\" }],\n evidence: [],\n onFail: { action: \"block\" },\n };\n } else {\n const g = raw[\"gate\"];\n if (!isObj(g) || typeof g[\"id\"] !== \"string\" || g[\"id\"].trim() === \"\")\n fail(\n \"config-invalid\",\n `${where}.gate must be a Gate with an id`,\n 'e.g. { \"id\": \"design-gate\", \"requires\": [{ \"capability\": \"approve-gate\" }], \"evidence\": [] }',\n );\n const evidence = g[\"evidence\"] ?? [];\n if (!strings(evidence))\n fail(\n \"config-invalid\",\n `${where}.gate.evidence must be a string[]`,\n \"list evidence kinds or omit it\",\n );\n gate = {\n id: g[\"id\"],\n requires: requirements(\n g[\"requires\"] ?? [{ capability: \"approve-gate\" }],\n `${where}.gate.requires`,\n ),\n evidence: [...evidence],\n onFail: { action: \"block\" },\n };\n }\n if (human(id) && !gate.requires.includes(\"human\")) gate.requires = [\"human\", ...gate.requires];\n const out: WaterfallPhaseConfig = {\n id,\n name: typeof raw[\"name\"] === \"string\" && raw[\"name\"].trim() !== \"\" ? raw[\"name\"] : title(id),\n deliverables: [...deliverables],\n gate,\n };\n const b = budget(raw[\"budget\"], where);\n if (b !== undefined) out.budget = b;\n const by = raw[\"deliverBy\"] ?? DEFAULT_DELIVER_BY[id];\n if (by !== undefined) {\n if (typeof by !== \"string\" || by.trim() === \"\")\n fail(\n \"config-invalid\",\n `${where}.deliverBy must be a role id`,\n \"name the role that delivers this phase or omit it\",\n );\n out.deliverBy = by;\n }\n return out;\n}\n\nexport function validateWaterfallConfig(raw: unknown): WaterfallConfig {\n const c = (raw ?? {}) as Record<string, unknown>;\n if (c[\"phases\"] !== undefined && !Array.isArray(c[\"phases\"]))\n fail(\n \"config-invalid\",\n \"waterfall config.phases must be an array of phases\",\n \"omit phases for the six classic phases\",\n );\n const hg = c[\"humanGates\"] ?? \"all\";\n if (hg !== \"all\" && !strings(hg))\n fail(\n \"config-invalid\",\n 'waterfall config.humanGates must be \"all\" or a string[] of phase ids',\n 'omit it for \"all\"',\n );\n const human = hg === \"all\" ? () => true : (id: string) => (hg as string[]).includes(id);\n const phases =\n c[\"phases\"] === undefined\n ? defaultPhases().map((p, i) => phase(p, i, human))\n : (c[\"phases\"] as unknown[]).map((p, i) => phase(p, i, human));\n if (phases.length === 0)\n fail(\n \"config-invalid\",\n \"waterfall config.phases needs at least one phase\",\n 'e.g. [{ \"id\": \"requirements\" }]',\n );\n const ids = phases.map((p) => p.id);\n const dupe = ids.find((id, i) => ids.indexOf(id) !== i);\n if (dupe !== undefined)\n fail(\"config-invalid\", `duplicate phase id \"${dupe}\"`, \"give every phase a unique id\");\n if (hg !== \"all\")\n for (const id of hg as string[])\n if (!ids.includes(id))\n fail(\n \"config-invalid\",\n `waterfall config.humanGates names unknown phase \"${id}\"`,\n `phases are: ${ids.join(\", \")}`,\n );\n const cc = c[\"changeControl\"] ?? {};\n if (!isObj(cc))\n fail(\n \"config-invalid\",\n \"waterfall config.changeControl must be an object\",\n 'e.g. { \"requiresImpactAnalysis\": true, \"approvers\": [\"human\"] }',\n );\n if (\n cc[\"requiresImpactAnalysis\"] !== undefined &&\n typeof cc[\"requiresImpactAnalysis\"] !== \"boolean\"\n )\n fail(\n \"config-invalid\",\n \"waterfall config.changeControl.requiresImpactAnalysis must be a boolean\",\n \"omit it for true\",\n );\n const changeControl: WaterfallConfig[\"changeControl\"] = {\n requiresImpactAnalysis:\n cc[\"requiresImpactAnalysis\"] === undefined ? true : (cc[\"requiresImpactAnalysis\"] as boolean),\n approvers: requirements(\n cc[\"approvers\"] ?? [\"human\", { capability: \"control-change\" }],\n \"waterfall config.changeControl.approvers\",\n ),\n };\n const tr = c[\"traceability\"];\n let traceability: WaterfallConfig[\"traceability\"];\n if (tr === undefined) {\n traceability =\n ids.includes(\"requirements\") && ids.includes(\"design\") && ids.includes(\"verification\")\n ? { from: \"requirements\", to: [\"design\", \"verification\"] }\n : { from: ids[0]!, to: [] };\n } else {\n if (!isObj(tr) || typeof tr[\"from\"] !== \"string\" || !ids.includes(tr[\"from\"]))\n fail(\n \"config-invalid\",\n \"waterfall config.traceability.from must be a phase id\",\n `phases are: ${ids.join(\", \")}`,\n );\n const to = tr[\"to\"] ?? [];\n if (!strings(to))\n fail(\n \"config-invalid\",\n \"waterfall config.traceability.to must be a string[] of phase ids\",\n `phases are: ${ids.join(\", \")}`,\n );\n for (const t of to) {\n if (!ids.includes(t))\n fail(\n \"config-invalid\",\n `waterfall config.traceability.to names unknown phase \"${t}\"`,\n `phases are: ${ids.join(\", \")}`,\n );\n if (ids.indexOf(t) <= ids.indexOf(tr[\"from\"]))\n fail(\n \"config-invalid\",\n `waterfall config.traceability.to phase \"${t}\" must come after \"${tr[\"from\"]}\"`,\n \"trace forward only: from an earlier phase to later ones\",\n );\n }\n traceability = { from: tr[\"from\"], to: [...to] };\n }\n return {\n phases,\n changeControl,\n traceability,\n humanGates: hg === \"all\" ? \"all\" : [...(hg as string[])],\n };\n}\n","import { fail } from \"../errors.ts\";\nimport type { Phase, WorkItem, WorkflowState } from \"../types.ts\";\nimport { configOf } from \"./config.ts\";\n\nexport const WORK = \"work\";\nexport const REVIEW = \"review\";\nexport const DONE = \"done\";\n\n/** state.phases, or the config phases as pending (before the first ceremony touches them). */\nexport function phasesOf(state: WorkflowState): Phase[] {\n if (state.phases) return state.phases;\n return configOf(state).phases.map((p) => {\n const ph: Phase = {\n id: p.id,\n name: p.name,\n deliverables: [...p.deliverables],\n gate: p.gate,\n status: \"pending\",\n };\n if (p.budget) ph.budget = p.budget;\n return ph;\n });\n}\n\nexport function withPhases(state: WorkflowState, phases: Phase[]): WorkflowState {\n return { ...state, phases };\n}\n\nexport function phaseIndex(state: WorkflowState, id: string): number {\n const idx = phasesOf(state).findIndex((p) => p.id === id);\n if (idx < 0)\n fail(\n \"config-invalid\",\n `unknown phase \"${id}\"`,\n `phases are: ${phasesOf(state)\n .map((p) => p.id)\n .join(\" → \")}`,\n );\n return idx;\n}\n\nexport function getPhase(state: WorkflowState, id: string): Phase {\n return phasesOf(state)[phaseIndex(state, id)]!;\n}\n\n/** The item's phase, inherited from its parent chain (questions, follow-ups, retro items). */\nexport function phaseOf(state: WorkflowState, item: WorkItem): string | undefined {\n const seen = new Set<string>();\n let cur: WorkItem | undefined = item;\n while (cur && !seen.has(cur.id)) {\n if (cur.phase !== undefined) return cur.phase;\n seen.add(cur.id);\n cur =\n cur.parent !== undefined && Object.hasOwn(state.items, cur.parent)\n ? state.items[cur.parent]\n : undefined;\n }\n return undefined;\n}\n\nexport function itemsInPhase(state: WorkflowState, phaseId: string): WorkItem[] {\n return Object.values(state.items).filter(\n (i) => i.status !== \"dropped\" && phaseOf(state, i) === phaseId,\n );\n}\n\nexport function openPhase(state: WorkflowState): Phase | undefined {\n return phasesOf(state).find((p) => p.status === \"open\");\n}\n\n/** First phase in order that is not baselined: the one to kick off (or the open one). */\nexport function currentPhase(state: WorkflowState): Phase | undefined {\n return phasesOf(state).find((p) => p.status !== \"baselined\");\n}\n\nexport function isFrozen(state: WorkflowState, item: WorkItem): boolean {\n const id = phaseOf(state, item);\n return id !== undefined && phasesOf(state).find((p) => p.id === id)?.status === \"baselined\";\n}\n\nexport function producedKinds(state: WorkflowState, phase: Phase): Set<string> {\n const kinds = new Set<string>((phase.produced ?? []).map((p) => p.kind));\n for (const it of itemsInPhase(state, phase.id)) for (const e of it.evidence) kinds.add(e.kind);\n return kinds;\n}\n\n/** Deliverables (and gate evidence kinds) still missing, in declaration order. */\nexport function missingDeliverables(\n state: WorkflowState,\n phase: Phase,\n extra: string[] = [],\n): string[] {\n const have = producedKinds(state, phase);\n for (const k of extra) have.add(k);\n const wanted: string[] = [];\n for (const k of [...phase.deliverables, ...phase.gate.evidence])\n if (!wanted.includes(k)) wanted.push(k);\n return wanted.filter((k) => !have.has(k));\n}\n\n/** The traceability `to` phase that comes last in phase order (where the matrix must be complete). */\nexport function lastToPhase(state: WorkflowState): string | undefined {\n const order = phasesOf(state).map((p) => p.id);\n const to = configOf(state).traceability.to.filter((t) => order.includes(t));\n if (to.length === 0) return undefined;\n return to.reduce((a, b) => (order.indexOf(a) >= order.indexOf(b) ? a : b));\n}\n","import { fail } from \"../errors.ts\";\nimport { openIteration } from \"../planner.ts\";\nimport { appendEvent } from \"../state.ts\";\nimport type { Baseline, WorkItem, WorkflowState } from \"../types.ts\";\nimport { getPhase, itemsInPhase, phaseIndex, phasesOf, withPhases } from \"./phases.ts\";\n\nfunction closeIteration(\n state: WorkflowState,\n prefix: string,\n outcome: \"completed\" | \"cancelled\",\n now: string,\n): WorkflowState {\n const it = openIteration(state);\n if (!it || !it.id.startsWith(`${prefix}#`)) return state;\n return {\n ...state,\n iterations: state.iterations.map((x) => (x.id === it.id ? { ...x, endedAt: now, outcome } : x)),\n };\n}\n\n/** Pass the phase gate: freeze its items, record the baseline, close its iteration. */\nexport function baselinePhase(\n state: WorkflowState,\n phaseId: string,\n approvedBy: string[],\n now: string,\n): WorkflowState {\n const phase = getPhase(state, phaseId);\n if (phase.status !== \"open\")\n fail(\n \"invalid-transition\",\n `phase \"${phaseId}\" is ${phase.status}, not open`,\n phase.status === \"baselined\"\n ? \"it is already baselined; a change-request reopens it\"\n : \"kickoff the phase first\",\n );\n const items = itemsInPhase(state, phaseId);\n const itemSnapshot: Record<string, WorkItem> = {};\n for (const it of items) itemSnapshot[it.id] = it;\n const earlier = (state.baselines ?? []).filter((b) => b.phase === phaseId).length;\n const baseline: Baseline = {\n phase: phaseId,\n version: earlier + 1,\n at: now,\n approvedBy,\n itemSnapshot,\n };\n let s = withPhases(\n state,\n phasesOf(state).map((p) => (p.id === phaseId ? { ...p, status: \"baselined\" as const } : p)),\n );\n s = { ...s, baseline, baselines: [...(s.baselines ?? []), baseline] };\n s = closeIteration(s, phaseId, \"completed\", now);\n return appendEvent(\n s,\n \"phase.baselined\",\n approvedBy[approvedBy.length - 1] ?? \"system\",\n { phase: phaseId, version: baseline.version, approvedBy, items: items.map((i) => i.id) },\n now,\n );\n}\n\nexport interface ReopenResult {\n state: WorkflowState;\n reopened: string[];\n suspended: string | null;\n}\n\n/** Change-control approval: reopen the listed baselined phases; a later open phase is suspended until they are re-baselined. */\nexport function reopenPhases(state: WorkflowState, ids: string[], now: string): ReopenResult {\n const reopened: string[] = [];\n for (const id of ids) {\n const p = getPhase(state, id);\n if (p.status === \"pending\")\n fail(\n \"invalid-input\",\n `phase \"${id}\" was never baselined; there is nothing to reopen`,\n \"remove it from impactAnalysis.reopen\",\n );\n if (p.status === \"baselined\" && !reopened.includes(id)) reopened.push(id);\n }\n let phases = phasesOf(state).map((p) =>\n reopened.includes(p.id) ? { ...p, status: \"reopened\" as const } : p,\n );\n let suspended: string | null = null;\n let s = state;\n if (reopened.length) {\n const earliest = Math.min(...reopened.map((id) => phaseIndex(state, id)));\n const open = phases.find((p, i) => p.status === \"open\" && i > earliest);\n if (open) {\n suspended = open.id;\n phases = phases.map((p) => (p.id === open.id ? { ...p, status: \"reopened\" as const } : p));\n s = closeIteration(s, open.id, \"cancelled\", now);\n }\n }\n return { state: withPhases(s, phases), reopened, suspended };\n}\n","import { getItem, moveItem } from \"../items.ts\";\nimport { appendEvent } from \"../state.ts\";\nimport type { WorkflowState } from \"../types.ts\";\nimport { reopenPhases } from \"./baseline.ts\";\nimport { DONE } from \"./phases.ts\";\n\nexport function approveChange(\n state: WorkflowState,\n changeId: string,\n by: string,\n note: string,\n now: string,\n): WorkflowState {\n const cr = getItem(state, changeId);\n const ia = cr.impactAnalysis;\n const r = reopenPhases(state, ia?.reopen ?? [], now);\n let s = moveItem(r.state, changeId, { stage: DONE, status: \"done\" }, by, now);\n for (const phase of r.reopened)\n s = appendEvent(s, \"phase.reopened\", by, { phase, change: changeId }, now);\n if (r.suspended !== null)\n s = appendEvent(s, \"phase.suspended\", by, { phase: r.suspended, change: changeId }, now);\n return appendEvent(\n s,\n \"change.decided\",\n by,\n {\n change: changeId,\n decision: \"approve\",\n by,\n note,\n reopened: r.reopened,\n suspended: r.suspended,\n weight: ia?.weight ?? 0,\n affects: cr.affects ?? [],\n },\n now,\n );\n}\n\nexport function rejectChange(\n state: WorkflowState,\n changeId: string,\n by: string,\n note: string,\n now: string,\n): WorkflowState {\n const cr = getItem(state, changeId);\n const s = moveItem(state, changeId, { status: \"dropped\" }, by, now);\n return appendEvent(\n s,\n \"change.decided\",\n by,\n {\n change: changeId,\n decision: \"reject\",\n by,\n note,\n reopened: [],\n suspended: null,\n weight: 0,\n affects: cr.affects ?? [],\n },\n now,\n );\n}\n","import { fail } from \"../errors.ts\";\nimport { applyAction } from \"../methodology.ts\";\nimport { requireCap } from \"../roles.ts\";\nimport { appendEvent, nowOf } from \"../state.ts\";\nimport type { Ceremony, Lesson, LessonChange, Methodology, WorkflowState } from \"../types.ts\";\nimport { wantPhase } from \"./ceremonies.ts\";\n\nconst LESSON_SCOPES: readonly string[] = [\"policy\", \"skill\", \"memory\", \"spec\", \"review\"];\nconst isObj = (x: unknown): x is Record<string, unknown> =>\n typeof x === \"object\" && x !== null && !Array.isArray(x);\n\ntype NewLesson = { text: string; scope: Lesson[\"scope\"]; suggestedChange?: LessonChange };\ntype Adopt = { id: string; suggestedChange?: LessonChange };\n\nfunction validLessons(x: unknown): x is NewLesson[] {\n return (\n Array.isArray(x) &&\n x.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}\n\nfunction assertRefs(state: WorkflowState, adopt: Adopt[], dismiss: string[]): void {\n const refs = [...adopt.map((a) => a.id), ...dismiss];\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}\n\n/** Lessons, adoptions and agreements; never touches items, config or baselines. */\nexport function phaseRetrospective(methodology: () => Methodology): Ceremony {\n return (state, input) => {\n requireCap(state, input.by, \"facilitate\");\n const phase =\n input[\"phase\"] === undefined ? undefined : wantPhase(state, input, \"phaseRetrospective\");\n const newLessons = input[\"lessons\"] ?? [];\n if (!validLessons(newLessons))\n fail(\n \"invalid-input\",\n \"phaseRetrospective.lessons entries need a text and a scope\",\n `scope is one of: ${LESSON_SCOPES.join(\", \")}`,\n );\n const adopt = (input[\"adopt\"] ?? []) as Adopt[];\n const dismiss = (input[\"dismiss\"] ?? []) as string[];\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 \"phaseRetrospective.adopt must be [{ id, suggestedChange? }] and dismiss a string[]\",\n 'e.g. { \"adopt\": [{ \"id\": \"L1\" }], \"dismiss\": [\"L2\"] }',\n );\n assertRefs(state, adopt, dismiss);\n return applyAction(\n state,\n methodology(),\n { type: \"ceremony.phaseRetrospective\", by: input.by, payload: input },\n (s0) => {\n let s = s0;\n const now = nowOf(input.now);\n const agreements: string[] = [];\n const agree = (ch: LessonChange | undefined) => {\n if (!ch || ch.kind !== \"agreement\") return;\n if (!s.agreements.includes(ch.text)) s = { ...s, agreements: [...s.agreements, ch.text] };\n agreements.push(ch.text);\n };\n const created: string[] = [];\n for (const l of newLessons) {\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: input.by,\n };\n if (l.suggestedChange) lesson.suggestedChange = l.suggestedChange;\n s = { ...s, lessons: [...s.lessons, lesson] };\n created.push(id);\n agree(l.suggestedChange);\n }\n const adopted: string[] = [];\n for (const a of 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 agree(a.suggestedChange ?? s.lessons.find((x) => x.id === a.id)?.suggestedChange);\n }\n for (const d of dismiss)\n s = {\n ...s,\n lessons: s.lessons.map((x) =>\n x.id === d ? { ...x, status: \"dismissed\" as const } : x,\n ),\n };\n return appendEvent(\n s,\n \"phase.retrospective\",\n input.by,\n { phase: phase?.id ?? null, lessons: created, adopted, dismissed: dismiss, agreements },\n now,\n );\n },\n );\n };\n}\n","import { timSort } from \"exsorted\";\nimport type { WorkItem, WorkflowState } from \"../types.ts\";\nimport { configOf } from \"./config.ts\";\nimport { itemsInPhase, phasesOf } from \"./phases.ts\";\n\nexport interface TraceRow {\n item: string;\n /** to-phase id → ids of linked items in that phase */\n links: Record<string, string[]>;\n}\nexport interface TraceabilityMatrix {\n from: string;\n to: string[];\n rows: TraceRow[];\n missing: Array<{ item: string; phases: string[] }>;\n coverage: { traced: number; total: number };\n}\n\nconst byId = (a: WorkItem, b: WorkItem) => (a.id < b.id ? -1 : a.id > b.id ? 1 : 0);\nconst artefacts = (state: WorkflowState, phase: string) =>\n timSort(\n itemsInPhase(state, phase).filter((i) => i.type !== \"question\"),\n byId,\n );\n\n/** A link exists when either side's `traces` names the other. */\nconst linked = (a: WorkItem, b: WorkItem) =>\n (a.traces ?? []).includes(b.id) || (b.traces ?? []).includes(a.id);\n\nexport function traceabilityMatrix(state: WorkflowState): TraceabilityMatrix {\n const cfg = configOf(state).traceability;\n const order = phasesOf(state).map((p) => p.id);\n const to = cfg.to.filter((t) => order.includes(t));\n const rows: TraceRow[] = artefacts(state, cfg.from).map((f) => {\n const links: Record<string, string[]> = {};\n for (const t of to)\n links[t] = artefacts(state, t)\n .filter((x) => linked(f, x))\n .map((x) => x.id);\n return { item: f.id, links };\n });\n const missing = rows\n .map((r) => ({ item: r.item, phases: to.filter((t) => r.links[t]!.length === 0) }))\n .filter((m) => m.phases.length > 0);\n return {\n from: cfg.from,\n to,\n rows,\n missing,\n coverage: { traced: rows.length - missing.length, total: rows.length },\n };\n}\n\n/** Ids of `from` items with no link into `toPhase`. */\nexport function missingTraces(state: WorkflowState, toPhase: string): string[] {\n return traceabilityMatrix(state)\n .rows.filter((r) => (r.links[toPhase] ?? []).length === 0)\n .map((r) => r.item);\n}\n","import { ZERO_SPENT } from \"../budget.ts\";\nimport { fail } from \"../errors.ts\";\nimport { raisePending } from \"../gates.ts\";\nimport { applyAction } from \"../methodology.ts\";\nimport { getItem } from \"../items.ts\";\nimport { approverIds, canDo, requireCap, rolesWith } from \"../roles.ts\";\nimport { appendEvent, nowOf } from \"../state.ts\";\nimport type {\n Capability,\n Ceremony,\n CeremonyInput,\n Methodology,\n PendingHuman,\n Phase,\n WorkflowState,\n} from \"../types.ts\";\nimport { baselinePhase } from \"./baseline.ts\";\nimport { approveChange, rejectChange } from \"./change.ts\";\nimport { configOf } from \"./config.ts\";\nimport { getPhase, itemsInPhase, lastToPhase, phasesOf, withPhases } from \"./phases.ts\";\nimport { phaseRetrospective } from \"./retro.ts\";\nimport { traceabilityMatrix } from \"./traceability.ts\";\n\nconst isObj = (x: unknown): x is Record<string, unknown> =>\n typeof x === \"object\" && x !== null && !Array.isArray(x);\n\n/** input.phase as an existing phase. */\nexport function wantPhase(state: WorkflowState, input: CeremonyInput, ceremony: string): Phase {\n const id = input[\"phase\"];\n if (typeof id !== \"string\" || id.trim() === \"\")\n fail(\n \"invalid-input\",\n `${ceremony} needs phase: string`,\n `pass one of: ${phasesOf(state)\n .map((p) => p.id)\n .join(\", \")}`,\n );\n return getPhase(state, id);\n}\n\n/** Append a deliverable to the phase and record it. */\nfunction recordDeliverable(\n state: WorkflowState,\n phaseId: string,\n kind: string,\n ref: string,\n by: string,\n now: string,\n): WorkflowState {\n const s = withPhases(\n state,\n phasesOf(state).map((p) =>\n p.id === phaseId\n ? { ...p, produced: [...(p.produced ?? []), { kind, ref, by, at: now }] }\n : p,\n ),\n );\n return appendEvent(s, \"phase.deliverable\", by, { phase: phaseId, kind, ref }, now);\n}\n\nexport { approveChange, rejectChange } from \"./change.ts\";\n\nexport function waterfallCeremonies(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 kickoff: Ceremony = (state, input) => {\n requireCap(state, input.by, \"facilitate\");\n const phase = wantPhase(state, input, \"kickoff\");\n return act(state, \"ceremony.kickoff\", input, (s, now) => {\n const version =\n s.events.filter(\n (e) => e.type === \"phase.opened\" && (e.payload as { phase: string }).phase === phase.id,\n ).length + 1;\n const items = itemsInPhase(s, phase.id)\n .filter((i) => i.status !== \"done\")\n .map((i) => i.id);\n s = withPhases(\n s,\n phasesOf(s).map((p) => (p.id === phase.id ? { ...p, status: \"open\" as const } : p)),\n );\n const budget = phase.budget ?? {};\n s = {\n ...s,\n iterations: [\n ...s.iterations,\n {\n id: `${phase.id}#${version}`,\n goal: phase.name,\n budget,\n spent: ZERO_SPENT,\n startedAt: now,\n committed: items,\n carryover: [],\n },\n ],\n };\n return appendEvent(\n s,\n \"phase.opened\",\n input.by,\n { phase: phase.id, version, items, budget },\n now,\n );\n });\n };\n\n const gateReview: Ceremony = (state, input) => {\n const phase = wantPhase(state, input, \"gateReview\");\n if (phase.status !== \"open\")\n fail(\n \"invalid-transition\",\n `phase \"${phase.id}\" is ${phase.status}, not open`,\n phase.status === \"baselined\"\n ? \"it is already baselined; a change-request reopens it\"\n : `kickoff \"${phase.id}\" first`,\n );\n const gate = phase.gate;\n const approvers = approverIds(state, gate.id, \"approve-gate\");\n if (input.by !== \"human\" && !approvers.includes(input.by))\n fail(\n \"gate-unmet\",\n `\"${input.by}\" may not review gate \"${gate.id}\"`,\n `review as one of: human${approvers.map((r) => `, ${r}`).join(\"\")}`,\n { rule: \"gate\" },\n );\n const already = state.pending.find(\n (p) => p.kind === \"gate\" && p.item === undefined && p.gate === gate.id,\n );\n if (already)\n fail(\n \"no-op\",\n `gate \"${gate.id}\" is already awaiting a decision (${already.id})`,\n `decide ${already.id} approve|reject`,\n );\n const given = input[\"deliverables\"] ?? [];\n if (\n !Array.isArray(given) ||\n !given.every(\n (d) =>\n isObj(d) &&\n typeof d[\"kind\"] === \"string\" &&\n d[\"kind\"].trim() !== \"\" &&\n typeof d[\"ref\"] === \"string\",\n )\n )\n fail(\n \"invalid-input\",\n \"gateReview.deliverables must be [{ kind, ref }]\",\n 'e.g. { \"deliverables\": [{ \"kind\": \"srs\", \"ref\": \"docs/srs.md\" }] }',\n );\n const deliverables = given as Array<{ kind: string; ref: string }>;\n return act(state, \"ceremony.gateReview\", input, (s, now) => {\n for (const d of deliverables)\n s = recordDeliverable(s, phase.id, d.kind, d.ref, input.by, now);\n if (configOf(s).traceability.to.includes(phase.id)) {\n const m = traceabilityMatrix(s);\n s = appendEvent(\n s,\n \"traceability.computed\",\n input.by,\n {\n phase: phase.id,\n from: m.from,\n to: m.to,\n coverage: m.coverage,\n missing: m.missing,\n rows: m.rows,\n },\n now,\n );\n if (phase.id === lastToPhase(s) && m.missing.length === 0)\n s = recordDeliverable(\n s,\n phase.id,\n \"traceability-matrix\",\n `traceability.computed#${s.events[s.events.length - 1]!.seq}`,\n input.by,\n now,\n );\n }\n if (gate.requires.includes(\"human\") && input.by !== \"human\") {\n s = raisePending(\n s,\n {\n kind: \"gate\",\n gate: gate.id,\n question: `Approve gate \"${gate.id}\" and baseline phase \"${phase.name}\"?`,\n },\n now,\n );\n const pending = s.pending[s.pending.length - 1]!.id;\n return appendEvent(\n s,\n \"phase.gate-pending\",\n input.by,\n { phase: phase.id, gate: gate.id, by: input.by, pending },\n now,\n );\n }\n return baselinePhase(s, phase.id, [input.by], now);\n });\n };\n\n const changeControlBoard: Ceremony = (state, input) => {\n requireCap(state, input.by, \"control-change\");\n const id = input[\"change\"];\n if (typeof id !== \"string\" || id.trim() === \"\")\n fail(\n \"invalid-input\",\n \"changeControlBoard needs change: string (a change-request id)\",\n 'e.g. { \"change\": \"CR-1\", \"decision\": \"approve\", \"note\": \"why\" }',\n );\n const cr = getItem(state, id);\n if (cr.type !== \"change-request\")\n fail(\n \"invalid-input\",\n `item \"${id}\" is a ${cr.type}, not a change-request`,\n \"only change-request items go through the board\",\n { items: [id] },\n );\n if (cr.status === \"done\" || cr.status === \"dropped\")\n fail(\n \"invalid-transition\",\n `change \"${id}\" is already ${cr.status === \"done\" ? \"approved\" : \"rejected\"}`,\n \"raise a new change-request\",\n { items: [id] },\n );\n if (cr.status === \"awaiting_human\") {\n const p = state.pending.find((x) => x.item === id);\n fail(\n \"no-op\",\n `change \"${id}\" is awaiting the human decision${p ? ` (${p.id})` : \"\"}`,\n `decide ${p?.id ?? \"<pending id>\"} approve|reject`,\n { items: [id] },\n );\n }\n const decision = input[\"decision\"];\n if (decision !== \"approve\" && decision !== \"reject\")\n fail(\n \"invalid-input\",\n 'changeControlBoard.decision must be \"approve\" or \"reject\"',\n \"state the board's decision\",\n );\n const note = typeof input[\"note\"] === \"string\" ? input[\"note\"] : \"\";\n const approvers = configOf(state).changeControl.approvers;\n for (const q of approvers) {\n if (\n q === \"human\" ||\n input.by === \"human\" ||\n canDo(state, input.by, q.capability as Capability)\n )\n continue;\n fail(\n \"gate-unmet\",\n `\"${input.by}\" lacks capability \"${q.capability}\" required by change control`,\n `decide as one of: human${rolesWith(state, q.capability as Capability)\n .map((r) => `, ${r.id}`)\n .join(\"\")}`,\n { rule: \"change-control\", items: [id] },\n );\n }\n const needsHuman = approvers.includes(\"human\") && input.by !== \"human\";\n return act(state, \"ceremony.changeControlBoard\", input, (s, now) => {\n if (needsHuman) {\n s = raisePending(\n s,\n {\n kind: \"decision\",\n item: id,\n question: `Change \"${id}\" (${cr.title}): the board (${input.by}) recommends ${decision}${note ? `: ${note}` : \"\"}. Approve or reject the change?`,\n },\n now,\n );\n const pending = s.pending[s.pending.length - 1]!.id;\n return appendEvent(\n s,\n \"change.recommended\",\n input.by,\n { change: id, decision, note, pending },\n now,\n );\n }\n return decision === \"approve\"\n ? approveChange(s, id, input.by, note, now)\n : rejectChange(s, id, input.by, note, now);\n });\n };\n\n return {\n kickoff,\n gateReview,\n changeControlBoard,\n phaseRetrospective: phaseRetrospective(methodology),\n };\n}\n\n/** decide() hook: a phase gate's human decision baselines the phase or records the failure. */\nexport function waterfallAfterDecide(\n state: WorkflowState,\n entry: PendingHuman,\n decision: \"approve\" | \"reject\",\n by: string,\n note: string,\n now: string,\n): WorkflowState {\n if (entry.kind === \"gate\" && entry.item === undefined && entry.gate !== undefined) {\n const phase = phasesOf(state).find((p) => p.gate.id === entry.gate);\n if (!phase) return state;\n // core decide() checks the decider only for item gates; a phase gate pending exists because the gate requires a human\n if (by !== \"human\")\n fail(\n \"gate-unmet\",\n `\"${by}\" may not decide phase gate \"${entry.gate}\" (${entry.id}); it awaits a human`,\n `decide ${entry.id} as human`,\n { rule: \"gate\" },\n );\n let reviewer: string | undefined;\n for (let i = state.events.length - 1; i >= 0; i--) {\n const e = state.events[i]!;\n if (\n e.type === \"phase.gate-pending\" &&\n (e.payload as { pending: string }).pending === entry.id\n ) {\n reviewer = e.by;\n break;\n }\n }\n const approvedBy = reviewer !== undefined && reviewer !== by ? [reviewer, by] : [by];\n if (decision === \"approve\") return baselinePhase(state, phase.id, approvedBy, now);\n return appendEvent(\n state,\n \"phase.gate-failed\",\n by,\n { phase: phase.id, gate: entry.gate, note },\n now,\n );\n }\n if (\n entry.kind === \"decision\" &&\n entry.item !== undefined &&\n Object.hasOwn(state.items, entry.item)\n ) {\n const item = state.items[entry.item]!;\n if (item.type !== \"change-request\") return state;\n if (by !== \"human\")\n fail(\n \"gate-unmet\",\n `\"${by}\" may not decide change \"${item.id}\" (${entry.id}); change control awaits a human`,\n `decide ${entry.id} as human`,\n { rule: \"change-control\", items: [item.id] },\n );\n return decision === \"approve\"\n ? approveChange(state, item.id, by, note, now)\n : rejectChange(state, item.id, by, note, now);\n }\n return state;\n}\n","import type { WorkflowState } from \"../types.ts\";\nimport { configOf } from \"./config.ts\";\n\nexport interface WaterfallMetrics {\n phaseCompletion: Record<string, number>;\n budgetPlanned: Record<string, number>;\n budgetSpent: Record<string, number>;\n scheduleVariance: Record<string, number>;\n requirementCoverage: number;\n requirementsTraced: number;\n requirementsTotal: number;\n defectsPerPhase: Record<string, number>;\n changeRequests: number;\n changesApproved: number;\n changesRejected: number;\n changeApprovalRate: number;\n reworkWeight: number;\n phasesReopened: number;\n}\n\ntype Added = { id: string; type: string; phase: string | null; parent: string | null };\n\n/** Phase metrics replayed from events alone (membership from item.added, spend from item.completed). */\nexport function waterfallMetrics(state: WorkflowState): WaterfallMetrics {\n const phases = configOf(state).phases.map((p) => p.id);\n const zero = () => Object.fromEntries(phases.map((p) => [p, 0])) as Record<string, number>;\n const total = zero();\n const done = zero();\n const planned = zero();\n const spent = zero();\n const defects = zero();\n const phaseOf = new Map<string, string | undefined>();\n const typeOf = new Map<string, string>();\n const status = new Map<string, string>();\n let traced = 0;\n let reqTotal = 0;\n let changeRequests = 0;\n let approved = 0;\n let rejected = 0;\n let reworkWeight = 0;\n let phasesReopened = 0;\n const counted = (id: string) => {\n const t = typeOf.get(id);\n const p = phaseOf.get(id);\n return t !== \"question\" && t !== \"change-request\" && p !== undefined && p in total;\n };\n for (const ev of state.events) {\n const p = (ev.payload ?? {}) as Record<string, unknown>;\n switch (ev.type) {\n case \"item.added\": {\n const a = p as Added;\n const phase = a.phase ?? (a.parent !== null ? phaseOf.get(a.parent) : undefined);\n phaseOf.set(a.id, phase);\n typeOf.set(a.id, a.type);\n status.set(a.id, \"todo\");\n if (a.type === \"change-request\") changeRequests += 1;\n if (counted(a.id)) {\n total[phase!]! += 1;\n if (a.type === \"bug\") defects[phase!]! += 1;\n }\n break;\n }\n case \"item.transition\": {\n const id = p[\"id\"] as string;\n const to = (p[\"to\"] as { status: string }).status;\n const was = status.get(id);\n status.set(id, to);\n if (!counted(id)) break;\n const phase = phaseOf.get(id)!;\n if (to === \"done\" && was !== \"done\") done[phase]! += 1;\n if (to === \"dropped\") {\n total[phase]! -= 1;\n if (was === \"done\") done[phase]! -= 1;\n }\n break;\n }\n case \"item.completed\": {\n const phase = phaseOf.get(p[\"id\"] as string);\n if (phase !== undefined && phase in spent) spent[phase]! += (p[\"tokens\"] as number) ?? 0;\n break;\n }\n case \"phase.opened\": {\n const phase = p[\"phase\"] as string;\n if (phase in planned)\n planned[phase] = ((p[\"budget\"] as { tokens?: number }) ?? {}).tokens ?? 0;\n break;\n }\n case \"traceability.computed\": {\n const c = p[\"coverage\"] as { traced: number; total: number };\n traced = c.traced;\n reqTotal = c.total;\n break;\n }\n case \"change.decided\": {\n if (p[\"decision\"] === \"approve\") {\n approved += 1;\n reworkWeight += (p[\"weight\"] as number) ?? 0;\n phasesReopened += ((p[\"reopened\"] as string[]) ?? []).length;\n } else rejected += 1;\n break;\n }\n default:\n break;\n }\n }\n const completion = zero();\n const variance = zero();\n for (const ph of phases) {\n const n = total[ph] ?? 0;\n completion[ph] = n === 0 ? 0 : ((done[ph] ?? 0) / n) * 100;\n variance[ph] = spent[ph]! - planned[ph]!;\n }\n const decided = approved + rejected;\n return {\n phaseCompletion: completion,\n budgetPlanned: planned,\n budgetSpent: spent,\n scheduleVariance: variance,\n requirementCoverage: reqTotal === 0 ? 0 : traced / reqTotal,\n requirementsTraced: traced,\n requirementsTotal: reqTotal,\n defectsPerPhase: defects,\n changeRequests,\n changesApproved: approved,\n changesRejected: rejected,\n changeApprovalRate: decided === 0 ? 0 : approved / decided,\n reworkWeight,\n phasesReopened,\n };\n}\n","import type { Role } from \"../types.ts\";\nimport { CHANGE_GATE, type WaterfallConfig } from \"./config.ts\";\n\n/** Order matters: the first role with \"deliver\" is the fallback deliverer for phases without deliverBy. */\nexport function waterfallRoles(config: WaterfallConfig): Role[] {\n const gates = config.phases.map((p) => p.gate.id);\n return [\n {\n id: \"project-manager\",\n name: \"Project Manager\",\n modelTier: \"large\",\n capabilities: [\"facilitate\", \"control-change\", \"approve-gate\", \"escalate\"],\n canApprove: [...gates, CHANGE_GATE],\n inputs: [\"phase-plan\", \"deliverables\", \"change-requests\"],\n outputs: [\"gate-decisions\", \"baselines\", \"change-decisions\"],\n do_not: [\n \"do not implement items yourself\",\n \"do not reopen a phase without an approved change-request\",\n ],\n },\n {\n id: \"developer\",\n name: \"Developer\",\n modelTier: \"small\",\n capabilities: [\"deliver\"],\n canApprove: [],\n inputs: [\"design-doc\", \"interface-spec\", \"brief\"],\n outputs: [\"code\", \"code-baseline\", \"test-output\"],\n do_not: [\n \"do not change requirements or designs; raise a change-request\",\n \"do not approve your own work\",\n ],\n },\n {\n id: \"business-analyst\",\n name: \"Business Analyst\",\n modelTier: \"medium\",\n capabilities: [\"define-acceptance\", \"deliver\"],\n canApprove: [],\n inputs: [\"stakeholder-needs\"],\n outputs: [\"srs\", \"acceptance-criteria\"],\n do_not: [\n \"do not design or implement\",\n \"do not edit a baselined requirement; raise a change-request\",\n ],\n },\n {\n id: \"architect\",\n name: \"Architect\",\n modelTier: \"medium\",\n capabilities: [\"deliver\"],\n canApprove: [],\n inputs: [\"srs\"],\n outputs: [\"design-doc\", \"interface-spec\"],\n do_not: [\"do not change requirements; raise a change-request\", \"do not implement\"],\n },\n {\n id: \"qa\",\n name: \"QA\",\n modelTier: \"small\",\n capabilities: [\"verify\", \"review\"],\n canApprove: [],\n inputs: [\"srs\", \"design-doc\", \"code-baseline\"],\n outputs: [\"test-report\", \"review-notes\"],\n do_not: [\"do not fix defects yourself; raise bugs\", \"do not approve phase gates\"],\n },\n {\n id: \"release-manager\",\n name: \"Release Manager\",\n modelTier: \"small\",\n capabilities: [\"deliver\"],\n canApprove: [],\n inputs: [\"code-baseline\", \"test-report\"],\n outputs: [\"release-notes\", \"deployment-record\"],\n do_not: [\"do not deploy an unbaselined verification phase\"],\n },\n ];\n}\n","import { authorOf } from \"../gates.ts\";\nimport { approverIds, rolesWith } from \"../roles.ts\";\nimport type {\n Action,\n ImpactAnalysis,\n NewItem,\n Phase,\n Rule,\n Violation,\n WorkflowState,\n} from \"../types.ts\";\nimport { configOf } from \"./config.ts\";\nimport {\n itemsInPhase,\n lastToPhase,\n missingDeliverables,\n openPhase,\n phaseOf,\n phasesOf,\n} from \"./phases.ts\";\nimport { missingTraces } from \"./traceability.ts\";\n\nconst v = (rule: string, message: string, fix: string, item?: string): Violation =>\n item\n ? { rule, severity: \"error\", item, message, fix }\n : { rule, severity: \"error\", message, fix };\nconst payloadOf = (a: Action): Record<string, unknown> =>\n (a.payload ?? {}) as Record<string, unknown>;\nconst isObj = (x: unknown): x is Record<string, unknown> =>\n typeof x === \"object\" && x !== null && !Array.isArray(x);\nconst phaseArg = (a: Action): string | undefined => {\n const p = payloadOf(a)[\"phase\"];\n return typeof p === \"string\" ? p : undefined;\n};\nconst phaseById = (s: WorkflowState, id: string): Phase | undefined =>\n phasesOf(s).find((p) => p.id === id);\nconst phaseIds = (s: WorkflowState) =>\n phasesOf(s)\n .map((p) => p.id)\n .join(\", \");\nconst itemById = (s: WorkflowState, id: unknown) =>\n typeof id === \"string\" && Object.hasOwn(s.items, id) ? s.items[id] : undefined;\n\n/** Phase a NewItem would land in: its own, else its parent's. */\nfunction phaseOfNew(s: WorkflowState, item: NewItem): string | undefined {\n if (item.phase !== undefined) return item.phase;\n const parent = itemById(s, item.parent);\n return parent ? phaseOf(s, parent) : undefined;\n}\nconst governed = (item: NewItem) => item.type !== \"change-request\" && item.type !== \"question\";\n\nconst frozenFix = (item: string, phase: string) =>\n `raise a change-request: addItem({ type: \"change-request\", affects: [\"${item}\"], impactAnalysis: { summary, reopen: [\"${phase}\"], weight } }) and decide it in changeControlBoard`;\n\nfunction changeOf(s: WorkflowState, a: Action) {\n const item = itemById(s, payloadOf(a)[\"change\"]);\n return item && item.type === \"change-request\" ? item : undefined;\n}\n\nexport function waterfallRules(): Rule[] {\n const sequential: Rule = {\n id: \"phase-sequential\",\n severity: \"error\",\n check(s, a) {\n const out: Violation[] = [];\n if (a.type === \"ceremony.kickoff\") {\n const id = phaseArg(a);\n const p = id === undefined ? undefined : phaseById(s, id);\n if (!p) return [];\n if (p.status === \"open\")\n out.push(\n v(\n \"phase-sequential\",\n `phase \"${p.id}\" is already open`,\n `gateReview \"${p.id}\" when its work is done`,\n ),\n );\n if (p.status === \"baselined\")\n out.push(\n v(\n \"phase-sequential\",\n `phase \"${p.id}\" is baselined`,\n \"only an approved change-request reopens a baselined phase\",\n ),\n );\n const open = openPhase(s);\n if (open && open.id !== p.id)\n out.push(\n v(\n \"phase-sequential\",\n `phase \"${open.id}\" is still open`,\n `pass its gate (gateReview \"${open.id}\") before opening \"${p.id}\"`,\n ),\n );\n } else if (a.type === \"item.add\") {\n const item = payloadOf(a)[\"item\"] as NewItem | undefined;\n if (!isObj(item) || !governed(item)) return [];\n const phase = phaseOfNew(s, item);\n if (phase === undefined)\n out.push(\n v(\n \"phase-sequential\",\n `item \"${item.id}\" belongs to no phase`,\n `set phase to one of: ${phaseIds(s)}`,\n item.id,\n ),\n );\n else if (!phaseById(s, phase))\n out.push(\n v(\n \"phase-sequential\",\n `item \"${item.id}\" names unknown phase \"${phase}\"`,\n `phases are: ${phaseIds(s)}`,\n item.id,\n ),\n );\n } else if (a.type === \"item.edit\") {\n const id = payloadOf(a)[\"id\"];\n const patch = payloadOf(a)[\"patch\"];\n const item = itemById(s, id);\n if (!item || !isObj(patch) || patch[\"phase\"] === undefined || patch[\"phase\"] === item.phase)\n return [];\n out.push(\n v(\n \"phase-sequential\",\n `item \"${item.id}\" cannot move from phase \"${item.phase ?? \"(none)\"}\" to \"${String(patch[\"phase\"])}\"`,\n `drop \"${item.id}\" and add a new item in phase \"${String(patch[\"phase\"])}\"`,\n item.id,\n ),\n );\n }\n return out;\n },\n };\n\n const gateBefore: Rule = {\n id: \"gate-before-next-phase\",\n severity: \"error\",\n check(s, a) {\n if (a.type !== \"ceremony.kickoff\") return [];\n const id = phaseArg(a);\n const phases = phasesOf(s);\n const idx = id === undefined ? -1 : phases.findIndex((p) => p.id === id);\n if (idx < 0) return [];\n const earlier = phases\n .slice(0, idx)\n .filter((p) => p.status !== \"baselined\")\n .map((p) => p.id);\n if (earlier.length === 0) return [];\n return [\n v(\n \"gate-before-next-phase\",\n `phase(s) ${earlier.join(\", \")} before \"${id}\" are not baselined`,\n `kickoff and gateReview them in order, starting with \"${earlier[0]}\"`,\n ),\n ];\n },\n };\n\n const immutable: Rule = {\n id: \"baseline-immutable\",\n severity: \"error\",\n check(s, a) {\n const version = (phase: string) =>\n (s.baselines ?? []).filter((b) => b.phase === phase).length || 1;\n if (a.type === \"item.edit\") {\n const item = itemById(s, payloadOf(a)[\"id\"]);\n if (!item) return [];\n const phase = phaseOf(s, item);\n if (phase === undefined || phaseById(s, phase)?.status !== \"baselined\") return [];\n return [\n v(\n \"baseline-immutable\",\n `item \"${item.id}\" is frozen: phase \"${phase}\" is baselined (v${version(phase)})`,\n frozenFix(item.id, phase),\n item.id,\n ),\n ];\n }\n if (a.type === \"item.add\") {\n const item = payloadOf(a)[\"item\"] as NewItem | undefined;\n if (!isObj(item) || !governed(item)) return [];\n const phase = phaseOfNew(s, item);\n if (phase === undefined || phaseById(s, phase)?.status !== \"baselined\") return [];\n return [\n v(\n \"baseline-immutable\",\n `cannot add \"${item.id}\" to baselined phase \"${phase}\" (v${version(phase)})`,\n frozenFix(item.id, phase),\n item.id,\n ),\n ];\n }\n return [];\n },\n };\n\n const impact: Rule = {\n id: \"change-needs-impact-analysis\",\n severity: \"error\",\n check(s, a) {\n if (a.type !== \"ceremony.changeControlBoard\") return [];\n const cr = changeOf(s, a);\n if (!cr) return [];\n const cfg = configOf(s).changeControl;\n const ia = cr.impactAnalysis as ImpactAnalysis | undefined;\n const fix = `editItem(\"${cr.id}\", { impactAnalysis: { summary: \"what changes and why\", reopen: [\"<phase>\"], weight: <points> } })`;\n if (ia === undefined) {\n return cfg.requiresImpactAnalysis\n ? [\n v(\n \"change-needs-impact-analysis\",\n `change \"${cr.id}\" has no impact analysis`,\n fix,\n cr.id,\n ),\n ]\n : [];\n }\n const out: Violation[] = [];\n if (!isObj(ia) || typeof ia.summary !== \"string\" || ia.summary.trim() === \"\")\n out.push(\n v(\n \"change-needs-impact-analysis\",\n `change \"${cr.id}\" impactAnalysis.summary is empty`,\n fix,\n cr.id,\n ),\n );\n if (!Array.isArray(ia.reopen) || !ia.reopen.every((x) => typeof x === \"string\"))\n out.push(\n v(\n \"change-needs-impact-analysis\",\n `change \"${cr.id}\" impactAnalysis.reopen must be a string[] of phase ids`,\n fix,\n cr.id,\n ),\n );\n if (typeof ia.weight !== \"number\" || !Number.isFinite(ia.weight) || ia.weight < 0)\n out.push(\n v(\n \"change-needs-impact-analysis\",\n `change \"${cr.id}\" impactAnalysis.weight must be a non-negative number`,\n fix,\n cr.id,\n ),\n );\n if (out.length) return out;\n const approve = payloadOf(a)[\"decision\"] === \"approve\";\n for (const id of ia.reopen) {\n const p = phaseById(s, id);\n if (!p)\n out.push(\n v(\n \"change-needs-impact-analysis\",\n `change \"${cr.id}\" impactAnalysis.reopen names unknown phase \"${id}\"`,\n `phases are: ${phaseIds(s)}`,\n cr.id,\n ),\n );\n else if (approve && p.status === \"pending\")\n out.push(\n v(\n \"change-needs-impact-analysis\",\n `phase \"${id}\" was never baselined; it cannot be reopened`,\n `remove \"${id}\" from impactAnalysis.reopen`,\n cr.id,\n ),\n );\n }\n return out;\n },\n };\n\n const traced: Rule = {\n id: \"requirement-traced\",\n severity: \"error\",\n check(s, a) {\n if (a.type !== \"ceremony.gateReview\") return [];\n const id = phaseArg(a);\n const cfg = configOf(s).traceability;\n if (id === undefined || !cfg.to.includes(id) || !phaseById(s, id)) return [];\n return missingTraces(s, id).map((item) =>\n v(\n \"requirement-traced\",\n `item \"${item}\" of phase \"${cfg.from}\" has no trace into \"${id}\"`,\n `editItem a \"${id}\" item with traces: [\"${item}\"] (or editItem(\"${item}\", { traces: [...] }) while \"${cfg.from}\" is not baselined)`,\n item,\n ),\n );\n },\n };\n\n const deliverables: Rule = {\n id: \"deliverables-present\",\n severity: \"error\",\n check(s, a) {\n if (a.type !== \"ceremony.gateReview\") return [];\n const id = phaseArg(a);\n const p = id === undefined ? undefined : phaseById(s, id);\n if (!p) return [];\n const out: Violation[] = [];\n const open = itemsInPhase(s, p.id)\n .filter((i) => i.status !== \"done\")\n .map((i) => i.id);\n if (open.length)\n out.push(\n v(\n \"deliverables-present\",\n `${open.length} item(s) in phase \"${p.id}\" are not done: ${open.join(\", \")}`,\n \"finish them (next/complete) or drop them before the gate\",\n ),\n );\n const given = payloadOf(a)[\"deliverables\"];\n const extra = Array.isArray(given)\n ? given\n .filter((d) => isObj(d) && typeof d[\"kind\"] === \"string\")\n .map((d) => (d as { kind: string }).kind)\n : [];\n if (p.id === lastToPhase(s)) extra.push(\"traceability-matrix\");\n for (const kind of missingDeliverables(s, p, extra))\n out.push(\n v(\n \"deliverables-present\",\n `phase \"${p.id}\" has no deliverable \"${kind}\"`,\n `pass deliverables: [{ \"kind\": \"${kind}\", \"ref\": \"<where it lives>\" }] to gateReview, or attach evidence of kind \"${kind}\" on an item of the phase`,\n ),\n );\n return out;\n },\n };\n\n const notAuthor: Rule = {\n id: \"approver-not-author\",\n severity: \"error\",\n check(s, a) {\n if (a.by === \"human\") return [];\n if (a.type === \"ceremony.gateReview\") {\n const id = phaseArg(a);\n const p = id === undefined ? undefined : phaseById(s, id);\n if (!p) return [];\n const mine = itemsInPhase(s, p.id)\n .filter((i) => authorOf(s, i) === a.by)\n .map((i) => i.id);\n if (mine.length === 0) return [];\n const others = approverIds(s, p.gate.id, \"approve-gate\", a.by);\n return [\n v(\n \"approver-not-author\",\n `\"${a.by}\" authored ${mine.join(\", \")} in phase \"${p.id}\" and may not approve its gate`,\n `review the gate as one of: human${others.map((r) => `, ${r}`).join(\"\")}`,\n ),\n ];\n }\n if (a.type === \"ceremony.changeControlBoard\") {\n const cr = changeOf(s, a);\n if (!cr) return [];\n const added = s.events.find(\n (e) => e.type === \"item.added\" && (e.payload as { id: string }).id === cr.id,\n );\n if (!added || added.by !== a.by) return [];\n const others = rolesWith(s, \"control-change\")\n .map((r) => r.id)\n .filter((r) => r !== a.by);\n return [\n v(\n \"approver-not-author\",\n `\"${a.by}\" raised change \"${cr.id}\" and may not decide it`,\n `decide as human${others.map((r) => `, ${r}`).join(\"\")}`,\n cr.id,\n ),\n ];\n }\n return [];\n },\n };\n\n return [sequential, gateBefore, immutable, impact, traced, deliverables, notAuthor];\n}\n","import type { Stage } from \"../types.ts\";\nimport type { WaterfallConfig } from \"./config.ts\";\nimport { DONE, REVIEW, WORK } from \"./phases.ts\";\n\n/** Every phase's items share the same three steps; the phase is the unit of governance. */\nexport function waterfallStages(_config: WaterfallConfig): Stage[] {\n return [\n { id: WORK, name: \"Work\", entryPolicy: [{ kind: \"dependencies-done\" }], exitPolicy: [] },\n {\n id: REVIEW,\n name: \"Review\",\n entryPolicy: [],\n exitPolicy: [{ kind: \"no-open-blockers\" }],\n review: true,\n },\n { id: DONE, name: \"Done\", entryPolicy: [], exitPolicy: [] },\n ];\n}\n","import { addSpent } from \"../budget.ts\";\nimport { openIteration } from \"../planner.ts\";\nimport type { CoreTerm, Methodology, PlannerOptions, WorkItem, WorkflowState } from \"../types.ts\";\nimport { configOf, validateWaterfallConfig, type WaterfallConfig } from \"./config.ts\";\nimport {\n REVIEW,\n WORK,\n currentPhase,\n itemsInPhase,\n missingDeliverables,\n openPhase,\n phaseIndex,\n phaseOf,\n phasesOf,\n} from \"./phases.ts\";\nimport { waterfallAfterDecide, waterfallCeremonies } from \"./ceremonies.ts\";\nimport { waterfallMetrics } from \"./metrics.ts\";\nimport { waterfallRoles } from \"./roles.ts\";\nimport { waterfallRules } from \"./rules.ts\";\nimport { waterfallStages } from \"./stages.ts\";\nimport { traceabilityMatrix } from \"./traceability.ts\";\n\nexport {\n validateWaterfallConfig,\n configOf,\n defaultPhases,\n DEFAULT_PHASE_IDS,\n DEFAULT_DELIVERABLES,\n DEFAULT_DELIVER_BY,\n GATE_ID,\n CHANGE_GATE,\n} from \"./config.ts\";\nexport type { WaterfallConfig, WaterfallPhaseConfig } from \"./config.ts\";\nexport {\n WORK,\n REVIEW,\n DONE,\n phasesOf,\n withPhases,\n getPhase,\n phaseIndex,\n phaseOf,\n itemsInPhase,\n openPhase,\n currentPhase,\n isFrozen,\n producedKinds,\n missingDeliverables,\n lastToPhase,\n} from \"./phases.ts\";\nexport { waterfallStages } from \"./stages.ts\";\nexport { waterfallRoles } from \"./roles.ts\";\nexport { waterfallRules } from \"./rules.ts\";\nexport { waterfallMetrics } from \"./metrics.ts\";\nexport type { WaterfallMetrics } from \"./metrics.ts\";\nexport {\n waterfallCeremonies,\n waterfallAfterDecide,\n wantPhase,\n approveChange,\n rejectChange,\n} from \"./ceremonies.ts\";\nexport { traceabilityMatrix, missingTraces } from \"./traceability.ts\";\nexport type { TraceabilityMatrix, TraceRow } from \"./traceability.ts\";\nexport { baselinePhase, reopenPhases } from \"./baseline.ts\";\nexport type { ReopenResult } from \"./baseline.ts\";\n\nexport const WATERFALL_VOCABULARY: Record<CoreTerm, string> = {\n backlog: \"Requirements Baseline\",\n item: \"Work Package\",\n stage: \"Step\",\n iteration: \"Phase\",\n increment: \"Deliverable\",\n ceremony: \"Review\",\n gate: \"Phase Gate\",\n};\n\n/** The role that delivers the item's phase (config deliverBy); undefined = the planner's default deliverer. */\nexport function deliverRoleFor(state: WorkflowState, item: WorkItem): string | undefined {\n const id = phaseOf(state, item);\n if (id === undefined) return undefined;\n return configOf(state).phases.find((p) => p.id === id)?.deliverBy;\n}\n\nexport interface PhaseReportRow {\n id: string;\n name: string;\n status: string;\n items: number;\n done: number;\n missingDeliverables: string[];\n readyForGate: boolean;\n}\nexport interface PhaseReport {\n phases: PhaseReportRow[];\n current: string | null;\n open: string | null;\n pendingGates: Array<{ pending: string; gate: string }>;\n}\n\nexport function phaseReport(state: WorkflowState): PhaseReport {\n const phases = phasesOf(state).map((p) => {\n const items = itemsInPhase(state, p.id);\n const done = items.filter((i) => i.status === \"done\").length;\n const missing = missingDeliverables(state, p);\n return {\n id: p.id,\n name: p.name,\n status: p.status,\n items: items.length,\n done,\n missingDeliverables: missing,\n readyForGate: p.status === \"open\" && done === items.length && missing.length === 0,\n };\n });\n return {\n phases,\n current: currentPhase(state)?.id ?? null,\n open: openPhase(state)?.id ?? null,\n pendingGates: state.pending\n .filter((p) => p.kind === \"gate\" && p.item === undefined && p.gate !== undefined)\n .map((p) => ({ pending: p.id, gate: p.gate! })),\n };\n}\n\nexport function waterfall(): Methodology<WaterfallConfig> {\n return {\n name: \"waterfall\",\n vocabulary: WATERFALL_VOCABULARY,\n validateConfig: validateWaterfallConfig,\n defaultStages: waterfallStages,\n defaultRoles: waterfallRoles,\n requiredCapabilities: [\"facilitate\", \"control-change\", \"approve-gate\", \"deliver\", \"verify\"],\n exclusiveCapabilities: [],\n plannerOptions(state): PlannerOptions {\n return {\n schedulerMode: \"level\",\n // questions keep the escalation role core gave them; reviews use the planner's reviewer logic\n roleFor: (item) =>\n item.status === \"todo\" && item.type !== \"question\"\n ? deliverRoleFor(state, item)\n : undefined,\n };\n },\n candidates(state): WorkItem[] {\n const open = openPhase(state);\n if (!open) return [];\n return Object.values(state.items).filter(\n (i) =>\n (i.status === \"todo\" || i.status === \"review\") &&\n (i.stage === WORK || i.stage === REVIEW) &&\n i.type !== \"change-request\" &&\n phaseOf(state, i) === open.id,\n );\n },\n invariants(state, item): string[] {\n const cfg = configOf(state);\n const phases = phasesOf(state);\n const id = phaseOf(state, item);\n const p = id === undefined ? undefined : phases[phaseIndex(state, id)];\n const frozen = phases.filter((x) => x.status === \"baselined\").map((x) => x.id);\n const human = p?.gate.requires.includes(\"human\");\n return [\n p\n ? `Phase \"${p.name}\" (${phaseIndex(state, p.id) + 1}/${phases.length}); deliverables: ${p.deliverables.join(\", \") || \"(none)\"}; gate \"${p.gate.id}\"${human ? \" needs human approval\" : \"\"}`\n : \"This item belongs to no phase; it is dispatched only through its parent's phase\",\n `Baselined phases are frozen: ${frozen.join(\", \") || \"(none yet)\"}; to change their items, raise a change-request with an impact analysis`,\n cfg.traceability.to.length\n ? `Traceability: every item of phase \"${cfg.traceability.from}\" must trace to an item in ${cfg.traceability.to.join(\", \")} (set traces on either side)`\n : \"Traceability: none configured\",\n `Do not change the scope of \"${item.id}\" or its acceptance criteria; raise open_questions instead`,\n ];\n },\n ceremonies: waterfallCeremonies(waterfall),\n rules: waterfallRules(),\n metrics: (state) => ({ ...waterfallMetrics(state) }),\n humanDefaults: { gates: \"all\" },\n report: (state) => ({ ...phaseReport(state), coverage: traceabilityMatrix(state).coverage }),\n afterDecide: waterfallAfterDecide,\n afterComplete(state, itemId, _now) {\n // an item added to the phase after kickoff is not in the iteration's committed list: count its spend now\n const it = openIteration(state);\n const open = openPhase(state);\n if (!it || !open || it.committed.includes(itemId)) return state;\n const item = state.items[itemId];\n if (!item || phaseOf(state, item) !== open.id) return state;\n const acc = state.accounting[state.accounting.length - 1];\n if (!acc || acc.item !== itemId) return state;\n return {\n ...state,\n iterations: state.iterations.map((x) =>\n x.id === it.id\n ? { ...x, committed: [...x.committed, itemId], spent: addSpent(x.spent, acc) }\n : x,\n ),\n };\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/waterfall/config.ts","../src/waterfall/phases.ts","../src/waterfall/baseline.ts","../src/waterfall/change.ts","../src/waterfall/retro.ts","../src/waterfall/traceability.ts","../src/waterfall/ceremonies.ts","../src/waterfall/metrics.ts","../src/waterfall/roles.ts","../src/waterfall/rules.ts","../src/waterfall/stages.ts","../src/waterfall/index.ts"],"names":["DEFAULT_PHASE_IDS","DEFAULT_DELIVERABLES","DEFAULT_DELIVER_BY","GATE_ID","id","CHANGE_GATE","CAPABILITIES","title","defaultPhases","p","by","configOf","state","isObj","x","strings","s","budget","raw","where","fail","out","k","v","requirements","q","phase","i","human","assertId","deliverables","gate","g","evidence","b","validateWaterfallConfig","c","hg","phases","ids","dupe","cc","changeControl","tr","traceability","to","t","WORK","REVIEW","DONE","phasesOf","ph","withPhases","phaseIndex","idx","getPhase","phaseOf","item","seen","cur","itemsInPhase","phaseId","openPhase","currentPhase","isFrozen","producedKinds","kinds","it","e","missingDeliverables","extra","have","wanted","lastToPhase","order","a","closeIteration","prefix","outcome","now","openIteration","baselinePhase","approvedBy","items","itemSnapshot","earlier","baseline","appendEvent","reopenPhases","reopened","suspended","earliest","open","approveChange","changeId","note","cr","getItem","ia","r","moveItem","rejectChange","LESSON_SCOPES","validLessons","l","assertRefs","adopt","dismiss","refs","ref","phaseRetrospective","methodology","input","requireCap","wantPhase","newLessons","d","applyAction","s0","nowOf","agreements","agree","ch","created","lesson","adopted","byId","artefacts","timSort","linked","traceabilityMatrix","cfg","rows","f","links","missing","m","missingTraces","toPhase","ceremony","recordDeliverable","kind","waterfallCeremonies","act","type","reduce","version","ZERO_SPENT","approvers","approverIds","already","given","raisePending","pending","decision","canDo","rolesWith","needsHuman","waterfallAfterDecide","entry","reviewer","waterfallMetrics","zero","total","done","planned","spent","defects","typeOf","status","traced","reqTotal","changeRequests","approved","rejected","reworkWeight","phasesReopened","counted","ev","was","completion","variance","n","decided","waterfallRoles","config","gates","rule","message","fix","payloadOf","phaseArg","phaseById","phaseIds","itemById","phaseOfNew","parent","governed","frozenFix","changeOf","waterfallRules","patch","approve","mine","authorOf","others","added","waterfallStages","_config","WATERFALL_VOCABULARY","deliverRoleFor","phaseReport","waterfall","frozen","itemId","_now","acc","addSpent"],"mappings":"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","file":"chunk-NDORREWR.mjs","sourcesContent":["import { assertId, fail } from \"../errors.ts\";\nimport type { Budget, Gate, GateRequirement, WorkflowState } from \"../types.ts\";\n\nexport interface WaterfallPhaseConfig {\n id: string;\n name: string;\n deliverables: string[];\n gate: Gate;\n budget?: Budget;\n /** role id that delivers this phase's items; default: the first role with \"deliver\" */\n deliverBy?: string;\n}\nexport interface WaterfallConfig {\n phases: WaterfallPhaseConfig[];\n changeControl: { requiresImpactAnalysis: boolean; approvers: GateRequirement[] };\n /** phase ids: every item of `from` must trace to an item of each `to` phase before that phase's gate */\n traceability: { from: string; to: string[] };\n humanGates: \"all\" | string[];\n}\n\nexport const DEFAULT_PHASE_IDS: readonly string[] = [\n \"requirements\",\n \"design\",\n \"implementation\",\n \"verification\",\n \"deployment\",\n \"maintenance\",\n];\nexport const DEFAULT_DELIVERABLES: Record<string, string[]> = {\n requirements: [\"srs\"],\n design: [\"design-doc\", \"interface-spec\"],\n implementation: [\"code-baseline\"],\n verification: [\"test-report\", \"traceability-matrix\"],\n deployment: [\"release-notes\", \"deployment-record\"],\n maintenance: [\"change-log\"],\n};\nexport const DEFAULT_DELIVER_BY: Record<string, string> = {\n requirements: \"business-analyst\",\n design: \"architect\",\n deployment: \"release-manager\",\n};\nexport const GATE_ID = (id: string): string => `${id}-gate`;\nexport const CHANGE_GATE = \"change-control\";\nexport const CAPABILITIES: readonly string[] = [\n \"order-backlog\",\n \"define-acceptance\",\n \"facilitate\",\n \"deliver\",\n \"review\",\n \"verify\",\n \"approve-gate\",\n \"manage-flow\",\n \"control-change\",\n \"escalate\",\n];\n\nconst title = (id: string) => id.charAt(0).toUpperCase() + id.slice(1);\n\nexport function defaultPhases(): WaterfallPhaseConfig[] {\n return DEFAULT_PHASE_IDS.map((id) => {\n const p: WaterfallPhaseConfig = {\n id,\n name: title(id),\n deliverables: [...(DEFAULT_DELIVERABLES[id] ?? [])],\n gate: {\n id: GATE_ID(id),\n requires: [{ capability: \"approve-gate\" }],\n evidence: [],\n onFail: { action: \"block\" },\n },\n };\n const by = DEFAULT_DELIVER_BY[id];\n if (by !== undefined) p.deliverBy = by;\n return p;\n });\n}\n\nexport function configOf(state: WorkflowState): WaterfallConfig {\n return state.config as WaterfallConfig;\n}\n\nconst isObj = (x: unknown): x is Record<string, unknown> =>\n typeof x === \"object\" && x !== null && !Array.isArray(x);\nconst strings = (x: unknown): x is string[] =>\n Array.isArray(x) && x.every((s) => typeof s === \"string\" && s.trim() !== \"\");\n\nfunction budget(raw: unknown, where: string): Budget | undefined {\n if (raw === undefined) return undefined;\n if (!isObj(raw))\n fail(\"config-invalid\", `${where}.budget must be an object`, 'e.g. { \"tokens\": 400000 }');\n const out: Budget = {};\n for (const k of [\"tokens\", \"turns\", \"wallclockMs\"] as const) {\n const v = raw[k];\n if (v === undefined) continue;\n if (typeof v !== \"number\" || !Number.isFinite(v) || v < 0)\n fail(\n \"config-invalid\",\n `${where}.budget.${k} must be a non-negative number`,\n \"omit it for no limit\",\n );\n out[k] = v;\n }\n return out;\n}\n\nfunction requirements(raw: unknown, where: string): GateRequirement[] {\n if (!Array.isArray(raw) || raw.length === 0)\n fail(\n \"config-invalid\",\n `${where} must be a non-empty array of \"human\" | { capability }`,\n 'e.g. [\"human\", { \"capability\": \"approve-gate\" }]',\n );\n return raw.map((q: unknown): GateRequirement => {\n if (q === \"human\") return \"human\";\n if (isObj(q) && typeof q[\"capability\"] === \"string\" && CAPABILITIES.includes(q[\"capability\"]))\n return { capability: q[\"capability\"] };\n return fail(\n \"config-invalid\",\n `${where} entry ${JSON.stringify(q)} is not \"human\" or a known capability`,\n `use \"human\" or { \"capability\": one of ${CAPABILITIES.join(\", \")} }`,\n );\n });\n}\n\nfunction phase(raw: unknown, i: number, human: (id: string) => boolean): WaterfallPhaseConfig {\n const where = `waterfall config.phases[${i}]`;\n if (!isObj(raw)) fail(\"config-invalid\", `${where} must be an object`, 'e.g. { \"id\": \"design\" }');\n assertId(raw[\"id\"], `${where}.id`);\n const id = raw[\"id\"] as string;\n const deliverables = raw[\"deliverables\"] ?? DEFAULT_DELIVERABLES[id] ?? [];\n if (!strings(deliverables))\n fail(\n \"config-invalid\",\n `${where}.deliverables must be a string[] of evidence kinds`,\n 'e.g. [\"srs\"]',\n );\n let gate: Gate;\n if (raw[\"gate\"] === undefined) {\n gate = {\n id: GATE_ID(id),\n requires: [{ capability: \"approve-gate\" }],\n evidence: [],\n onFail: { action: \"block\" },\n };\n } else {\n const g = raw[\"gate\"];\n if (!isObj(g) || typeof g[\"id\"] !== \"string\" || g[\"id\"].trim() === \"\")\n fail(\n \"config-invalid\",\n `${where}.gate must be a Gate with an id`,\n 'e.g. { \"id\": \"design-gate\", \"requires\": [{ \"capability\": \"approve-gate\" }], \"evidence\": [] }',\n );\n const evidence = g[\"evidence\"] ?? [];\n if (!strings(evidence))\n fail(\n \"config-invalid\",\n `${where}.gate.evidence must be a string[]`,\n \"list evidence kinds or omit it\",\n );\n gate = {\n id: g[\"id\"],\n requires: requirements(\n g[\"requires\"] ?? [{ capability: \"approve-gate\" }],\n `${where}.gate.requires`,\n ),\n evidence: [...evidence],\n onFail: { action: \"block\" },\n };\n }\n if (human(id) && !gate.requires.includes(\"human\")) gate.requires = [\"human\", ...gate.requires];\n const out: WaterfallPhaseConfig = {\n id,\n name: typeof raw[\"name\"] === \"string\" && raw[\"name\"].trim() !== \"\" ? raw[\"name\"] : title(id),\n deliverables: [...deliverables],\n gate,\n };\n const b = budget(raw[\"budget\"], where);\n if (b !== undefined) out.budget = b;\n const by = raw[\"deliverBy\"] ?? DEFAULT_DELIVER_BY[id];\n if (by !== undefined) {\n if (typeof by !== \"string\" || by.trim() === \"\")\n fail(\n \"config-invalid\",\n `${where}.deliverBy must be a role id`,\n \"name the role that delivers this phase or omit it\",\n );\n out.deliverBy = by;\n }\n return out;\n}\n\nexport function validateWaterfallConfig(raw: unknown): WaterfallConfig {\n const c = (raw ?? {}) as Record<string, unknown>;\n if (c[\"phases\"] !== undefined && !Array.isArray(c[\"phases\"]))\n fail(\n \"config-invalid\",\n \"waterfall config.phases must be an array of phases\",\n \"omit phases for the six classic phases\",\n );\n const hg = c[\"humanGates\"] ?? \"all\";\n if (hg !== \"all\" && !strings(hg))\n fail(\n \"config-invalid\",\n 'waterfall config.humanGates must be \"all\" or a string[] of phase ids',\n 'omit it for \"all\"',\n );\n const human = hg === \"all\" ? () => true : (id: string) => (hg as string[]).includes(id);\n const phases =\n c[\"phases\"] === undefined\n ? defaultPhases().map((p, i) => phase(p, i, human))\n : (c[\"phases\"] as unknown[]).map((p, i) => phase(p, i, human));\n if (phases.length === 0)\n fail(\n \"config-invalid\",\n \"waterfall config.phases needs at least one phase\",\n 'e.g. [{ \"id\": \"requirements\" }]',\n );\n const ids = phases.map((p) => p.id);\n const dupe = ids.find((id, i) => ids.indexOf(id) !== i);\n if (dupe !== undefined)\n fail(\"config-invalid\", `duplicate phase id \"${dupe}\"`, \"give every phase a unique id\");\n if (hg !== \"all\")\n for (const id of hg as string[])\n if (!ids.includes(id))\n fail(\n \"config-invalid\",\n `waterfall config.humanGates names unknown phase \"${id}\"`,\n `phases are: ${ids.join(\", \")}`,\n );\n const cc = c[\"changeControl\"] ?? {};\n if (!isObj(cc))\n fail(\n \"config-invalid\",\n \"waterfall config.changeControl must be an object\",\n 'e.g. { \"requiresImpactAnalysis\": true, \"approvers\": [\"human\"] }',\n );\n if (\n cc[\"requiresImpactAnalysis\"] !== undefined &&\n typeof cc[\"requiresImpactAnalysis\"] !== \"boolean\"\n )\n fail(\n \"config-invalid\",\n \"waterfall config.changeControl.requiresImpactAnalysis must be a boolean\",\n \"omit it for true\",\n );\n const changeControl: WaterfallConfig[\"changeControl\"] = {\n requiresImpactAnalysis:\n cc[\"requiresImpactAnalysis\"] === undefined ? true : (cc[\"requiresImpactAnalysis\"] as boolean),\n approvers: requirements(\n cc[\"approvers\"] ?? [\"human\", { capability: \"control-change\" }],\n \"waterfall config.changeControl.approvers\",\n ),\n };\n const tr = c[\"traceability\"];\n let traceability: WaterfallConfig[\"traceability\"];\n if (tr === undefined) {\n traceability =\n ids.includes(\"requirements\") && ids.includes(\"design\") && ids.includes(\"verification\")\n ? { from: \"requirements\", to: [\"design\", \"verification\"] }\n : { from: ids[0]!, to: [] };\n } else {\n if (!isObj(tr) || typeof tr[\"from\"] !== \"string\" || !ids.includes(tr[\"from\"]))\n fail(\n \"config-invalid\",\n \"waterfall config.traceability.from must be a phase id\",\n `phases are: ${ids.join(\", \")}`,\n );\n const to = tr[\"to\"] ?? [];\n if (!strings(to))\n fail(\n \"config-invalid\",\n \"waterfall config.traceability.to must be a string[] of phase ids\",\n `phases are: ${ids.join(\", \")}`,\n );\n for (const t of to) {\n if (!ids.includes(t))\n fail(\n \"config-invalid\",\n `waterfall config.traceability.to names unknown phase \"${t}\"`,\n `phases are: ${ids.join(\", \")}`,\n );\n if (ids.indexOf(t) <= ids.indexOf(tr[\"from\"]))\n fail(\n \"config-invalid\",\n `waterfall config.traceability.to phase \"${t}\" must come after \"${tr[\"from\"]}\"`,\n \"trace forward only: from an earlier phase to later ones\",\n );\n }\n traceability = { from: tr[\"from\"], to: [...to] };\n }\n return {\n phases,\n changeControl,\n traceability,\n humanGates: hg === \"all\" ? \"all\" : [...(hg as string[])],\n };\n}\n","import { fail } from \"../errors.ts\";\nimport type { Phase, WorkItem, WorkflowState } from \"../types.ts\";\nimport { configOf } from \"./config.ts\";\n\nexport const WORK = \"work\";\nexport const REVIEW = \"review\";\nexport const DONE = \"done\";\n\n/** state.phases, or the config phases as pending (before the first ceremony touches them). */\nexport function phasesOf(state: WorkflowState): Phase[] {\n if (state.phases) return state.phases;\n return configOf(state).phases.map((p) => {\n const ph: Phase = {\n id: p.id,\n name: p.name,\n deliverables: [...p.deliverables],\n gate: p.gate,\n status: \"pending\",\n };\n if (p.budget) ph.budget = p.budget;\n return ph;\n });\n}\n\nexport function withPhases(state: WorkflowState, phases: Phase[]): WorkflowState {\n return { ...state, phases };\n}\n\nexport function phaseIndex(state: WorkflowState, id: string): number {\n const idx = phasesOf(state).findIndex((p) => p.id === id);\n if (idx < 0)\n fail(\n \"config-invalid\",\n `unknown phase \"${id}\"`,\n `phases are: ${phasesOf(state)\n .map((p) => p.id)\n .join(\" → \")}`,\n );\n return idx;\n}\n\nexport function getPhase(state: WorkflowState, id: string): Phase {\n return phasesOf(state)[phaseIndex(state, id)]!;\n}\n\n/** The item's phase, inherited from its parent chain (questions, follow-ups, retro items). */\nexport function phaseOf(state: WorkflowState, item: WorkItem): string | undefined {\n const seen = new Set<string>();\n let cur: WorkItem | undefined = item;\n while (cur && !seen.has(cur.id)) {\n if (cur.phase !== undefined) return cur.phase;\n seen.add(cur.id);\n cur =\n cur.parent !== undefined && Object.hasOwn(state.items, cur.parent)\n ? state.items[cur.parent]\n : undefined;\n }\n return undefined;\n}\n\nexport function itemsInPhase(state: WorkflowState, phaseId: string): WorkItem[] {\n return Object.values(state.items).filter(\n (i) => i.status !== \"dropped\" && phaseOf(state, i) === phaseId,\n );\n}\n\nexport function openPhase(state: WorkflowState): Phase | undefined {\n return phasesOf(state).find((p) => p.status === \"open\");\n}\n\n/** First phase in order that is not baselined: the one to kick off (or the open one). */\nexport function currentPhase(state: WorkflowState): Phase | undefined {\n return phasesOf(state).find((p) => p.status !== \"baselined\");\n}\n\nexport function isFrozen(state: WorkflowState, item: WorkItem): boolean {\n const id = phaseOf(state, item);\n return id !== undefined && phasesOf(state).find((p) => p.id === id)?.status === \"baselined\";\n}\n\nexport function producedKinds(state: WorkflowState, phase: Phase): Set<string> {\n const kinds = new Set<string>((phase.produced ?? []).map((p) => p.kind));\n for (const it of itemsInPhase(state, phase.id)) for (const e of it.evidence) kinds.add(e.kind);\n return kinds;\n}\n\n/** Deliverables (and gate evidence kinds) still missing, in declaration order. */\nexport function missingDeliverables(\n state: WorkflowState,\n phase: Phase,\n extra: string[] = [],\n): string[] {\n const have = producedKinds(state, phase);\n for (const k of extra) have.add(k);\n const wanted: string[] = [];\n for (const k of [...phase.deliverables, ...phase.gate.evidence])\n if (!wanted.includes(k)) wanted.push(k);\n return wanted.filter((k) => !have.has(k));\n}\n\n/** The traceability `to` phase that comes last in phase order (where the matrix must be complete). */\nexport function lastToPhase(state: WorkflowState): string | undefined {\n const order = phasesOf(state).map((p) => p.id);\n const to = configOf(state).traceability.to.filter((t) => order.includes(t));\n if (to.length === 0) return undefined;\n return to.reduce((a, b) => (order.indexOf(a) >= order.indexOf(b) ? a : b));\n}\n","import { fail } from \"../errors.ts\";\nimport { openIteration } from \"../planner.ts\";\nimport { appendEvent } from \"../state.ts\";\nimport type { Baseline, WorkItem, WorkflowState } from \"../types.ts\";\nimport { getPhase, itemsInPhase, phaseIndex, phasesOf, withPhases } from \"./phases.ts\";\n\nfunction closeIteration(\n state: WorkflowState,\n prefix: string,\n outcome: \"completed\" | \"cancelled\",\n now: string,\n): WorkflowState {\n const it = openIteration(state);\n if (!it || !it.id.startsWith(`${prefix}#`)) return state;\n return {\n ...state,\n iterations: state.iterations.map((x) => (x.id === it.id ? { ...x, endedAt: now, outcome } : x)),\n };\n}\n\n/** Pass the phase gate: freeze its items, record the baseline, close its iteration. */\nexport function baselinePhase(\n state: WorkflowState,\n phaseId: string,\n approvedBy: string[],\n now: string,\n): WorkflowState {\n const phase = getPhase(state, phaseId);\n if (phase.status !== \"open\")\n fail(\n \"invalid-transition\",\n `phase \"${phaseId}\" is ${phase.status}, not open`,\n phase.status === \"baselined\"\n ? \"it is already baselined; a change-request reopens it\"\n : \"kickoff the phase first\",\n );\n const items = itemsInPhase(state, phaseId);\n const itemSnapshot: Record<string, WorkItem> = {};\n for (const it of items) itemSnapshot[it.id] = it;\n const earlier = (state.baselines ?? []).filter((b) => b.phase === phaseId).length;\n const baseline: Baseline = {\n phase: phaseId,\n version: earlier + 1,\n at: now,\n approvedBy,\n itemSnapshot,\n };\n let s = withPhases(\n state,\n phasesOf(state).map((p) => (p.id === phaseId ? { ...p, status: \"baselined\" as const } : p)),\n );\n s = { ...s, baseline, baselines: [...(s.baselines ?? []), baseline] };\n s = closeIteration(s, phaseId, \"completed\", now);\n return appendEvent(\n s,\n \"phase.baselined\",\n approvedBy[approvedBy.length - 1] ?? \"system\",\n { phase: phaseId, version: baseline.version, approvedBy, items: items.map((i) => i.id) },\n now,\n );\n}\n\nexport interface ReopenResult {\n state: WorkflowState;\n reopened: string[];\n suspended: string | null;\n}\n\n/** Change-control approval: reopen the listed baselined phases; a later open phase is suspended until they are re-baselined. */\nexport function reopenPhases(state: WorkflowState, ids: string[], now: string): ReopenResult {\n const reopened: string[] = [];\n for (const id of ids) {\n const p = getPhase(state, id);\n if (p.status === \"pending\")\n fail(\n \"invalid-input\",\n `phase \"${id}\" was never baselined; there is nothing to reopen`,\n \"remove it from impactAnalysis.reopen\",\n );\n if (p.status === \"baselined\" && !reopened.includes(id)) reopened.push(id);\n }\n let phases = phasesOf(state).map((p) =>\n reopened.includes(p.id) ? { ...p, status: \"reopened\" as const } : p,\n );\n let suspended: string | null = null;\n let s = state;\n if (reopened.length) {\n const earliest = Math.min(...reopened.map((id) => phaseIndex(state, id)));\n const open = phases.find((p, i) => p.status === \"open\" && i > earliest);\n if (open) {\n suspended = open.id;\n phases = phases.map((p) => (p.id === open.id ? { ...p, status: \"reopened\" as const } : p));\n s = closeIteration(s, open.id, \"cancelled\", now);\n }\n }\n return { state: withPhases(s, phases), reopened, suspended };\n}\n","import { getItem, moveItem } from \"../items.ts\";\nimport { appendEvent } from \"../state.ts\";\nimport type { WorkflowState } from \"../types.ts\";\nimport { reopenPhases } from \"./baseline.ts\";\nimport { DONE } from \"./phases.ts\";\n\nexport function approveChange(\n state: WorkflowState,\n changeId: string,\n by: string,\n note: string,\n now: string,\n): WorkflowState {\n const cr = getItem(state, changeId);\n const ia = cr.impactAnalysis;\n const r = reopenPhases(state, ia?.reopen ?? [], now);\n let s = moveItem(r.state, changeId, { stage: DONE, status: \"done\" }, by, now);\n for (const phase of r.reopened)\n s = appendEvent(s, \"phase.reopened\", by, { phase, change: changeId }, now);\n if (r.suspended !== null)\n s = appendEvent(s, \"phase.suspended\", by, { phase: r.suspended, change: changeId }, now);\n return appendEvent(\n s,\n \"change.decided\",\n by,\n {\n change: changeId,\n decision: \"approve\",\n by,\n note,\n reopened: r.reopened,\n suspended: r.suspended,\n weight: ia?.weight ?? 0,\n affects: cr.affects ?? [],\n },\n now,\n );\n}\n\nexport function rejectChange(\n state: WorkflowState,\n changeId: string,\n by: string,\n note: string,\n now: string,\n): WorkflowState {\n const cr = getItem(state, changeId);\n const s = moveItem(state, changeId, { status: \"dropped\" }, by, now);\n return appendEvent(\n s,\n \"change.decided\",\n by,\n {\n change: changeId,\n decision: \"reject\",\n by,\n note,\n reopened: [],\n suspended: null,\n weight: 0,\n affects: cr.affects ?? [],\n },\n now,\n );\n}\n","import { fail } from \"../errors.ts\";\nimport { applyAction } from \"../methodology.ts\";\nimport { requireCap } from \"../roles.ts\";\nimport { appendEvent, nowOf } from \"../state.ts\";\nimport type { Ceremony, Lesson, LessonChange, Methodology, WorkflowState } from \"../types.ts\";\nimport { wantPhase } from \"./ceremonies.ts\";\n\nconst LESSON_SCOPES: readonly string[] = [\"policy\", \"skill\", \"memory\", \"spec\", \"review\"];\nconst isObj = (x: unknown): x is Record<string, unknown> =>\n typeof x === \"object\" && x !== null && !Array.isArray(x);\n\ntype NewLesson = { text: string; scope: Lesson[\"scope\"]; suggestedChange?: LessonChange };\ntype Adopt = { id: string; suggestedChange?: LessonChange };\n\nfunction validLessons(x: unknown): x is NewLesson[] {\n return (\n Array.isArray(x) &&\n x.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}\n\nfunction assertRefs(state: WorkflowState, adopt: Adopt[], dismiss: string[]): void {\n const refs = [...adopt.map((a) => a.id), ...dismiss];\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}\n\n/** Lessons, adoptions and agreements; never touches items, config or baselines. */\nexport function phaseRetrospective(methodology: () => Methodology): Ceremony {\n return (state, input) => {\n requireCap(state, input.by, \"facilitate\");\n const phase =\n input[\"phase\"] === undefined ? undefined : wantPhase(state, input, \"phaseRetrospective\");\n const newLessons = input[\"lessons\"] ?? [];\n if (!validLessons(newLessons))\n fail(\n \"invalid-input\",\n \"phaseRetrospective.lessons entries need a text and a scope\",\n `scope is one of: ${LESSON_SCOPES.join(\", \")}`,\n );\n const adopt = (input[\"adopt\"] ?? []) as Adopt[];\n const dismiss = (input[\"dismiss\"] ?? []) as string[];\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 \"phaseRetrospective.adopt must be [{ id, suggestedChange? }] and dismiss a string[]\",\n 'e.g. { \"adopt\": [{ \"id\": \"L1\" }], \"dismiss\": [\"L2\"] }',\n );\n assertRefs(state, adopt, dismiss);\n return applyAction(\n state,\n methodology(),\n { type: \"ceremony.phaseRetrospective\", by: input.by, payload: input },\n (s0) => {\n let s = s0;\n const now = nowOf(input.now);\n const agreements: string[] = [];\n const agree = (ch: LessonChange | undefined) => {\n if (!ch || ch.kind !== \"agreement\") return;\n if (!s.agreements.includes(ch.text)) s = { ...s, agreements: [...s.agreements, ch.text] };\n agreements.push(ch.text);\n };\n const created: string[] = [];\n for (const l of newLessons) {\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: input.by,\n };\n if (l.suggestedChange) lesson.suggestedChange = l.suggestedChange;\n s = { ...s, lessons: [...s.lessons, lesson] };\n created.push(id);\n agree(l.suggestedChange);\n }\n const adopted: string[] = [];\n for (const a of 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 agree(a.suggestedChange ?? s.lessons.find((x) => x.id === a.id)?.suggestedChange);\n }\n for (const d of dismiss)\n s = {\n ...s,\n lessons: s.lessons.map((x) =>\n x.id === d ? { ...x, status: \"dismissed\" as const } : x,\n ),\n };\n return appendEvent(\n s,\n \"phase.retrospective\",\n input.by,\n { phase: phase?.id ?? null, lessons: created, adopted, dismissed: dismiss, agreements },\n now,\n );\n },\n );\n };\n}\n","import { timSort } from \"exsorted\";\nimport type { WorkItem, WorkflowState } from \"../types.ts\";\nimport { configOf } from \"./config.ts\";\nimport { itemsInPhase, phasesOf } from \"./phases.ts\";\n\nexport interface TraceRow {\n item: string;\n /** to-phase id → ids of linked items in that phase */\n links: Record<string, string[]>;\n}\nexport interface TraceabilityMatrix {\n from: string;\n to: string[];\n rows: TraceRow[];\n missing: Array<{ item: string; phases: string[] }>;\n coverage: { traced: number; total: number };\n}\n\nconst byId = (a: WorkItem, b: WorkItem) => (a.id < b.id ? -1 : a.id > b.id ? 1 : 0);\nconst artefacts = (state: WorkflowState, phase: string) =>\n timSort(\n itemsInPhase(state, phase).filter((i) => i.type !== \"question\"),\n byId,\n );\n\n/** A link exists when either side's `traces` names the other. */\nconst linked = (a: WorkItem, b: WorkItem) =>\n (a.traces ?? []).includes(b.id) || (b.traces ?? []).includes(a.id);\n\nexport function traceabilityMatrix(state: WorkflowState): TraceabilityMatrix {\n const cfg = configOf(state).traceability;\n const order = phasesOf(state).map((p) => p.id);\n const to = cfg.to.filter((t) => order.includes(t));\n const rows: TraceRow[] = artefacts(state, cfg.from).map((f) => {\n const links: Record<string, string[]> = {};\n for (const t of to)\n links[t] = artefacts(state, t)\n .filter((x) => linked(f, x))\n .map((x) => x.id);\n return { item: f.id, links };\n });\n const missing = rows\n .map((r) => ({ item: r.item, phases: to.filter((t) => r.links[t]!.length === 0) }))\n .filter((m) => m.phases.length > 0);\n return {\n from: cfg.from,\n to,\n rows,\n missing,\n coverage: { traced: rows.length - missing.length, total: rows.length },\n };\n}\n\n/** Ids of `from` items with no link into `toPhase`. */\nexport function missingTraces(state: WorkflowState, toPhase: string): string[] {\n return traceabilityMatrix(state)\n .rows.filter((r) => (r.links[toPhase] ?? []).length === 0)\n .map((r) => r.item);\n}\n","import { ZERO_SPENT } from \"../budget.ts\";\nimport { fail } from \"../errors.ts\";\nimport { raisePending } from \"../gates.ts\";\nimport { applyAction } from \"../methodology.ts\";\nimport { getItem } from \"../items.ts\";\nimport { approverIds, canDo, requireCap, rolesWith } from \"../roles.ts\";\nimport { appendEvent, nowOf } from \"../state.ts\";\nimport type {\n Capability,\n Ceremony,\n CeremonyInput,\n Methodology,\n PendingHuman,\n Phase,\n WorkflowState,\n} from \"../types.ts\";\nimport { baselinePhase } from \"./baseline.ts\";\nimport { approveChange, rejectChange } from \"./change.ts\";\nimport { configOf } from \"./config.ts\";\nimport { getPhase, itemsInPhase, lastToPhase, phasesOf, withPhases } from \"./phases.ts\";\nimport { phaseRetrospective } from \"./retro.ts\";\nimport { traceabilityMatrix } from \"./traceability.ts\";\n\nconst isObj = (x: unknown): x is Record<string, unknown> =>\n typeof x === \"object\" && x !== null && !Array.isArray(x);\n\n/** input.phase as an existing phase. */\nexport function wantPhase(state: WorkflowState, input: CeremonyInput, ceremony: string): Phase {\n const id = input[\"phase\"];\n if (typeof id !== \"string\" || id.trim() === \"\")\n fail(\n \"invalid-input\",\n `${ceremony} needs phase: string`,\n `pass one of: ${phasesOf(state)\n .map((p) => p.id)\n .join(\", \")}`,\n );\n return getPhase(state, id);\n}\n\n/** Append a deliverable to the phase and record it. */\nfunction recordDeliverable(\n state: WorkflowState,\n phaseId: string,\n kind: string,\n ref: string,\n by: string,\n now: string,\n): WorkflowState {\n const s = withPhases(\n state,\n phasesOf(state).map((p) =>\n p.id === phaseId\n ? { ...p, produced: [...(p.produced ?? []), { kind, ref, by, at: now }] }\n : p,\n ),\n );\n return appendEvent(s, \"phase.deliverable\", by, { phase: phaseId, kind, ref }, now);\n}\n\nexport { approveChange, rejectChange } from \"./change.ts\";\n\nexport function waterfallCeremonies(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 kickoff: Ceremony = (state, input) => {\n requireCap(state, input.by, \"facilitate\");\n const phase = wantPhase(state, input, \"kickoff\");\n return act(state, \"ceremony.kickoff\", input, (s, now) => {\n const version =\n s.events.filter(\n (e) => e.type === \"phase.opened\" && (e.payload as { phase: string }).phase === phase.id,\n ).length + 1;\n const items = itemsInPhase(s, phase.id)\n .filter((i) => i.status !== \"done\")\n .map((i) => i.id);\n s = withPhases(\n s,\n phasesOf(s).map((p) => (p.id === phase.id ? { ...p, status: \"open\" as const } : p)),\n );\n const budget = phase.budget ?? {};\n s = {\n ...s,\n iterations: [\n ...s.iterations,\n {\n id: `${phase.id}#${version}`,\n goal: phase.name,\n budget,\n spent: ZERO_SPENT,\n startedAt: now,\n committed: items,\n carryover: [],\n },\n ],\n };\n return appendEvent(\n s,\n \"phase.opened\",\n input.by,\n { phase: phase.id, version, items, budget },\n now,\n );\n });\n };\n\n const gateReview: Ceremony = (state, input) => {\n const phase = wantPhase(state, input, \"gateReview\");\n if (phase.status !== \"open\")\n fail(\n \"invalid-transition\",\n `phase \"${phase.id}\" is ${phase.status}, not open`,\n phase.status === \"baselined\"\n ? \"it is already baselined; a change-request reopens it\"\n : `kickoff \"${phase.id}\" first`,\n );\n const gate = phase.gate;\n const approvers = approverIds(state, gate.id, \"approve-gate\");\n if (input.by !== \"human\" && !approvers.includes(input.by))\n fail(\n \"gate-unmet\",\n `\"${input.by}\" may not review gate \"${gate.id}\"`,\n `review as one of: human${approvers.map((r) => `, ${r}`).join(\"\")}`,\n { rule: \"gate\" },\n );\n const already = state.pending.find(\n (p) => p.kind === \"gate\" && p.item === undefined && p.gate === gate.id,\n );\n if (already)\n fail(\n \"no-op\",\n `gate \"${gate.id}\" is already awaiting a decision (${already.id})`,\n `decide ${already.id} approve|reject`,\n );\n const given = input[\"deliverables\"] ?? [];\n if (\n !Array.isArray(given) ||\n !given.every(\n (d) =>\n isObj(d) &&\n typeof d[\"kind\"] === \"string\" &&\n d[\"kind\"].trim() !== \"\" &&\n typeof d[\"ref\"] === \"string\",\n )\n )\n fail(\n \"invalid-input\",\n \"gateReview.deliverables must be [{ kind, ref }]\",\n 'e.g. { \"deliverables\": [{ \"kind\": \"srs\", \"ref\": \"docs/srs.md\" }] }',\n );\n const deliverables = given as Array<{ kind: string; ref: string }>;\n return act(state, \"ceremony.gateReview\", input, (s, now) => {\n for (const d of deliverables)\n s = recordDeliverable(s, phase.id, d.kind, d.ref, input.by, now);\n if (configOf(s).traceability.to.includes(phase.id)) {\n const m = traceabilityMatrix(s);\n s = appendEvent(\n s,\n \"traceability.computed\",\n input.by,\n {\n phase: phase.id,\n from: m.from,\n to: m.to,\n coverage: m.coverage,\n missing: m.missing,\n rows: m.rows,\n },\n now,\n );\n if (phase.id === lastToPhase(s) && m.missing.length === 0)\n s = recordDeliverable(\n s,\n phase.id,\n \"traceability-matrix\",\n `traceability.computed#${s.events[s.events.length - 1]!.seq}`,\n input.by,\n now,\n );\n }\n if (gate.requires.includes(\"human\") && input.by !== \"human\") {\n s = raisePending(\n s,\n {\n kind: \"gate\",\n gate: gate.id,\n question: `Approve gate \"${gate.id}\" and baseline phase \"${phase.name}\"?`,\n },\n now,\n );\n const pending = s.pending[s.pending.length - 1]!.id;\n return appendEvent(\n s,\n \"phase.gate-pending\",\n input.by,\n { phase: phase.id, gate: gate.id, by: input.by, pending },\n now,\n );\n }\n return baselinePhase(s, phase.id, [input.by], now);\n });\n };\n\n const changeControlBoard: Ceremony = (state, input) => {\n requireCap(state, input.by, \"control-change\");\n const id = input[\"change\"];\n if (typeof id !== \"string\" || id.trim() === \"\")\n fail(\n \"invalid-input\",\n \"changeControlBoard needs change: string (a change-request id)\",\n 'e.g. { \"change\": \"CR-1\", \"decision\": \"approve\", \"note\": \"why\" }',\n );\n const cr = getItem(state, id);\n if (cr.type !== \"change-request\")\n fail(\n \"invalid-input\",\n `item \"${id}\" is a ${cr.type}, not a change-request`,\n \"only change-request items go through the board\",\n { items: [id] },\n );\n if (cr.status === \"done\" || cr.status === \"dropped\")\n fail(\n \"invalid-transition\",\n `change \"${id}\" is already ${cr.status === \"done\" ? \"approved\" : \"rejected\"}`,\n \"raise a new change-request\",\n { items: [id] },\n );\n if (cr.status === \"awaiting_human\") {\n const p = state.pending.find((x) => x.item === id);\n fail(\n \"no-op\",\n `change \"${id}\" is awaiting the human decision${p ? ` (${p.id})` : \"\"}`,\n `decide ${p?.id ?? \"<pending id>\"} approve|reject`,\n { items: [id] },\n );\n }\n const decision = input[\"decision\"];\n if (decision !== \"approve\" && decision !== \"reject\")\n fail(\n \"invalid-input\",\n 'changeControlBoard.decision must be \"approve\" or \"reject\"',\n \"state the board's decision\",\n );\n const note = typeof input[\"note\"] === \"string\" ? input[\"note\"] : \"\";\n const approvers = configOf(state).changeControl.approvers;\n for (const q of approvers) {\n if (\n q === \"human\" ||\n input.by === \"human\" ||\n canDo(state, input.by, q.capability as Capability)\n )\n continue;\n fail(\n \"gate-unmet\",\n `\"${input.by}\" lacks capability \"${q.capability}\" required by change control`,\n `decide as one of: human${rolesWith(state, q.capability as Capability)\n .map((r) => `, ${r.id}`)\n .join(\"\")}`,\n { rule: \"change-control\", items: [id] },\n );\n }\n const needsHuman = approvers.includes(\"human\") && input.by !== \"human\";\n return act(state, \"ceremony.changeControlBoard\", input, (s, now) => {\n if (needsHuman) {\n s = raisePending(\n s,\n {\n kind: \"decision\",\n item: id,\n question: `Change \"${id}\" (${cr.title}): the board (${input.by}) recommends ${decision}${note ? `: ${note}` : \"\"}. Approve or reject the change?`,\n },\n now,\n );\n const pending = s.pending[s.pending.length - 1]!.id;\n return appendEvent(\n s,\n \"change.recommended\",\n input.by,\n { change: id, decision, note, pending },\n now,\n );\n }\n return decision === \"approve\"\n ? approveChange(s, id, input.by, note, now)\n : rejectChange(s, id, input.by, note, now);\n });\n };\n\n return {\n kickoff,\n gateReview,\n changeControlBoard,\n phaseRetrospective: phaseRetrospective(methodology),\n };\n}\n\n/** decide() hook: a phase gate's human decision baselines the phase or records the failure. */\nexport function waterfallAfterDecide(\n state: WorkflowState,\n entry: PendingHuman,\n decision: \"approve\" | \"reject\",\n by: string,\n note: string,\n now: string,\n): WorkflowState {\n if (entry.kind === \"gate\" && entry.item === undefined && entry.gate !== undefined) {\n const phase = phasesOf(state).find((p) => p.gate.id === entry.gate);\n if (!phase) return state;\n // core decide() checks the decider only for item gates; a phase gate pending exists because the gate requires a human\n if (by !== \"human\")\n fail(\n \"gate-unmet\",\n `\"${by}\" may not decide phase gate \"${entry.gate}\" (${entry.id}); it awaits a human`,\n `decide ${entry.id} as human`,\n { rule: \"gate\" },\n );\n let reviewer: string | undefined;\n for (let i = state.events.length - 1; i >= 0; i--) {\n const e = state.events[i]!;\n if (\n e.type === \"phase.gate-pending\" &&\n (e.payload as { pending: string }).pending === entry.id\n ) {\n reviewer = e.by;\n break;\n }\n }\n const approvedBy = reviewer !== undefined && reviewer !== by ? [reviewer, by] : [by];\n if (decision === \"approve\") return baselinePhase(state, phase.id, approvedBy, now);\n return appendEvent(\n state,\n \"phase.gate-failed\",\n by,\n { phase: phase.id, gate: entry.gate, note },\n now,\n );\n }\n if (\n entry.kind === \"decision\" &&\n entry.item !== undefined &&\n Object.hasOwn(state.items, entry.item)\n ) {\n const item = state.items[entry.item]!;\n if (item.type !== \"change-request\") return state;\n if (by !== \"human\")\n fail(\n \"gate-unmet\",\n `\"${by}\" may not decide change \"${item.id}\" (${entry.id}); change control awaits a human`,\n `decide ${entry.id} as human`,\n { rule: \"change-control\", items: [item.id] },\n );\n return decision === \"approve\"\n ? approveChange(state, item.id, by, note, now)\n : rejectChange(state, item.id, by, note, now);\n }\n return state;\n}\n","import type { WorkflowState } from \"../types.ts\";\nimport { configOf } from \"./config.ts\";\n\nexport interface WaterfallMetrics {\n phaseCompletion: Record<string, number>;\n budgetPlanned: Record<string, number>;\n budgetSpent: Record<string, number>;\n scheduleVariance: Record<string, number>;\n requirementCoverage: number;\n requirementsTraced: number;\n requirementsTotal: number;\n defectsPerPhase: Record<string, number>;\n changeRequests: number;\n changesApproved: number;\n changesRejected: number;\n changeApprovalRate: number;\n reworkWeight: number;\n phasesReopened: number;\n}\n\ntype Added = { id: string; type: string; phase: string | null; parent: string | null };\n\n/** Phase metrics replayed from events alone (membership from item.added, spend from item.completed). */\nexport function waterfallMetrics(state: WorkflowState): WaterfallMetrics {\n const phases = configOf(state).phases.map((p) => p.id);\n const zero = () => Object.fromEntries(phases.map((p) => [p, 0])) as Record<string, number>;\n const total = zero();\n const done = zero();\n const planned = zero();\n const spent = zero();\n const defects = zero();\n const phaseOf = new Map<string, string | undefined>();\n const typeOf = new Map<string, string>();\n const status = new Map<string, string>();\n let traced = 0;\n let reqTotal = 0;\n let changeRequests = 0;\n let approved = 0;\n let rejected = 0;\n let reworkWeight = 0;\n let phasesReopened = 0;\n const counted = (id: string) => {\n const t = typeOf.get(id);\n const p = phaseOf.get(id);\n return t !== \"question\" && t !== \"change-request\" && p !== undefined && p in total;\n };\n for (const ev of state.events) {\n const p = (ev.payload ?? {}) as Record<string, unknown>;\n switch (ev.type) {\n case \"item.added\": {\n const a = p as Added;\n const phase = a.phase ?? (a.parent !== null ? phaseOf.get(a.parent) : undefined);\n phaseOf.set(a.id, phase);\n typeOf.set(a.id, a.type);\n status.set(a.id, \"todo\");\n if (a.type === \"change-request\") changeRequests += 1;\n if (counted(a.id)) {\n total[phase!]! += 1;\n if (a.type === \"bug\") defects[phase!]! += 1;\n }\n break;\n }\n case \"item.transition\": {\n const id = p[\"id\"] as string;\n const to = (p[\"to\"] as { status: string }).status;\n const was = status.get(id);\n status.set(id, to);\n if (!counted(id)) break;\n const phase = phaseOf.get(id)!;\n if (to === \"done\" && was !== \"done\") done[phase]! += 1;\n if (to === \"dropped\") {\n total[phase]! -= 1;\n if (was === \"done\") done[phase]! -= 1;\n }\n break;\n }\n case \"item.completed\": {\n const phase = phaseOf.get(p[\"id\"] as string);\n if (phase !== undefined && phase in spent) spent[phase]! += (p[\"tokens\"] as number) ?? 0;\n break;\n }\n case \"phase.opened\": {\n const phase = p[\"phase\"] as string;\n if (phase in planned)\n planned[phase] = ((p[\"budget\"] as { tokens?: number }) ?? {}).tokens ?? 0;\n break;\n }\n case \"traceability.computed\": {\n const c = p[\"coverage\"] as { traced: number; total: number };\n traced = c.traced;\n reqTotal = c.total;\n break;\n }\n case \"change.decided\": {\n if (p[\"decision\"] === \"approve\") {\n approved += 1;\n reworkWeight += (p[\"weight\"] as number) ?? 0;\n phasesReopened += ((p[\"reopened\"] as string[]) ?? []).length;\n } else rejected += 1;\n break;\n }\n default:\n break;\n }\n }\n const completion = zero();\n const variance = zero();\n for (const ph of phases) {\n const n = total[ph] ?? 0;\n completion[ph] = n === 0 ? 0 : ((done[ph] ?? 0) / n) * 100;\n variance[ph] = spent[ph]! - planned[ph]!;\n }\n const decided = approved + rejected;\n return {\n phaseCompletion: completion,\n budgetPlanned: planned,\n budgetSpent: spent,\n scheduleVariance: variance,\n requirementCoverage: reqTotal === 0 ? 0 : traced / reqTotal,\n requirementsTraced: traced,\n requirementsTotal: reqTotal,\n defectsPerPhase: defects,\n changeRequests,\n changesApproved: approved,\n changesRejected: rejected,\n changeApprovalRate: decided === 0 ? 0 : approved / decided,\n reworkWeight,\n phasesReopened,\n };\n}\n","import type { Role } from \"../types.ts\";\nimport { CHANGE_GATE, type WaterfallConfig } from \"./config.ts\";\n\n/** Order matters: the first role with \"deliver\" is the fallback deliverer for phases without deliverBy. */\nexport function waterfallRoles(config: WaterfallConfig): Role[] {\n const gates = config.phases.map((p) => p.gate.id);\n return [\n {\n id: \"project-manager\",\n name: \"Project Manager\",\n modelTier: \"large\",\n capabilities: [\"facilitate\", \"control-change\", \"approve-gate\", \"escalate\"],\n canApprove: [...gates, CHANGE_GATE],\n inputs: [\"phase-plan\", \"deliverables\", \"change-requests\"],\n outputs: [\"gate-decisions\", \"baselines\", \"change-decisions\"],\n do_not: [\n \"do not implement items yourself\",\n \"do not reopen a phase without an approved change-request\",\n ],\n },\n {\n id: \"developer\",\n name: \"Developer\",\n modelTier: \"small\",\n capabilities: [\"deliver\"],\n canApprove: [],\n inputs: [\"design-doc\", \"interface-spec\", \"brief\"],\n outputs: [\"code\", \"code-baseline\", \"test-output\"],\n do_not: [\n \"do not change requirements or designs; raise a change-request\",\n \"do not approve your own work\",\n ],\n },\n {\n id: \"business-analyst\",\n name: \"Business Analyst\",\n modelTier: \"medium\",\n capabilities: [\"define-acceptance\", \"deliver\"],\n canApprove: [],\n inputs: [\"stakeholder-needs\"],\n outputs: [\"srs\", \"acceptance-criteria\"],\n do_not: [\n \"do not design or implement\",\n \"do not edit a baselined requirement; raise a change-request\",\n ],\n },\n {\n id: \"architect\",\n name: \"Architect\",\n modelTier: \"medium\",\n capabilities: [\"deliver\"],\n canApprove: [],\n inputs: [\"srs\"],\n outputs: [\"design-doc\", \"interface-spec\"],\n do_not: [\"do not change requirements; raise a change-request\", \"do not implement\"],\n },\n {\n id: \"qa\",\n name: \"QA\",\n modelTier: \"small\",\n capabilities: [\"verify\", \"review\"],\n canApprove: [],\n inputs: [\"srs\", \"design-doc\", \"code-baseline\"],\n outputs: [\"test-report\", \"review-notes\"],\n do_not: [\"do not fix defects yourself; raise bugs\", \"do not approve phase gates\"],\n },\n {\n id: \"release-manager\",\n name: \"Release Manager\",\n modelTier: \"small\",\n capabilities: [\"deliver\"],\n canApprove: [],\n inputs: [\"code-baseline\", \"test-report\"],\n outputs: [\"release-notes\", \"deployment-record\"],\n do_not: [\"do not deploy an unbaselined verification phase\"],\n },\n ];\n}\n","import { authorOf } from \"../gates.ts\";\nimport { approverIds, rolesWith } from \"../roles.ts\";\nimport type {\n Action,\n ImpactAnalysis,\n NewItem,\n Phase,\n Rule,\n Violation,\n WorkflowState,\n} from \"../types.ts\";\nimport { configOf } from \"./config.ts\";\nimport {\n itemsInPhase,\n lastToPhase,\n missingDeliverables,\n openPhase,\n phaseOf,\n phasesOf,\n} from \"./phases.ts\";\nimport { missingTraces } from \"./traceability.ts\";\n\nconst v = (rule: string, message: string, fix: string, item?: string): Violation =>\n item\n ? { rule, severity: \"error\", item, message, fix }\n : { rule, severity: \"error\", message, fix };\nconst payloadOf = (a: Action): Record<string, unknown> =>\n (a.payload ?? {}) as Record<string, unknown>;\nconst isObj = (x: unknown): x is Record<string, unknown> =>\n typeof x === \"object\" && x !== null && !Array.isArray(x);\nconst phaseArg = (a: Action): string | undefined => {\n const p = payloadOf(a)[\"phase\"];\n return typeof p === \"string\" ? p : undefined;\n};\nconst phaseById = (s: WorkflowState, id: string): Phase | undefined =>\n phasesOf(s).find((p) => p.id === id);\nconst phaseIds = (s: WorkflowState) =>\n phasesOf(s)\n .map((p) => p.id)\n .join(\", \");\nconst itemById = (s: WorkflowState, id: unknown) =>\n typeof id === \"string\" && Object.hasOwn(s.items, id) ? s.items[id] : undefined;\n\n/** Phase a NewItem would land in: its own, else its parent's. */\nfunction phaseOfNew(s: WorkflowState, item: NewItem): string | undefined {\n if (item.phase !== undefined) return item.phase;\n const parent = itemById(s, item.parent);\n return parent ? phaseOf(s, parent) : undefined;\n}\nconst governed = (item: NewItem) => item.type !== \"change-request\" && item.type !== \"question\";\n\nconst frozenFix = (item: string, phase: string) =>\n `raise a change-request: addItem({ type: \"change-request\", affects: [\"${item}\"], impactAnalysis: { summary, reopen: [\"${phase}\"], weight } }) and decide it in changeControlBoard`;\n\nfunction changeOf(s: WorkflowState, a: Action) {\n const item = itemById(s, payloadOf(a)[\"change\"]);\n return item && item.type === \"change-request\" ? item : undefined;\n}\n\nexport function waterfallRules(): Rule[] {\n const sequential: Rule = {\n id: \"phase-sequential\",\n severity: \"error\",\n check(s, a) {\n const out: Violation[] = [];\n if (a.type === \"ceremony.kickoff\") {\n const id = phaseArg(a);\n const p = id === undefined ? undefined : phaseById(s, id);\n if (!p) return [];\n if (p.status === \"open\")\n out.push(\n v(\n \"phase-sequential\",\n `phase \"${p.id}\" is already open`,\n `gateReview \"${p.id}\" when its work is done`,\n ),\n );\n if (p.status === \"baselined\")\n out.push(\n v(\n \"phase-sequential\",\n `phase \"${p.id}\" is baselined`,\n \"only an approved change-request reopens a baselined phase\",\n ),\n );\n const open = openPhase(s);\n if (open && open.id !== p.id)\n out.push(\n v(\n \"phase-sequential\",\n `phase \"${open.id}\" is still open`,\n `pass its gate (gateReview \"${open.id}\") before opening \"${p.id}\"`,\n ),\n );\n } else if (a.type === \"item.add\") {\n const item = payloadOf(a)[\"item\"] as NewItem | undefined;\n if (!isObj(item) || !governed(item)) return [];\n const phase = phaseOfNew(s, item);\n if (phase === undefined)\n out.push(\n v(\n \"phase-sequential\",\n `item \"${item.id}\" belongs to no phase`,\n `set phase to one of: ${phaseIds(s)}`,\n item.id,\n ),\n );\n else if (!phaseById(s, phase))\n out.push(\n v(\n \"phase-sequential\",\n `item \"${item.id}\" names unknown phase \"${phase}\"`,\n `phases are: ${phaseIds(s)}`,\n item.id,\n ),\n );\n } else if (a.type === \"item.edit\") {\n const id = payloadOf(a)[\"id\"];\n const patch = payloadOf(a)[\"patch\"];\n const item = itemById(s, id);\n if (!item || !isObj(patch) || patch[\"phase\"] === undefined || patch[\"phase\"] === item.phase)\n return [];\n out.push(\n v(\n \"phase-sequential\",\n `item \"${item.id}\" cannot move from phase \"${item.phase ?? \"(none)\"}\" to \"${String(patch[\"phase\"])}\"`,\n `drop \"${item.id}\" and add a new item in phase \"${String(patch[\"phase\"])}\"`,\n item.id,\n ),\n );\n }\n return out;\n },\n };\n\n const gateBefore: Rule = {\n id: \"gate-before-next-phase\",\n severity: \"error\",\n check(s, a) {\n if (a.type !== \"ceremony.kickoff\") return [];\n const id = phaseArg(a);\n const phases = phasesOf(s);\n const idx = id === undefined ? -1 : phases.findIndex((p) => p.id === id);\n if (idx < 0) return [];\n const earlier = phases\n .slice(0, idx)\n .filter((p) => p.status !== \"baselined\")\n .map((p) => p.id);\n if (earlier.length === 0) return [];\n return [\n v(\n \"gate-before-next-phase\",\n `phase(s) ${earlier.join(\", \")} before \"${id}\" are not baselined`,\n `kickoff and gateReview them in order, starting with \"${earlier[0]}\"`,\n ),\n ];\n },\n };\n\n const immutable: Rule = {\n id: \"baseline-immutable\",\n severity: \"error\",\n check(s, a) {\n const version = (phase: string) =>\n (s.baselines ?? []).filter((b) => b.phase === phase).length || 1;\n if (a.type === \"item.edit\") {\n const item = itemById(s, payloadOf(a)[\"id\"]);\n if (!item) return [];\n const phase = phaseOf(s, item);\n if (phase === undefined || phaseById(s, phase)?.status !== \"baselined\") return [];\n return [\n v(\n \"baseline-immutable\",\n `item \"${item.id}\" is frozen: phase \"${phase}\" is baselined (v${version(phase)})`,\n frozenFix(item.id, phase),\n item.id,\n ),\n ];\n }\n if (a.type === \"item.add\") {\n const item = payloadOf(a)[\"item\"] as NewItem | undefined;\n if (!isObj(item) || !governed(item)) return [];\n const phase = phaseOfNew(s, item);\n if (phase === undefined || phaseById(s, phase)?.status !== \"baselined\") return [];\n return [\n v(\n \"baseline-immutable\",\n `cannot add \"${item.id}\" to baselined phase \"${phase}\" (v${version(phase)})`,\n frozenFix(item.id, phase),\n item.id,\n ),\n ];\n }\n return [];\n },\n };\n\n const impact: Rule = {\n id: \"change-needs-impact-analysis\",\n severity: \"error\",\n check(s, a) {\n if (a.type !== \"ceremony.changeControlBoard\") return [];\n const cr = changeOf(s, a);\n if (!cr) return [];\n const cfg = configOf(s).changeControl;\n const ia = cr.impactAnalysis as ImpactAnalysis | undefined;\n const fix = `editItem(\"${cr.id}\", { impactAnalysis: { summary: \"what changes and why\", reopen: [\"<phase>\"], weight: <points> } })`;\n if (ia === undefined) {\n return cfg.requiresImpactAnalysis\n ? [\n v(\n \"change-needs-impact-analysis\",\n `change \"${cr.id}\" has no impact analysis`,\n fix,\n cr.id,\n ),\n ]\n : [];\n }\n const out: Violation[] = [];\n if (!isObj(ia) || typeof ia.summary !== \"string\" || ia.summary.trim() === \"\")\n out.push(\n v(\n \"change-needs-impact-analysis\",\n `change \"${cr.id}\" impactAnalysis.summary is empty`,\n fix,\n cr.id,\n ),\n );\n if (!Array.isArray(ia.reopen) || !ia.reopen.every((x) => typeof x === \"string\"))\n out.push(\n v(\n \"change-needs-impact-analysis\",\n `change \"${cr.id}\" impactAnalysis.reopen must be a string[] of phase ids`,\n fix,\n cr.id,\n ),\n );\n if (typeof ia.weight !== \"number\" || !Number.isFinite(ia.weight) || ia.weight < 0)\n out.push(\n v(\n \"change-needs-impact-analysis\",\n `change \"${cr.id}\" impactAnalysis.weight must be a non-negative number`,\n fix,\n cr.id,\n ),\n );\n if (out.length) return out;\n const approve = payloadOf(a)[\"decision\"] === \"approve\";\n for (const id of ia.reopen) {\n const p = phaseById(s, id);\n if (!p)\n out.push(\n v(\n \"change-needs-impact-analysis\",\n `change \"${cr.id}\" impactAnalysis.reopen names unknown phase \"${id}\"`,\n `phases are: ${phaseIds(s)}`,\n cr.id,\n ),\n );\n else if (approve && p.status === \"pending\")\n out.push(\n v(\n \"change-needs-impact-analysis\",\n `phase \"${id}\" was never baselined; it cannot be reopened`,\n `remove \"${id}\" from impactAnalysis.reopen`,\n cr.id,\n ),\n );\n }\n return out;\n },\n };\n\n const traced: Rule = {\n id: \"requirement-traced\",\n severity: \"error\",\n check(s, a) {\n if (a.type !== \"ceremony.gateReview\") return [];\n const id = phaseArg(a);\n const cfg = configOf(s).traceability;\n if (id === undefined || !cfg.to.includes(id) || !phaseById(s, id)) return [];\n return missingTraces(s, id).map((item) =>\n v(\n \"requirement-traced\",\n `item \"${item}\" of phase \"${cfg.from}\" has no trace into \"${id}\"`,\n `editItem a \"${id}\" item with traces: [\"${item}\"] (or editItem(\"${item}\", { traces: [...] }) while \"${cfg.from}\" is not baselined)`,\n item,\n ),\n );\n },\n };\n\n const deliverables: Rule = {\n id: \"deliverables-present\",\n severity: \"error\",\n check(s, a) {\n if (a.type !== \"ceremony.gateReview\") return [];\n const id = phaseArg(a);\n const p = id === undefined ? undefined : phaseById(s, id);\n if (!p) return [];\n const out: Violation[] = [];\n const open = itemsInPhase(s, p.id)\n .filter((i) => i.status !== \"done\")\n .map((i) => i.id);\n if (open.length)\n out.push(\n v(\n \"deliverables-present\",\n `${open.length} item(s) in phase \"${p.id}\" are not done: ${open.join(\", \")}`,\n \"finish them (next/complete) or drop them before the gate\",\n ),\n );\n const given = payloadOf(a)[\"deliverables\"];\n const extra = Array.isArray(given)\n ? given\n .filter((d) => isObj(d) && typeof d[\"kind\"] === \"string\")\n .map((d) => (d as { kind: string }).kind)\n : [];\n if (p.id === lastToPhase(s)) extra.push(\"traceability-matrix\");\n for (const kind of missingDeliverables(s, p, extra))\n out.push(\n v(\n \"deliverables-present\",\n `phase \"${p.id}\" has no deliverable \"${kind}\"`,\n `pass deliverables: [{ \"kind\": \"${kind}\", \"ref\": \"<where it lives>\" }] to gateReview, or attach evidence of kind \"${kind}\" on an item of the phase`,\n ),\n );\n return out;\n },\n };\n\n const notAuthor: Rule = {\n id: \"approver-not-author\",\n severity: \"error\",\n check(s, a) {\n if (a.by === \"human\") return [];\n if (a.type === \"ceremony.gateReview\") {\n const id = phaseArg(a);\n const p = id === undefined ? undefined : phaseById(s, id);\n if (!p) return [];\n const mine = itemsInPhase(s, p.id)\n .filter((i) => authorOf(s, i) === a.by)\n .map((i) => i.id);\n if (mine.length === 0) return [];\n const others = approverIds(s, p.gate.id, \"approve-gate\", a.by);\n return [\n v(\n \"approver-not-author\",\n `\"${a.by}\" authored ${mine.join(\", \")} in phase \"${p.id}\" and may not approve its gate`,\n `review the gate as one of: human${others.map((r) => `, ${r}`).join(\"\")}`,\n ),\n ];\n }\n if (a.type === \"ceremony.changeControlBoard\") {\n const cr = changeOf(s, a);\n if (!cr) return [];\n const added = s.events.find(\n (e) => e.type === \"item.added\" && (e.payload as { id: string }).id === cr.id,\n );\n if (!added || added.by !== a.by) return [];\n const others = rolesWith(s, \"control-change\")\n .map((r) => r.id)\n .filter((r) => r !== a.by);\n return [\n v(\n \"approver-not-author\",\n `\"${a.by}\" raised change \"${cr.id}\" and may not decide it`,\n `decide as human${others.map((r) => `, ${r}`).join(\"\")}`,\n cr.id,\n ),\n ];\n }\n return [];\n },\n };\n\n return [sequential, gateBefore, immutable, impact, traced, deliverables, notAuthor];\n}\n","import type { Stage } from \"../types.ts\";\nimport type { WaterfallConfig } from \"./config.ts\";\nimport { DONE, REVIEW, WORK } from \"./phases.ts\";\n\n/** Every phase's items share the same three steps; the phase is the unit of governance. */\nexport function waterfallStages(_config: WaterfallConfig): Stage[] {\n return [\n { id: WORK, name: \"Work\", entryPolicy: [{ kind: \"dependencies-done\" }], exitPolicy: [] },\n {\n id: REVIEW,\n name: \"Review\",\n entryPolicy: [],\n exitPolicy: [{ kind: \"no-open-blockers\" }],\n review: true,\n },\n { id: DONE, name: \"Done\", entryPolicy: [], exitPolicy: [] },\n ];\n}\n","import { addSpent } from \"../budget.ts\";\nimport { openIteration } from \"../planner.ts\";\nimport type { CoreTerm, Methodology, PlannerOptions, WorkItem, WorkflowState } from \"../types.ts\";\nimport { configOf, validateWaterfallConfig, type WaterfallConfig } from \"./config.ts\";\nimport {\n REVIEW,\n WORK,\n currentPhase,\n itemsInPhase,\n missingDeliverables,\n openPhase,\n phaseIndex,\n phaseOf,\n phasesOf,\n} from \"./phases.ts\";\nimport { waterfallAfterDecide, waterfallCeremonies } from \"./ceremonies.ts\";\nimport { waterfallMetrics } from \"./metrics.ts\";\nimport { waterfallRoles } from \"./roles.ts\";\nimport { waterfallRules } from \"./rules.ts\";\nimport { waterfallStages } from \"./stages.ts\";\nimport { traceabilityMatrix } from \"./traceability.ts\";\n\nexport {\n validateWaterfallConfig,\n configOf,\n defaultPhases,\n DEFAULT_PHASE_IDS,\n DEFAULT_DELIVERABLES,\n DEFAULT_DELIVER_BY,\n GATE_ID,\n CHANGE_GATE,\n} from \"./config.ts\";\nexport type { WaterfallConfig, WaterfallPhaseConfig } from \"./config.ts\";\nexport {\n WORK,\n REVIEW,\n DONE,\n phasesOf,\n withPhases,\n getPhase,\n phaseIndex,\n phaseOf,\n itemsInPhase,\n openPhase,\n currentPhase,\n isFrozen,\n producedKinds,\n missingDeliverables,\n lastToPhase,\n} from \"./phases.ts\";\nexport { waterfallStages } from \"./stages.ts\";\nexport { waterfallRoles } from \"./roles.ts\";\nexport { waterfallRules } from \"./rules.ts\";\nexport { waterfallMetrics } from \"./metrics.ts\";\nexport type { WaterfallMetrics } from \"./metrics.ts\";\nexport {\n waterfallCeremonies,\n waterfallAfterDecide,\n wantPhase,\n approveChange,\n rejectChange,\n} from \"./ceremonies.ts\";\nexport { traceabilityMatrix, missingTraces } from \"./traceability.ts\";\nexport type { TraceabilityMatrix, TraceRow } from \"./traceability.ts\";\nexport { baselinePhase, reopenPhases } from \"./baseline.ts\";\nexport type { ReopenResult } from \"./baseline.ts\";\n\nexport const WATERFALL_VOCABULARY: Record<CoreTerm, string> = {\n backlog: \"Requirements Baseline\",\n item: \"Work Package\",\n stage: \"Step\",\n iteration: \"Phase\",\n increment: \"Deliverable\",\n ceremony: \"Review\",\n gate: \"Phase Gate\",\n};\n\n/** The role that delivers the item's phase (config deliverBy); undefined = the planner's default deliverer. */\nexport function deliverRoleFor(state: WorkflowState, item: WorkItem): string | undefined {\n const id = phaseOf(state, item);\n if (id === undefined) return undefined;\n return configOf(state).phases.find((p) => p.id === id)?.deliverBy;\n}\n\nexport interface PhaseReportRow {\n id: string;\n name: string;\n status: string;\n items: number;\n done: number;\n missingDeliverables: string[];\n readyForGate: boolean;\n}\nexport interface PhaseReport {\n phases: PhaseReportRow[];\n current: string | null;\n open: string | null;\n pendingGates: Array<{ pending: string; gate: string }>;\n}\n\nexport function phaseReport(state: WorkflowState): PhaseReport {\n const phases = phasesOf(state).map((p) => {\n const items = itemsInPhase(state, p.id);\n const done = items.filter((i) => i.status === \"done\").length;\n const missing = missingDeliverables(state, p);\n return {\n id: p.id,\n name: p.name,\n status: p.status,\n items: items.length,\n done,\n missingDeliverables: missing,\n readyForGate: p.status === \"open\" && done === items.length && missing.length === 0,\n };\n });\n return {\n phases,\n current: currentPhase(state)?.id ?? null,\n open: openPhase(state)?.id ?? null,\n pendingGates: state.pending\n .filter((p) => p.kind === \"gate\" && p.item === undefined && p.gate !== undefined)\n .map((p) => ({ pending: p.id, gate: p.gate! })),\n };\n}\n\nexport function waterfall(): Methodology<WaterfallConfig> {\n return {\n name: \"waterfall\",\n vocabulary: WATERFALL_VOCABULARY,\n validateConfig: validateWaterfallConfig,\n defaultStages: waterfallStages,\n defaultRoles: waterfallRoles,\n requiredCapabilities: [\"facilitate\", \"control-change\", \"approve-gate\", \"deliver\", \"verify\"],\n exclusiveCapabilities: [],\n plannerOptions(state): PlannerOptions {\n return {\n schedulerMode: \"level\",\n // questions keep the escalation role core gave them; reviews use the planner's reviewer logic\n roleFor: (item) =>\n item.status === \"todo\" && item.type !== \"question\"\n ? deliverRoleFor(state, item)\n : undefined,\n };\n },\n candidates(state): WorkItem[] {\n const open = openPhase(state);\n if (!open) return [];\n return Object.values(state.items).filter(\n (i) =>\n (i.status === \"todo\" || i.status === \"review\") &&\n (i.stage === WORK || i.stage === REVIEW) &&\n i.type !== \"change-request\" &&\n phaseOf(state, i) === open.id,\n );\n },\n invariants(state, item): string[] {\n const cfg = configOf(state);\n const phases = phasesOf(state);\n const id = phaseOf(state, item);\n const p = id === undefined ? undefined : phases[phaseIndex(state, id)];\n const frozen = phases.filter((x) => x.status === \"baselined\").map((x) => x.id);\n const human = p?.gate.requires.includes(\"human\");\n return [\n p\n ? `Phase \"${p.name}\" (${phaseIndex(state, p.id) + 1}/${phases.length}); deliverables: ${p.deliverables.join(\", \") || \"(none)\"}; gate \"${p.gate.id}\"${human ? \" needs human approval\" : \"\"}`\n : \"This item belongs to no phase; it is dispatched only through its parent's phase\",\n `Baselined phases are frozen: ${frozen.join(\", \") || \"(none yet)\"}; to change their items, raise a change-request with an impact analysis`,\n cfg.traceability.to.length\n ? `Traceability: every item of phase \"${cfg.traceability.from}\" must trace to an item in ${cfg.traceability.to.join(\", \")} (set traces on either side)`\n : \"Traceability: none configured\",\n `Do not change the scope of \"${item.id}\" or its acceptance criteria; raise open_questions instead`,\n ];\n },\n ceremonies: waterfallCeremonies(waterfall),\n rules: waterfallRules(),\n metrics: (state) => ({ ...waterfallMetrics(state) }),\n humanDefaults: { gates: \"all\" },\n report: (state) => ({ ...phaseReport(state), coverage: traceabilityMatrix(state).coverage }),\n afterDecide: waterfallAfterDecide,\n afterComplete(state, itemId, _now) {\n // an item added to the phase after kickoff is not in the iteration's committed list: count its spend now\n const it = openIteration(state);\n const open = openPhase(state);\n if (!it || !open || it.committed.includes(itemId)) return state;\n const item = state.items[itemId];\n if (!item || phaseOf(state, item) !== open.id) return state;\n const acc = state.accounting[state.accounting.length - 1];\n if (!acc || acc.item !== itemId) return state;\n return {\n ...state,\n iterations: state.iterations.map((x) =>\n x.id === it.id\n ? { ...x, committed: [...x.committed, itemId], spent: addSpent(x.spent, acc) }\n : x,\n ),\n };\n },\n };\n}\n"]}
|