ex-workflow 0.3.0-stage → 0.6.0-stage

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/CHANGELOG.md +52 -1
  2. package/README.md +73 -30
  3. package/dist/adapters/index.cjs +1 -1
  4. package/dist/adapters/index.mjs +1 -1
  5. package/dist/{roles-BLBRKhUZ.d.ts → budget-Cx63FX2K.d.ts} +9 -2
  6. package/dist/{roles-aneKYJ3Z.d.cts → budget-JyNKxP5N.d.cts} +9 -2
  7. package/dist/{chunk-7HZXZF3L.cjs → chunk-2OVYXXNV.cjs} +2 -2
  8. package/dist/chunk-2OVYXXNV.cjs.map +1 -0
  9. package/dist/chunk-3CLDZCHN.cjs +2 -0
  10. package/dist/chunk-3CLDZCHN.cjs.map +1 -0
  11. package/dist/chunk-5TXYMLBF.mjs +3 -0
  12. package/dist/chunk-5TXYMLBF.mjs.map +1 -0
  13. package/dist/chunk-7CDGPTEJ.mjs +2 -0
  14. package/dist/chunk-7CDGPTEJ.mjs.map +1 -0
  15. package/dist/chunk-7IG6EQI4.mjs +6 -0
  16. package/dist/chunk-7IG6EQI4.mjs.map +1 -0
  17. package/dist/chunk-GT57PLUT.mjs +2 -0
  18. package/dist/chunk-GT57PLUT.mjs.map +1 -0
  19. package/dist/chunk-IHE5K4X3.mjs +2 -0
  20. package/dist/chunk-IHE5K4X3.mjs.map +1 -0
  21. package/dist/chunk-KF5VQH3M.mjs +2 -0
  22. package/dist/chunk-KF5VQH3M.mjs.map +1 -0
  23. package/dist/chunk-MH66G5KV.cjs +2 -0
  24. package/dist/chunk-MH66G5KV.cjs.map +1 -0
  25. package/dist/chunk-N3QB2S7R.cjs +2 -0
  26. package/dist/chunk-N3QB2S7R.cjs.map +1 -0
  27. package/dist/chunk-NA53TZE4.mjs +2 -0
  28. package/dist/chunk-NA53TZE4.mjs.map +1 -0
  29. package/dist/chunk-TEPK5Y36.mjs +2 -0
  30. package/dist/chunk-TEPK5Y36.mjs.map +1 -0
  31. package/dist/chunk-UBFIKDIP.cjs +2 -0
  32. package/dist/chunk-UBFIKDIP.cjs.map +1 -0
  33. package/dist/chunk-UUOMQMWT.cjs +2 -0
  34. package/dist/chunk-UUOMQMWT.cjs.map +1 -0
  35. package/dist/chunk-WOGK54HB.cjs +3 -0
  36. package/dist/chunk-WOGK54HB.cjs.map +1 -0
  37. package/dist/chunk-YRATJT7P.cjs +6 -0
  38. package/dist/chunk-YRATJT7P.cjs.map +1 -0
  39. package/dist/chunk-Z3PU6EBI.mjs +2 -0
  40. package/dist/chunk-Z3PU6EBI.mjs.map +1 -0
  41. package/dist/chunk-ZTE7LREB.cjs +2 -0
  42. package/dist/chunk-ZTE7LREB.cjs.map +1 -0
  43. package/dist/cli/bin.cjs +1 -1
  44. package/dist/cli/bin.cjs.map +1 -1
  45. package/dist/cli/bin.mjs +1 -1
  46. package/dist/cli/bin.mjs.map +1 -1
  47. package/dist/cli/index.cjs +1 -1
  48. package/dist/cli/index.mjs +1 -1
  49. package/dist/index.cjs +1 -1
  50. package/dist/index.cjs.map +1 -1
  51. package/dist/index.d.cts +36 -13
  52. package/dist/index.d.ts +36 -13
  53. package/dist/index.mjs +1 -1
  54. package/dist/index.mjs.map +1 -1
  55. package/dist/kanban/index.cjs +1 -1
  56. package/dist/kanban/index.mjs +1 -1
  57. package/dist/schema/index.cjs +2 -0
  58. package/dist/schema/index.cjs.map +1 -0
  59. package/dist/schema/index.d.cts +57 -0
  60. package/dist/schema/index.d.ts +57 -0
  61. package/dist/schema/index.mjs +2 -0
  62. package/dist/schema/index.mjs.map +1 -0
  63. package/dist/scrum/index.cjs +1 -1
  64. package/dist/scrum/index.d.cts +18 -3
  65. package/dist/scrum/index.d.ts +18 -3
  66. package/dist/scrum/index.mjs +1 -1
  67. package/dist/types.d.cts +32 -3
  68. package/dist/types.d.ts +32 -3
  69. package/dist/waterfall/index.cjs +1 -1
  70. package/dist/waterfall/index.d.cts +2 -0
  71. package/dist/waterfall/index.d.ts +2 -0
  72. package/dist/waterfall/index.mjs +1 -1
  73. package/package.json +18 -2
  74. package/dist/chunk-23P7C25E.cjs +0 -2
  75. package/dist/chunk-23P7C25E.cjs.map +0 -1
  76. package/dist/chunk-2IKIBB73.cjs +0 -2
  77. package/dist/chunk-2IKIBB73.cjs.map +0 -1
  78. package/dist/chunk-4A4TD4MH.cjs +0 -2
  79. package/dist/chunk-4A4TD4MH.cjs.map +0 -1
  80. package/dist/chunk-6R3YFUUV.cjs +0 -6
  81. package/dist/chunk-6R3YFUUV.cjs.map +0 -1
  82. package/dist/chunk-7HZXZF3L.cjs.map +0 -1
  83. package/dist/chunk-AUZIQPFT.cjs +0 -2
  84. package/dist/chunk-AUZIQPFT.cjs.map +0 -1
  85. package/dist/chunk-BJEOTG6P.mjs +0 -2
  86. package/dist/chunk-BJEOTG6P.mjs.map +0 -1
  87. package/dist/chunk-FLCYD2QF.mjs +0 -2
  88. package/dist/chunk-FLCYD2QF.mjs.map +0 -1
  89. package/dist/chunk-NN3XJUHP.cjs +0 -2
  90. package/dist/chunk-NN3XJUHP.cjs.map +0 -1
  91. package/dist/chunk-P4P4JTE5.mjs +0 -2
  92. package/dist/chunk-P4P4JTE5.mjs.map +0 -1
  93. package/dist/chunk-R27STIER.mjs +0 -2
  94. package/dist/chunk-R27STIER.mjs.map +0 -1
  95. package/dist/chunk-TMKCALFT.cjs +0 -2
  96. package/dist/chunk-TMKCALFT.cjs.map +0 -1
  97. package/dist/chunk-UOGNVWVO.mjs +0 -2
  98. package/dist/chunk-UOGNVWVO.mjs.map +0 -1
  99. package/dist/chunk-VGD4V5BA.mjs +0 -6
  100. package/dist/chunk-VGD4V5BA.mjs.map +0 -1
  101. package/dist/chunk-WOKNWJKU.mjs +0 -2
  102. package/dist/chunk-WOKNWJKU.mjs.map +0 -1
  103. package/dist/chunk-ZX4DAMTG.mjs +0 -2
  104. package/dist/chunk-ZX4DAMTG.mjs.map +0 -1
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import { ErrorCode, WorkflowState, MethodologyName, Stage, Role, Event, WorkItem, Evidence, NewItem, ItemStatus, Policy, Violation, Gate, Methodology, Transition, PendingHuman, Budget, Accounting, Iteration, Brief, Handoff, ApplyResult, Rule, Action } from './types.js';
2
- export { Baseline, Blocker, Capability, Ceremony, CeremonyInput, ClassOfService, CoreTerm, GateRequirement, ImpactAnalysis, ItemType, Lesson, LessonChange, ModelTier, Phase, PlannerOptions, Produced, Verdict } from './types.js';
3
- export { a as approversFor, c as canDo, h as hasCapability, r as registerRole, b as requireCap, d as requireCapabilities, e as retireRole, f as rolesWith, s as separationLost } from './roles-BLBRKhUZ.js';
1
+ import { ErrorCode, WorkflowState, MethodologyName, Stage, Role, Event, Evidence, NewItem, ItemPatch, WorkItem, ItemStatus, Policy, Violation, Gate, Methodology, Transition, PendingHuman, Iteration, Brief, Handoff, Accounting, ApplyResult, Rule, Action } from './types.js';
2
+ export { Baseline, Blocker, Budget, Capability, Ceremony, CeremonyInput, ClassOfService, CoreTerm, GateRequirement, ImpactAnalysis, ItemType, Lesson, LessonChange, ModelTier, Phase, PlannerOptions, Produced, Spent, Verdict } from './types.js';
3
+ export { E as EstimateMode, Z as ZERO_SPENT, a as addSpent, b as approversFor, c as canDo, e as estimateTokens, h as hasCapability, i as isExhausted, r as registerRole, d as remaining, f as requireCap, g as requireCapabilities, j as retireRole, k as rolesWith, s as separationLost } from './budget-Cx63FX2K.js';
4
4
  import { ExNode } from 'ex-flow';
5
5
 
6
6
  interface WorkflowErrorExtra {
@@ -42,7 +42,7 @@ declare function nextStageOf(state: WorkflowState, stageId: string): Stage | und
42
42
  declare function isTerminalStage(state: WorkflowState, stageId: string): boolean;
43
43
  declare function getItem(state: WorkflowState, id: string): WorkItem;
44
44
  declare function addItem(state: WorkflowState, input: NewItem, by: string, now?: string): WorkflowState;
45
- type ItemPatch = Partial<Omit<WorkItem, "id" | "stage" | "status" | "transitions" | "evidence" | "blockers">>;
45
+
46
46
  declare function editItem(state: WorkflowState, id: string, patch: ItemPatch, by: string, now?: string): WorkflowState;
47
47
  declare function moveItem(state: WorkflowState, id: string, to: {
48
48
  stage?: string;
@@ -50,7 +50,15 @@ declare function moveItem(state: WorkflowState, id: string, to: {
50
50
  }, by: string, now?: string): WorkflowState;
51
51
  declare function addEvidence(state: WorkflowState, id: string, evidence: Omit<Evidence, "at">, now?: string): WorkflowState;
52
52
  declare function raiseBlocker(state: WorkflowState, id: string, reason: string, owner: string, by: string, now?: string): WorkflowState;
53
- declare function clearBlocker(state: WorkflowState, id: string, blockerId: string, by: string, now?: string): WorkflowState;
53
+ declare function clearBlocker(state: WorkflowState, id: string, blockerId: string, by: string, now?: string, note?: string): WorkflowState;
54
+
55
+ /** Adds an agreement (idempotent); with `replaces`, retires that one in the same step. */
56
+ declare function applyAgreement(state: WorkflowState, change: {
57
+ text: string;
58
+ replaces?: string;
59
+ }, by: string, now: string): WorkflowState;
60
+ /** Removes an agreement and records why it left (replacedBy null). */
61
+ declare function retireAgreement(state: WorkflowState, text: string, by: string, now: string): WorkflowState;
54
62
 
55
63
  declare function evaluatePolicies(state: WorkflowState, item: WorkItem, policies: Policy[]): Violation[];
56
64
  declare function assertPolicies(state: WorkflowState, item: WorkItem, policies: Policy[], context: string): void;
@@ -71,12 +79,6 @@ declare function checkGate(state: WorkflowState, item: WorkItem, gate: Gate, by:
71
79
  declare function raisePending(state: WorkflowState, pending: Omit<PendingHuman, "id" | "raisedAt">, now?: string): WorkflowState;
72
80
  declare function decide(state: WorkflowState, pendingId: string, decision: "approve" | "reject", by: string, note: string, now?: string, methodology?: Methodology): WorkflowState;
73
81
 
74
- declare const ZERO_SPENT: Required<Budget>;
75
- declare function addSpent(spent: Required<Budget>, acc: Accounting): Required<Budget>;
76
- declare function remaining(budget: Budget, spent: Required<Budget>): Budget;
77
- declare function isExhausted(budget: Budget, spent: Required<Budget>): boolean;
78
- declare function estimateTokens(state: WorkflowState, weight: number | undefined, fallbackPerWeight?: number): number;
79
-
80
82
  type NodeData = {
81
83
  id: string;
82
84
  };
@@ -105,6 +107,13 @@ interface PlanResult {
105
107
  declare function plan(state: WorkflowState, methodology: Methodology, opts?: PlanOptions): PlanResult;
106
108
 
107
109
  declare function synthesizeBrief(state: WorkflowState, methodology: Methodology, item: WorkItem): Brief;
110
+ /** Open questions of finished items: the last completion per item, verdict done/needs-review, with open_questions left unanswered. */
111
+ declare function openQuestions(state: WorkflowState): Array<{
112
+ item: string;
113
+ role: string;
114
+ questions: string[];
115
+ at: string;
116
+ }>;
108
117
  interface NextResult {
109
118
  state: WorkflowState;
110
119
  briefs: Brief[];
@@ -115,6 +124,18 @@ declare function next(state: WorkflowState, methodology: Methodology, opts?: Pla
115
124
 
116
125
  declare function complete(state: WorkflowState, methodology: Methodology, handoff: Handoff, acc: Accounting, now?: string): ApplyResult;
117
126
 
127
+ interface AccountingPatch {
128
+ tokensIn?: number;
129
+ tokensOut?: number;
130
+ durationMs?: number;
131
+ model?: string;
132
+ }
133
+ /**
134
+ * Rewrite one accounting line of an item (`line` is 1-based among the item's lines, default the last).
135
+ * The owning iteration's spent follows the delta, open or closed; the event records before/after.
136
+ */
137
+ declare function correctAccounting(state: WorkflowState, itemId: string, patch: AccountingPatch, by: string, now?: string, line?: number): WorkflowState;
138
+
118
139
  declare function coreRulesFor(methodology: Pick<Methodology, "requiredCapabilities">): Rule[];
119
140
 
120
141
  declare function validateAction(state: WorkflowState, methodology: Methodology, action: Action): Violation[];
@@ -128,7 +149,9 @@ interface InitInput<C> {
128
149
  now?: string;
129
150
  }
130
151
  declare function init<C>(input: InitInput<C>): ApplyResult;
152
+ /** Change the config between iterations: re-validated, recorded as config.changed, derived state kept in step by the methodology hook. */
153
+ declare function changeConfig(state: WorkflowState, methodology: Methodology, patch: Record<string, unknown>, by: string, now?: string): ApplyResult;
131
154
 
132
- declare const VERSION = "0.3.0-stage";
155
+ declare const VERSION = "0.6.0-stage";
133
156
 
134
- export { Accounting, Action, ApplyResult, Brief, Budget, ErrorCode, Event, Evidence, Gate, type GateResult, Handoff, type InitInput, type ItemPatch, ItemStatus, Iteration, Methodology, MethodologyName, NewItem, type NextResult, PendingHuman, type PlanOptions, type PlanReason, type PlanResult, Policy, Role, Rule, type Skipped, Stage, Transition, VERSION, Violation, WorkItem, WorkflowError, WorkflowState, ZERO_SPENT, addEvidence, addItem, addSpent, appendEvent, applyAction, assertId, assertPolicies, assignRole, authorOf, checkGate, clearBlocker, complete, coreRulesFor, createState, decide, editItem, estimateTokens, evaluatePolicies, fail, getItem, init, isExhausted, isTerminalStage, lastDispatchBefore, lastEvent, moveItem, next, nextStageOf, nowOf, openIteration, plan, raiseBlocker, raisePending, remaining, resourceCapsFor, stageOf, synthesizeBrief, toExNodes, validateAction };
157
+ export { Accounting, type AccountingPatch, Action, ApplyResult, Brief, ErrorCode, Event, Evidence, Gate, type GateResult, Handoff, type InitInput, ItemPatch, ItemStatus, Iteration, Methodology, MethodologyName, NewItem, type NextResult, PendingHuman, type PlanOptions, type PlanReason, type PlanResult, Policy, Role, Rule, type Skipped, Stage, Transition, VERSION, Violation, WorkItem, WorkflowError, WorkflowState, addEvidence, addItem, appendEvent, applyAction, applyAgreement, assertId, assertPolicies, assignRole, authorOf, changeConfig, checkGate, clearBlocker, complete, coreRulesFor, correctAccounting, createState, decide, editItem, evaluatePolicies, fail, getItem, init, isTerminalStage, lastDispatchBefore, lastEvent, moveItem, next, nextStageOf, nowOf, openIteration, openQuestions, plan, raiseBlocker, raisePending, resourceCapsFor, retireAgreement, stageOf, synthesizeBrief, toExNodes, validateAction };
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import'./chunk-KIQOUUEZ.mjs';export{c as complete,b as next,a as synthesizeBrief}from'./chunk-WOKNWJKU.mjs';export{a as ZERO_SPENT,b as addSpent,g as assignRole,e as estimateTokens,d as isExhausted,f as openIteration,j as plan,c as remaining,h as resourceCapsFor,i as toExNodes}from'./chunk-ZX4DAMTG.mjs';export{y as addEvidence,v as addItem,c as appendEvent,M as applyAction,k as approversFor,E as assertPolicies,G as authorOf,n as canDo,H as checkGate,A as clearBlocker,K as coreRulesFor,b as createState,J as decide,w as editItem,D as evaluatePolicies,u as getItem,h as hasCapability,N as init,r as isTerminalStage,F as lastDispatchBefore,d as lastEvent,x as moveItem,q as nextStageOf,a as nowOf,z as raiseBlocker,I as raisePending,f as registerRole,o as requireCap,l as requireCapabilities,g as retireRole,i as rolesWith,m as separationLost,p as stageOf,L as validateAction}from'./chunk-FLCYD2QF.mjs';export{a as WorkflowError,c as assertId,b as fail}from'./chunk-2FRRD6A3.mjs';var U="0.3.0-stage";export{U as VERSION};//# sourceMappingURL=index.mjs.map
1
+ import'./chunk-KIQOUUEZ.mjs';export{d as complete,e as correctAccounting,c as next,b as openQuestions,a as synthesizeBrief}from'./chunk-TEPK5Y36.mjs';export{a as applyAgreement,b as retireAgreement}from'./chunk-IHE5K4X3.mjs';export{K as ZERO_SPENT,y as addEvidence,v as addItem,L as addSpent,c as appendEvent,W as applyAction,k as approversFor,E as assertPolicies,Q as assignRole,G as authorOf,n as canDo,Y as changeConfig,H as checkGate,A as clearBlocker,U as coreRulesFor,b as createState,J as decide,w as editItem,O as estimateTokens,D as evaluatePolicies,u as getItem,h as hasCapability,X as init,N as isExhausted,r as isTerminalStage,F as lastDispatchBefore,d as lastEvent,x as moveItem,q as nextStageOf,a as nowOf,P as openIteration,T as plan,z as raiseBlocker,I as raisePending,f as registerRole,M as remaining,o as requireCap,l as requireCapabilities,R as resourceCapsFor,g as retireRole,i as rolesWith,m as separationLost,p as stageOf,S as toExNodes,V as validateAction}from'./chunk-Z3PU6EBI.mjs';export{a as WorkflowError,c as assertId,b as fail}from'./chunk-2FRRD6A3.mjs';var te="0.6.0-stage";export{te as VERSION};//# sourceMappingURL=index.mjs.map
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":["VERSION"],"mappings":"s9BAAO,IAAMA,CAAAA,CAAU","file":"index.mjs","sourcesContent":["export const VERSION = \"0.3.0-stage\";\nexport * from \"./types.ts\";\nexport { WorkflowError, fail } from \"./errors.ts\";\nexport { createState, appendEvent, lastEvent, nowOf } from \"./state.ts\";\nexport {\n registerRole,\n retireRole,\n hasCapability,\n rolesWith,\n approversFor,\n requireCapabilities,\n separationLost,\n canDo,\n requireCap,\n} from \"./roles.ts\";\nexport {\n assertId,\n stageOf,\n nextStageOf,\n isTerminalStage,\n getItem,\n addItem,\n editItem,\n moveItem,\n addEvidence,\n raiseBlocker,\n clearBlocker,\n} from \"./items.ts\";\nexport type { ItemPatch } from \"./items.ts\";\nexport { evaluatePolicies, assertPolicies } from \"./policies.ts\";\nexport { checkGate, authorOf, lastDispatchBefore, raisePending, decide } from \"./gates.ts\";\nexport type { GateResult } from \"./gates.ts\";\nexport { ZERO_SPENT, addSpent, remaining, isExhausted, estimateTokens } from \"./budget.ts\";\nexport { plan, toExNodes, assignRole, resourceCapsFor, openIteration } from \"./planner.ts\";\nexport type { PlanOptions, PlanReason, PlanResult, Skipped } from \"./planner.ts\";\nexport { synthesizeBrief, next } from \"./brief.ts\";\nexport type { NextResult } from \"./brief.ts\";\nexport { complete } from \"./complete.ts\";\nexport { coreRulesFor } from \"./rules.ts\";\nexport { applyAction, validateAction, init } from \"./methodology.ts\";\nexport type { InitInput } from \"./methodology.ts\";\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":["VERSION"],"mappings":"2jCAAO,IAAMA,EAAAA,CAAU","file":"index.mjs","sourcesContent":["export const VERSION = \"0.6.0-stage\";\nexport * from \"./types.ts\";\nexport { WorkflowError, fail } from \"./errors.ts\";\nexport { createState, appendEvent, lastEvent, nowOf } from \"./state.ts\";\nexport {\n registerRole,\n retireRole,\n hasCapability,\n rolesWith,\n approversFor,\n requireCapabilities,\n separationLost,\n canDo,\n requireCap,\n} from \"./roles.ts\";\nexport {\n assertId,\n stageOf,\n nextStageOf,\n isTerminalStage,\n getItem,\n addItem,\n editItem,\n moveItem,\n addEvidence,\n raiseBlocker,\n clearBlocker,\n} from \"./items.ts\";\nexport type { ItemPatch } from \"./items.ts\";\nexport { applyAgreement, retireAgreement } from \"./agreements.ts\";\nexport { evaluatePolicies, assertPolicies } from \"./policies.ts\";\nexport { checkGate, authorOf, lastDispatchBefore, raisePending, decide } from \"./gates.ts\";\nexport type { GateResult } from \"./gates.ts\";\nexport { ZERO_SPENT, addSpent, remaining, isExhausted, estimateTokens } from \"./budget.ts\";\nexport type { EstimateMode } from \"./budget.ts\";\nexport { plan, toExNodes, assignRole, resourceCapsFor, openIteration } from \"./planner.ts\";\nexport type { PlanOptions, PlanReason, PlanResult, Skipped } from \"./planner.ts\";\nexport { synthesizeBrief, next, openQuestions } from \"./brief.ts\";\nexport type { NextResult } from \"./brief.ts\";\nexport { complete } from \"./complete.ts\";\nexport { correctAccounting } from \"./accounting.ts\";\nexport type { AccountingPatch } from \"./accounting.ts\";\nexport { coreRulesFor } from \"./rules.ts\";\nexport { applyAction, validateAction, init, changeConfig } from \"./methodology.ts\";\nexport type { InitInput } from \"./methodology.ts\";\n"]}
@@ -1,2 +1,2 @@
1
- 'use strict';var chunk7HZXZF3L_cjs=require('../chunk-7HZXZF3L.cjs');require('../chunk-23P7C25E.cjs'),require('../chunk-S3BXVHO7.cjs');Object.defineProperty(exports,"ACTIVE",{enumerable:true,get:function(){return chunk7HZXZF3L_cjs.a}});Object.defineProperty(exports,"CADENCE_EVENT",{enumerable:true,get:function(){return chunk7HZXZF3L_cjs.s}});Object.defineProperty(exports,"CLASSES",{enumerable:true,get:function(){return chunk7HZXZF3L_cjs.k}});Object.defineProperty(exports,"DAY_MS",{enumerable:true,get:function(){return chunk7HZXZF3L_cjs.l}});Object.defineProperty(exports,"DEFAULT_COLUMNS",{enumerable:true,get:function(){return chunk7HZXZF3L_cjs.n}});Object.defineProperty(exports,"KANBAN_CADENCES",{enumerable:true,get:function(){return chunk7HZXZF3L_cjs.j}});Object.defineProperty(exports,"KANBAN_VOCABULARY",{enumerable:true,get:function(){return chunk7HZXZF3L_cjs.F}});Object.defineProperty(exports,"OPEN",{enumerable:true,get:function(){return chunk7HZXZF3L_cjs.b}});Object.defineProperty(exports,"activeExpedites",{enumerable:true,get:function(){return chunk7HZXZF3L_cjs.h}});Object.defineProperty(exports,"addedAt",{enumerable:true,get:function(){return chunk7HZXZF3L_cjs.p}});Object.defineProperty(exports,"board",{enumerable:true,get:function(){return chunk7HZXZF3L_cjs.r}});Object.defineProperty(exports,"byClassThenAge",{enumerable:true,get:function(){return chunk7HZXZF3L_cjs.H}});Object.defineProperty(exports,"cadencesDue",{enumerable:true,get:function(){return chunk7HZXZF3L_cjs.t}});Object.defineProperty(exports,"cardAge",{enumerable:true,get:function(){return chunk7HZXZF3L_cjs.q}});Object.defineProperty(exports,"columnIndex",{enumerable:true,get:function(){return chunk7HZXZF3L_cjs.f}});Object.defineProperty(exports,"columnStays",{enumerable:true,get:function(){return chunk7HZXZF3L_cjs.w}});Object.defineProperty(exports,"commitmentColumn",{enumerable:true,get:function(){return chunk7HZXZF3L_cjs.d}});Object.defineProperty(exports,"configOf",{enumerable:true,get:function(){return chunk7HZXZF3L_cjs.m}});Object.defineProperty(exports,"deliveryColumn",{enumerable:true,get:function(){return chunk7HZXZF3L_cjs.e}});Object.defineProperty(exports,"enteredStageAt",{enumerable:true,get:function(){return chunk7HZXZF3L_cjs.i}});Object.defineProperty(exports,"kanban",{enumerable:true,get:function(){return chunk7HZXZF3L_cjs.I}});Object.defineProperty(exports,"kanbanCeremonies",{enumerable:true,get:function(){return chunk7HZXZF3L_cjs.B}});Object.defineProperty(exports,"kanbanMetrics",{enumerable:true,get:function(){return chunk7HZXZF3L_cjs.x}});Object.defineProperty(exports,"kanbanRoles",{enumerable:true,get:function(){return chunk7HZXZF3L_cjs.C}});Object.defineProperty(exports,"kanbanRules",{enumerable:true,get:function(){return chunk7HZXZF3L_cjs.D}});Object.defineProperty(exports,"kanbanStages",{enumerable:true,get:function(){return chunk7HZXZF3L_cjs.E}});Object.defineProperty(exports,"onBoard",{enumerable:true,get:function(){return chunk7HZXZF3L_cjs.g}});Object.defineProperty(exports,"opsReport",{enumerable:true,get:function(){return chunk7HZXZF3L_cjs.y}});Object.defineProperty(exports,"optionsColumn",{enumerable:true,get:function(){return chunk7HZXZF3L_cjs.c}});Object.defineProperty(exports,"percentile",{enumerable:true,get:function(){return chunk7HZXZF3L_cjs.v}});Object.defineProperty(exports,"priorityByClass",{enumerable:true,get:function(){return chunk7HZXZF3L_cjs.G}});Object.defineProperty(exports,"replay",{enumerable:true,get:function(){return chunk7HZXZF3L_cjs.u}});Object.defineProperty(exports,"riskReport",{enumerable:true,get:function(){return chunk7HZXZF3L_cjs.z}});Object.defineProperty(exports,"validateKanbanConfig",{enumerable:true,get:function(){return chunk7HZXZF3L_cjs.o}});Object.defineProperty(exports,"wantItems",{enumerable:true,get:function(){return chunk7HZXZF3L_cjs.A}});//# sourceMappingURL=index.cjs.map
1
+ 'use strict';var chunk2OVYXXNV_cjs=require('../chunk-2OVYXXNV.cjs');require('../chunk-ZTE7LREB.cjs'),require('../chunk-S3BXVHO7.cjs');Object.defineProperty(exports,"ACTIVE",{enumerable:true,get:function(){return chunk2OVYXXNV_cjs.a}});Object.defineProperty(exports,"CADENCE_EVENT",{enumerable:true,get:function(){return chunk2OVYXXNV_cjs.s}});Object.defineProperty(exports,"CLASSES",{enumerable:true,get:function(){return chunk2OVYXXNV_cjs.k}});Object.defineProperty(exports,"DAY_MS",{enumerable:true,get:function(){return chunk2OVYXXNV_cjs.l}});Object.defineProperty(exports,"DEFAULT_COLUMNS",{enumerable:true,get:function(){return chunk2OVYXXNV_cjs.n}});Object.defineProperty(exports,"KANBAN_CADENCES",{enumerable:true,get:function(){return chunk2OVYXXNV_cjs.j}});Object.defineProperty(exports,"KANBAN_VOCABULARY",{enumerable:true,get:function(){return chunk2OVYXXNV_cjs.F}});Object.defineProperty(exports,"OPEN",{enumerable:true,get:function(){return chunk2OVYXXNV_cjs.b}});Object.defineProperty(exports,"activeExpedites",{enumerable:true,get:function(){return chunk2OVYXXNV_cjs.h}});Object.defineProperty(exports,"addedAt",{enumerable:true,get:function(){return chunk2OVYXXNV_cjs.p}});Object.defineProperty(exports,"board",{enumerable:true,get:function(){return chunk2OVYXXNV_cjs.r}});Object.defineProperty(exports,"byClassThenAge",{enumerable:true,get:function(){return chunk2OVYXXNV_cjs.H}});Object.defineProperty(exports,"cadencesDue",{enumerable:true,get:function(){return chunk2OVYXXNV_cjs.t}});Object.defineProperty(exports,"cardAge",{enumerable:true,get:function(){return chunk2OVYXXNV_cjs.q}});Object.defineProperty(exports,"columnIndex",{enumerable:true,get:function(){return chunk2OVYXXNV_cjs.f}});Object.defineProperty(exports,"columnStays",{enumerable:true,get:function(){return chunk2OVYXXNV_cjs.w}});Object.defineProperty(exports,"commitmentColumn",{enumerable:true,get:function(){return chunk2OVYXXNV_cjs.d}});Object.defineProperty(exports,"configOf",{enumerable:true,get:function(){return chunk2OVYXXNV_cjs.m}});Object.defineProperty(exports,"deliveryColumn",{enumerable:true,get:function(){return chunk2OVYXXNV_cjs.e}});Object.defineProperty(exports,"enteredStageAt",{enumerable:true,get:function(){return chunk2OVYXXNV_cjs.i}});Object.defineProperty(exports,"kanban",{enumerable:true,get:function(){return chunk2OVYXXNV_cjs.I}});Object.defineProperty(exports,"kanbanCeremonies",{enumerable:true,get:function(){return chunk2OVYXXNV_cjs.B}});Object.defineProperty(exports,"kanbanMetrics",{enumerable:true,get:function(){return chunk2OVYXXNV_cjs.x}});Object.defineProperty(exports,"kanbanRoles",{enumerable:true,get:function(){return chunk2OVYXXNV_cjs.C}});Object.defineProperty(exports,"kanbanRules",{enumerable:true,get:function(){return chunk2OVYXXNV_cjs.D}});Object.defineProperty(exports,"kanbanStages",{enumerable:true,get:function(){return chunk2OVYXXNV_cjs.E}});Object.defineProperty(exports,"onBoard",{enumerable:true,get:function(){return chunk2OVYXXNV_cjs.g}});Object.defineProperty(exports,"opsReport",{enumerable:true,get:function(){return chunk2OVYXXNV_cjs.y}});Object.defineProperty(exports,"optionsColumn",{enumerable:true,get:function(){return chunk2OVYXXNV_cjs.c}});Object.defineProperty(exports,"percentile",{enumerable:true,get:function(){return chunk2OVYXXNV_cjs.v}});Object.defineProperty(exports,"priorityByClass",{enumerable:true,get:function(){return chunk2OVYXXNV_cjs.G}});Object.defineProperty(exports,"replay",{enumerable:true,get:function(){return chunk2OVYXXNV_cjs.u}});Object.defineProperty(exports,"riskReport",{enumerable:true,get:function(){return chunk2OVYXXNV_cjs.z}});Object.defineProperty(exports,"validateKanbanConfig",{enumerable:true,get:function(){return chunk2OVYXXNV_cjs.o}});Object.defineProperty(exports,"wantItems",{enumerable:true,get:function(){return chunk2OVYXXNV_cjs.A}});//# sourceMappingURL=index.cjs.map
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1,2 +1,2 @@
1
- export{a as ACTIVE,s as CADENCE_EVENT,k as CLASSES,l as DAY_MS,n as DEFAULT_COLUMNS,j as KANBAN_CADENCES,F as KANBAN_VOCABULARY,b as OPEN,h as activeExpedites,p as addedAt,r as board,H as byClassThenAge,t as cadencesDue,q as cardAge,f as columnIndex,w as columnStays,d as commitmentColumn,m as configOf,e as deliveryColumn,i as enteredStageAt,I as kanban,B as kanbanCeremonies,x as kanbanMetrics,C as kanbanRoles,D as kanbanRules,E as kanbanStages,g as onBoard,y as opsReport,c as optionsColumn,v as percentile,G as priorityByClass,u as replay,z as riskReport,o as validateKanbanConfig,A as wantItems}from'../chunk-UOGNVWVO.mjs';import'../chunk-FLCYD2QF.mjs';import'../chunk-2FRRD6A3.mjs';//# sourceMappingURL=index.mjs.map
1
+ export{a as ACTIVE,s as CADENCE_EVENT,k as CLASSES,l as DAY_MS,n as DEFAULT_COLUMNS,j as KANBAN_CADENCES,F as KANBAN_VOCABULARY,b as OPEN,h as activeExpedites,p as addedAt,r as board,H as byClassThenAge,t as cadencesDue,q as cardAge,f as columnIndex,w as columnStays,d as commitmentColumn,m as configOf,e as deliveryColumn,i as enteredStageAt,I as kanban,B as kanbanCeremonies,x as kanbanMetrics,C as kanbanRoles,D as kanbanRules,E as kanbanStages,g as onBoard,y as opsReport,c as optionsColumn,v as percentile,G as priorityByClass,u as replay,z as riskReport,o as validateKanbanConfig,A as wantItems}from'../chunk-GT57PLUT.mjs';import'../chunk-Z3PU6EBI.mjs';import'../chunk-2FRRD6A3.mjs';//# sourceMappingURL=index.mjs.map
2
2
  //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,2 @@
1
+ 'use strict';var chunkWOGK54HB_cjs=require('../chunk-WOGK54HB.cjs');require('../chunk-S3BXVHO7.cjs');Object.defineProperty(exports,"DRAFT_07",{enumerable:true,get:function(){return chunkWOGK54HB_cjs.c}});Object.defineProperty(exports,"assertValid",{enumerable:true,get:function(){return chunkWOGK54HB_cjs.b}});Object.defineProperty(exports,"handoffSchema",{enumerable:true,get:function(){return chunkWOGK54HB_cjs.h}});Object.defineProperty(exports,"itemPatchSchema",{enumerable:true,get:function(){return chunkWOGK54HB_cjs.g}});Object.defineProperty(exports,"kanbanConfigSchema",{enumerable:true,get:function(){return chunkWOGK54HB_cjs.j}});Object.defineProperty(exports,"newItemSchema",{enumerable:true,get:function(){return chunkWOGK54HB_cjs.f}});Object.defineProperty(exports,"roleSchema",{enumerable:true,get:function(){return chunkWOGK54HB_cjs.e}});Object.defineProperty(exports,"scrumConfigSchema",{enumerable:true,get:function(){return chunkWOGK54HB_cjs.i}});Object.defineProperty(exports,"validate",{enumerable:true,get:function(){return chunkWOGK54HB_cjs.a}});Object.defineProperty(exports,"waterfallConfigSchema",{enumerable:true,get:function(){return chunkWOGK54HB_cjs.k}});Object.defineProperty(exports,"workflowStateSchema",{enumerable:true,get:function(){return chunkWOGK54HB_cjs.d}});//# sourceMappingURL=index.cjs.map
2
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.cjs"}
@@ -0,0 +1,57 @@
1
+ /** The JSON Schema (draft-07) subset ts-json-schema-generator emits for our types and the validator understands. */
2
+ interface JsonSchema {
3
+ $schema?: string;
4
+ $ref?: string;
5
+ definitions?: Record<string, JsonSchema>;
6
+ type?: string | string[];
7
+ const?: unknown;
8
+ enum?: unknown[];
9
+ properties?: Record<string, JsonSchema>;
10
+ required?: string[];
11
+ additionalProperties?: boolean | JsonSchema;
12
+ items?: JsonSchema;
13
+ anyOf?: JsonSchema[];
14
+ minimum?: number;
15
+ maximum?: number;
16
+ minLength?: number;
17
+ pattern?: string;
18
+ description?: string;
19
+ }
20
+ /** A self-contained document: the root points into its own definitions. */
21
+ interface JsonSchemaDocument extends JsonSchema {
22
+ $schema: string;
23
+ $ref: string;
24
+ definitions: Record<string, JsonSchema>;
25
+ }
26
+ interface SchemaError {
27
+ /** JSON pointer to the offending value ("/" for the root) */
28
+ path: string;
29
+ /** which keyword failed: type, const, enum, required, additionalProperties, minimum, maximum, minLength, pattern */
30
+ keyword: string;
31
+ message: string;
32
+ expected: string;
33
+ found: string;
34
+ }
35
+
36
+ /** Validate `value` against `schema` (a document: `$ref`s resolve against its `definitions`). Returns every error found. */
37
+ declare function validate(schema: JsonSchema, value: unknown): SchemaError[];
38
+ /** Throw WorkflowError("invalid-input") describing the first problem when `value` does not match `schema`. */
39
+ declare function assertValid(schema: JsonSchema, value: unknown, what: string): void;
40
+
41
+ declare const DRAFT_07 = "http://json-schema.org/draft-07/schema#";
42
+ /** `.workflow/state.json` */
43
+ declare const workflowStateSchema: JsonSchemaDocument;
44
+ /** a role manifest (`.workflow/roles/*.json`, `exwf role add`) */
45
+ declare const roleSchema: JsonSchemaDocument;
46
+ /** `exwf add <item.json>` */
47
+ declare const newItemSchema: JsonSchemaDocument;
48
+ /** `exwf edit <id> <patch.json>` */
49
+ declare const itemPatchSchema: JsonSchemaDocument;
50
+ /** `exwf complete <id> <handoff.json>` */
51
+ declare const handoffSchema: JsonSchemaDocument;
52
+ /** `exwf init scrum --config` / the scrum-master policy.json */
53
+ declare const scrumConfigSchema: JsonSchemaDocument;
54
+ declare const kanbanConfigSchema: JsonSchemaDocument;
55
+ declare const waterfallConfigSchema: JsonSchemaDocument;
56
+
57
+ export { DRAFT_07, type JsonSchema, type JsonSchemaDocument, type SchemaError, assertValid, handoffSchema, itemPatchSchema, kanbanConfigSchema, newItemSchema, roleSchema, scrumConfigSchema, validate, waterfallConfigSchema, workflowStateSchema };
@@ -0,0 +1,57 @@
1
+ /** The JSON Schema (draft-07) subset ts-json-schema-generator emits for our types and the validator understands. */
2
+ interface JsonSchema {
3
+ $schema?: string;
4
+ $ref?: string;
5
+ definitions?: Record<string, JsonSchema>;
6
+ type?: string | string[];
7
+ const?: unknown;
8
+ enum?: unknown[];
9
+ properties?: Record<string, JsonSchema>;
10
+ required?: string[];
11
+ additionalProperties?: boolean | JsonSchema;
12
+ items?: JsonSchema;
13
+ anyOf?: JsonSchema[];
14
+ minimum?: number;
15
+ maximum?: number;
16
+ minLength?: number;
17
+ pattern?: string;
18
+ description?: string;
19
+ }
20
+ /** A self-contained document: the root points into its own definitions. */
21
+ interface JsonSchemaDocument extends JsonSchema {
22
+ $schema: string;
23
+ $ref: string;
24
+ definitions: Record<string, JsonSchema>;
25
+ }
26
+ interface SchemaError {
27
+ /** JSON pointer to the offending value ("/" for the root) */
28
+ path: string;
29
+ /** which keyword failed: type, const, enum, required, additionalProperties, minimum, maximum, minLength, pattern */
30
+ keyword: string;
31
+ message: string;
32
+ expected: string;
33
+ found: string;
34
+ }
35
+
36
+ /** Validate `value` against `schema` (a document: `$ref`s resolve against its `definitions`). Returns every error found. */
37
+ declare function validate(schema: JsonSchema, value: unknown): SchemaError[];
38
+ /** Throw WorkflowError("invalid-input") describing the first problem when `value` does not match `schema`. */
39
+ declare function assertValid(schema: JsonSchema, value: unknown, what: string): void;
40
+
41
+ declare const DRAFT_07 = "http://json-schema.org/draft-07/schema#";
42
+ /** `.workflow/state.json` */
43
+ declare const workflowStateSchema: JsonSchemaDocument;
44
+ /** a role manifest (`.workflow/roles/*.json`, `exwf role add`) */
45
+ declare const roleSchema: JsonSchemaDocument;
46
+ /** `exwf add <item.json>` */
47
+ declare const newItemSchema: JsonSchemaDocument;
48
+ /** `exwf edit <id> <patch.json>` */
49
+ declare const itemPatchSchema: JsonSchemaDocument;
50
+ /** `exwf complete <id> <handoff.json>` */
51
+ declare const handoffSchema: JsonSchemaDocument;
52
+ /** `exwf init scrum --config` / the scrum-master policy.json */
53
+ declare const scrumConfigSchema: JsonSchemaDocument;
54
+ declare const kanbanConfigSchema: JsonSchemaDocument;
55
+ declare const waterfallConfigSchema: JsonSchemaDocument;
56
+
57
+ export { DRAFT_07, type JsonSchema, type JsonSchemaDocument, type SchemaError, assertValid, handoffSchema, itemPatchSchema, kanbanConfigSchema, newItemSchema, roleSchema, scrumConfigSchema, validate, waterfallConfigSchema, workflowStateSchema };
@@ -0,0 +1,2 @@
1
+ export{c as DRAFT_07,b as assertValid,h as handoffSchema,g as itemPatchSchema,j as kanbanConfigSchema,f as newItemSchema,e as roleSchema,i as scrumConfigSchema,a as validate,k as waterfallConfigSchema,d as workflowStateSchema}from'../chunk-5TXYMLBF.mjs';import'../chunk-2FRRD6A3.mjs';//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.mjs"}
@@ -1,2 +1,2 @@
1
- 'use strict';var chunk4A4TD4MH_cjs=require('../chunk-4A4TD4MH.cjs');require('../chunk-2IKIBB73.cjs');var chunk23P7C25E_cjs=require('../chunk-23P7C25E.cjs');require('../chunk-S3BXVHO7.cjs');Object.defineProperty(exports,"SCRUM_VOCABULARY",{enumerable:true,get:function(){return chunk4A4TD4MH_cjs.h}});Object.defineProperty(exports,"closeSprint",{enumerable:true,get:function(){return chunk4A4TD4MH_cjs.j}});Object.defineProperty(exports,"configOf",{enumerable:true,get:function(){return chunk4A4TD4MH_cjs.i}});Object.defineProperty(exports,"dailyReport",{enumerable:true,get:function(){return chunk4A4TD4MH_cjs.a}});Object.defineProperty(exports,"scrum",{enumerable:true,get:function(){return chunk4A4TD4MH_cjs.k}});Object.defineProperty(exports,"scrumCeremonies",{enumerable:true,get:function(){return chunk4A4TD4MH_cjs.b}});Object.defineProperty(exports,"scrumMetrics",{enumerable:true,get:function(){return chunk4A4TD4MH_cjs.d}});Object.defineProperty(exports,"scrumRoles",{enumerable:true,get:function(){return chunk4A4TD4MH_cjs.e}});Object.defineProperty(exports,"scrumRules",{enumerable:true,get:function(){return chunk4A4TD4MH_cjs.f}});Object.defineProperty(exports,"scrumStages",{enumerable:true,get:function(){return chunk4A4TD4MH_cjs.g}});Object.defineProperty(exports,"validateScrumConfig",{enumerable:true,get:function(){return chunk4A4TD4MH_cjs.c}});Object.defineProperty(exports,"canDo",{enumerable:true,get:function(){return chunk23P7C25E_cjs.n}});//# sourceMappingURL=index.cjs.map
1
+ 'use strict';var chunkUUOMQMWT_cjs=require('../chunk-UUOMQMWT.cjs');require('../chunk-N3QB2S7R.cjs');var chunkZTE7LREB_cjs=require('../chunk-ZTE7LREB.cjs');require('../chunk-S3BXVHO7.cjs');Object.defineProperty(exports,"SCRUM_VOCABULARY",{enumerable:true,get:function(){return chunkUUOMQMWT_cjs.h}});Object.defineProperty(exports,"closeSprint",{enumerable:true,get:function(){return chunkUUOMQMWT_cjs.k}});Object.defineProperty(exports,"configOf",{enumerable:true,get:function(){return chunkUUOMQMWT_cjs.i}});Object.defineProperty(exports,"dailyReport",{enumerable:true,get:function(){return chunkUUOMQMWT_cjs.a}});Object.defineProperty(exports,"resumeStageOf",{enumerable:true,get:function(){return chunkUUOMQMWT_cjs.j}});Object.defineProperty(exports,"scrum",{enumerable:true,get:function(){return chunkUUOMQMWT_cjs.l}});Object.defineProperty(exports,"scrumCeremonies",{enumerable:true,get:function(){return chunkUUOMQMWT_cjs.b}});Object.defineProperty(exports,"scrumMetrics",{enumerable:true,get:function(){return chunkUUOMQMWT_cjs.d}});Object.defineProperty(exports,"scrumRoles",{enumerable:true,get:function(){return chunkUUOMQMWT_cjs.e}});Object.defineProperty(exports,"scrumRules",{enumerable:true,get:function(){return chunkUUOMQMWT_cjs.f}});Object.defineProperty(exports,"scrumStages",{enumerable:true,get:function(){return chunkUUOMQMWT_cjs.g}});Object.defineProperty(exports,"validateScrumConfig",{enumerable:true,get:function(){return chunkUUOMQMWT_cjs.c}});Object.defineProperty(exports,"canDo",{enumerable:true,get:function(){return chunkZTE7LREB_cjs.n}});//# sourceMappingURL=index.cjs.map
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1,5 +1,6 @@
1
- import { Budget, Policy, WorkflowState, Role, Rule, Stage, ItemStatus, Methodology, Ceremony, CoreTerm } from '../types.cjs';
2
- export { c as canDo } from '../roles-aneKYJ3Z.cjs';
1
+ import { Budget, Policy, WorkflowState, Role, Rule, Stage, ItemStatus, Methodology, Ceremony, CoreTerm, WorkItem } from '../types.cjs';
2
+ import { E as EstimateMode } from '../budget-JyNKxP5N.cjs';
3
+ export { c as canDo } from '../budget-JyNKxP5N.cjs';
3
4
 
4
5
  interface ScrumConfig {
5
6
  sprintBudget: Budget;
@@ -8,6 +9,12 @@ interface ScrumConfig {
8
9
  refinementSharePct: number;
9
10
  allowMidSprintAdd: "never" | "po-only" | "any";
10
11
  inProgressWipLimit?: number;
12
+ /** Close the sprint automatically when its budget is spent and nothing is in flight; default true. */
13
+ autoClose?: boolean;
14
+ /** How the planner and sprint planning price a candidate; default "per-weight". */
15
+ estimateMode?: EstimateMode;
16
+ /** Tokens per weight unit when no accounting history exists; default 20000. */
17
+ fallbackTokensPerWeight?: number;
11
18
  }
12
19
  declare function validateScrumConfig(raw: unknown): ScrumConfig;
13
20
 
@@ -20,6 +27,8 @@ interface ScrumMetrics {
20
27
  carryoverRatio: number;
21
28
  budgetUtilisation: number;
22
29
  costPerPoint: number;
30
+ /** The open sprint right now; all zeros when none is open. */
31
+ current: Record<string, number>;
23
32
  }
24
33
  declare function scrumMetrics(state: WorkflowState): ScrumMetrics;
25
34
 
@@ -52,8 +61,14 @@ declare function scrumCeremonies(methodology: () => Methodology): Record<string,
52
61
  declare const SCRUM_VOCABULARY: Record<CoreTerm, string>;
53
62
  /** Advanced; used by ceremonies. */
54
63
  declare function configOf(state: WorkflowState): ScrumConfig;
64
+ /**
65
+ * The stage a carried-over item was returned from when it was in a review stage: it resumes there, not at the
66
+ * sprint start. closeSprint releases blocked and awaiting_human items, so the stage (its `review` flag) is read from
67
+ * the last system transition, not the status. Without `state` only a `review` status is recognised.
68
+ */
69
+ declare function resumeStageOf(item: WorkItem, state?: WorkflowState): string | undefined;
55
70
  /** Advanced; used by ceremonies. Closes the open sprint and returns unfinished work (and its open questions) to the backlog. */
56
71
  declare function closeSprint(state: WorkflowState, reason: "budget" | "review" | "cancel", now: string): WorkflowState;
57
72
  declare function scrum(): Methodology<ScrumConfig>;
58
73
 
59
- export { type DailyReport, SCRUM_VOCABULARY, type ScrumConfig, type ScrumMetrics, closeSprint, configOf, dailyReport, scrum, scrumCeremonies, scrumMetrics, scrumRoles, scrumRules, scrumStages, validateScrumConfig };
74
+ export { type DailyReport, SCRUM_VOCABULARY, type ScrumConfig, type ScrumMetrics, closeSprint, configOf, dailyReport, resumeStageOf, scrum, scrumCeremonies, scrumMetrics, scrumRoles, scrumRules, scrumStages, validateScrumConfig };
@@ -1,5 +1,6 @@
1
- import { Budget, Policy, WorkflowState, Role, Rule, Stage, ItemStatus, Methodology, Ceremony, CoreTerm } from '../types.js';
2
- export { c as canDo } from '../roles-BLBRKhUZ.js';
1
+ import { Budget, Policy, WorkflowState, Role, Rule, Stage, ItemStatus, Methodology, Ceremony, CoreTerm, WorkItem } from '../types.js';
2
+ import { E as EstimateMode } from '../budget-Cx63FX2K.js';
3
+ export { c as canDo } from '../budget-Cx63FX2K.js';
3
4
 
4
5
  interface ScrumConfig {
5
6
  sprintBudget: Budget;
@@ -8,6 +9,12 @@ interface ScrumConfig {
8
9
  refinementSharePct: number;
9
10
  allowMidSprintAdd: "never" | "po-only" | "any";
10
11
  inProgressWipLimit?: number;
12
+ /** Close the sprint automatically when its budget is spent and nothing is in flight; default true. */
13
+ autoClose?: boolean;
14
+ /** How the planner and sprint planning price a candidate; default "per-weight". */
15
+ estimateMode?: EstimateMode;
16
+ /** Tokens per weight unit when no accounting history exists; default 20000. */
17
+ fallbackTokensPerWeight?: number;
11
18
  }
12
19
  declare function validateScrumConfig(raw: unknown): ScrumConfig;
13
20
 
@@ -20,6 +27,8 @@ interface ScrumMetrics {
20
27
  carryoverRatio: number;
21
28
  budgetUtilisation: number;
22
29
  costPerPoint: number;
30
+ /** The open sprint right now; all zeros when none is open. */
31
+ current: Record<string, number>;
23
32
  }
24
33
  declare function scrumMetrics(state: WorkflowState): ScrumMetrics;
25
34
 
@@ -52,8 +61,14 @@ declare function scrumCeremonies(methodology: () => Methodology): Record<string,
52
61
  declare const SCRUM_VOCABULARY: Record<CoreTerm, string>;
53
62
  /** Advanced; used by ceremonies. */
54
63
  declare function configOf(state: WorkflowState): ScrumConfig;
64
+ /**
65
+ * The stage a carried-over item was returned from when it was in a review stage: it resumes there, not at the
66
+ * sprint start. closeSprint releases blocked and awaiting_human items, so the stage (its `review` flag) is read from
67
+ * the last system transition, not the status. Without `state` only a `review` status is recognised.
68
+ */
69
+ declare function resumeStageOf(item: WorkItem, state?: WorkflowState): string | undefined;
55
70
  /** Advanced; used by ceremonies. Closes the open sprint and returns unfinished work (and its open questions) to the backlog. */
56
71
  declare function closeSprint(state: WorkflowState, reason: "budget" | "review" | "cancel", now: string): WorkflowState;
57
72
  declare function scrum(): Methodology<ScrumConfig>;
58
73
 
59
- export { type DailyReport, SCRUM_VOCABULARY, type ScrumConfig, type ScrumMetrics, closeSprint, configOf, dailyReport, scrum, scrumCeremonies, scrumMetrics, scrumRoles, scrumRules, scrumStages, validateScrumConfig };
74
+ export { type DailyReport, SCRUM_VOCABULARY, type ScrumConfig, type ScrumMetrics, closeSprint, configOf, dailyReport, resumeStageOf, scrum, scrumCeremonies, scrumMetrics, scrumRoles, scrumRules, scrumStages, validateScrumConfig };
@@ -1,2 +1,2 @@
1
- export{h as SCRUM_VOCABULARY,j as closeSprint,i as configOf,a as dailyReport,k as scrum,b as scrumCeremonies,d as scrumMetrics,e as scrumRoles,f as scrumRules,g as scrumStages,c as validateScrumConfig}from'../chunk-R27STIER.mjs';import'../chunk-ZX4DAMTG.mjs';export{n as canDo}from'../chunk-FLCYD2QF.mjs';import'../chunk-2FRRD6A3.mjs';//# sourceMappingURL=index.mjs.map
1
+ export{h as SCRUM_VOCABULARY,k as closeSprint,i as configOf,a as dailyReport,j as resumeStageOf,l as scrum,b as scrumCeremonies,d as scrumMetrics,e as scrumRoles,f as scrumRules,g as scrumStages,c as validateScrumConfig}from'../chunk-7CDGPTEJ.mjs';import'../chunk-IHE5K4X3.mjs';export{n as canDo}from'../chunk-Z3PU6EBI.mjs';import'../chunk-2FRRD6A3.mjs';//# sourceMappingURL=index.mjs.map
2
2
  //# sourceMappingURL=index.mjs.map
package/dist/types.d.cts CHANGED
@@ -62,6 +62,8 @@ interface WorkItem {
62
62
  /** change-request: impact analysis required before the change control board decides */
63
63
  impactAnalysis?: ImpactAnalysis;
64
64
  }
65
+ /** Fields `editItem` / `exwf edit` may change. */
66
+ type ItemPatch = Partial<Omit<WorkItem, "id" | "stage" | "status" | "transitions" | "evidence" | "blockers">>;
65
67
  /** Fields a caller supplies to addItem; the rest are defaulted. */
66
68
  type NewItem = Pick<WorkItem, "id" | "title"> & Partial<Omit<WorkItem, "id" | "title" | "stage" | "status" | "evidence" | "blockers" | "transitions">> & {
67
69
  stage?: string;
@@ -113,11 +115,16 @@ interface Budget {
113
115
  turns?: number;
114
116
  wallclockMs?: number;
115
117
  }
118
+ interface Spent {
119
+ tokens: number;
120
+ turns: number;
121
+ wallclockMs: number;
122
+ }
116
123
  interface Iteration {
117
124
  id: string;
118
125
  goal: string;
119
126
  budget: Budget;
120
- spent: Required<Budget>;
127
+ spent: Spent;
121
128
  startedAt: string;
122
129
  endedAt?: string;
123
130
  committed: string[];
@@ -170,6 +177,8 @@ interface Accounting {
170
177
  durationMs: number;
171
178
  startedAt: string;
172
179
  endedAt: string;
180
+ /** The tokens are a placeholder the host will correct with correctAccounting, not the host's usage figures. */
181
+ estimate?: boolean;
173
182
  }
174
183
  interface Event {
175
184
  seq: number;
@@ -189,6 +198,7 @@ interface PendingHuman {
189
198
  type LessonChange = {
190
199
  kind: "agreement";
191
200
  text: string;
201
+ replaces?: string;
192
202
  } | {
193
203
  kind: "dod";
194
204
  policy: Policy;
@@ -303,6 +313,15 @@ interface Brief {
303
313
  }>;
304
314
  budgetRemaining: Budget;
305
315
  gateAhead?: Gate;
316
+ /** for a question item: the escalating item's last handoff */
317
+ parent?: {
318
+ item: string;
319
+ role: string;
320
+ notes: string;
321
+ produced: Handoff["produced"];
322
+ open_questions: string[];
323
+ do_not: string[];
324
+ };
306
325
  }
307
326
  type CoreTerm = "backlog" | "item" | "stage" | "iteration" | "increment" | "ceremony" | "gate";
308
327
  type CeremonyInput = {
@@ -329,6 +348,10 @@ interface PlannerOptions {
329
348
  wipLimitOf?(stage: Stage, item: WorkItem): number | undefined;
330
349
  /** Role id to dispatch a todo item to (e.g. the phase's deliverer); undefined = default (item.role, then reviewer/deliverer by capability). */
331
350
  roleFor?(item: WorkItem): string | undefined;
351
+ /** How estimateTokens prices a candidate; default "per-weight". */
352
+ estimateMode?: "per-weight" | "per-call";
353
+ /** Tokens per weight unit when no accounting history exists; default 20000. PlanOptions.fallbackTokensPerWeight wins. */
354
+ fallbackTokensPerWeight?: number;
332
355
  }
333
356
  interface Methodology<C = unknown> {
334
357
  name: MethodologyName;
@@ -349,11 +372,17 @@ interface Methodology<C = unknown> {
349
372
  };
350
373
  /** Called after complete(); lets the methodology react (e.g. close a sprint when the budget is gone). */
351
374
  afterComplete?(state: WorkflowState, itemId: string, now: string): WorkflowState;
375
+ /** Config keys that cannot change after init (changeConfig refuses them). */
376
+ lockedConfigKeys?: string[];
377
+ /** Called by changeConfig after the new config is stored; keeps derived state (e.g. stage policies) in step. */
378
+ afterConfigChange?(state: WorkflowState, now: string): WorkflowState;
352
379
  /** Methodology-specific status for hosts (e.g. cadences due); printed by `exwf status`. */
353
380
  report?(state: WorkflowState): Record<string, unknown>;
354
381
  /** Called by decide() after a pending entry is resolved; lets the methodology act on it (e.g. baseline a phase gate, apply a change-request decision). */
355
382
  afterDecide?(state: WorkflowState, entry: PendingHuman, decision: "approve" | "reject", by: string, note: string, now: string): WorkflowState;
356
383
  }
357
- type ErrorCode = "unknown-item" | "duplicate-item" | "unknown-role" | "duplicate-role" | "unknown-stage" | "missing-capability" | "exclusive-capability" | "role-has-open-items" | "invalid-transition" | "policy-unmet" | "gate-unmet" | "conflict-of-interest" | "handoff-invalid" | "accounting-invalid" | "rule-violation" | "planner-error" | "no-op" | "unknown-pending" | "unknown-ceremony" | "state-version" | "config-invalid" | "budget-exhausted" | "invalid-input";
384
+ type ErrorCode = "unknown-item" | "duplicate-item" | "unknown-role" | "duplicate-role" | "unknown-stage" | "missing-capability" | "exclusive-capability" | "role-has-open-items" | "invalid-transition" | "policy-unmet" | "gate-unmet"
385
+ /** reserved: never thrown; kept for type compatibility */
386
+ | "conflict-of-interest" | "handoff-invalid" | "accounting-invalid" | "rule-violation" | "planner-error" | "no-op" | "unknown-pending" | "unknown-ceremony" | "state-version" | "config-invalid" | "budget-exhausted" | "invalid-input";
358
387
 
359
- export type { Accounting, Action, ApplyResult, Baseline, Blocker, Brief, Budget, Capability, Ceremony, CeremonyInput, ClassOfService, CoreTerm, ErrorCode, Event, Evidence, Gate, GateRequirement, Handoff, ImpactAnalysis, ItemStatus, ItemType, Iteration, Lesson, LessonChange, Methodology, MethodologyName, ModelTier, NewItem, PendingHuman, Phase, PlannerOptions, Policy, Produced, Role, Rule, Stage, Transition, Verdict, Violation, WorkItem, WorkflowState };
388
+ export type { Accounting, Action, ApplyResult, Baseline, Blocker, Brief, Budget, Capability, Ceremony, CeremonyInput, ClassOfService, CoreTerm, ErrorCode, Event, Evidence, Gate, GateRequirement, Handoff, ImpactAnalysis, ItemPatch, ItemStatus, ItemType, Iteration, Lesson, LessonChange, Methodology, MethodologyName, ModelTier, NewItem, PendingHuman, Phase, PlannerOptions, Policy, Produced, Role, Rule, Spent, Stage, Transition, Verdict, Violation, WorkItem, WorkflowState };
package/dist/types.d.ts CHANGED
@@ -62,6 +62,8 @@ interface WorkItem {
62
62
  /** change-request: impact analysis required before the change control board decides */
63
63
  impactAnalysis?: ImpactAnalysis;
64
64
  }
65
+ /** Fields `editItem` / `exwf edit` may change. */
66
+ type ItemPatch = Partial<Omit<WorkItem, "id" | "stage" | "status" | "transitions" | "evidence" | "blockers">>;
65
67
  /** Fields a caller supplies to addItem; the rest are defaulted. */
66
68
  type NewItem = Pick<WorkItem, "id" | "title"> & Partial<Omit<WorkItem, "id" | "title" | "stage" | "status" | "evidence" | "blockers" | "transitions">> & {
67
69
  stage?: string;
@@ -113,11 +115,16 @@ interface Budget {
113
115
  turns?: number;
114
116
  wallclockMs?: number;
115
117
  }
118
+ interface Spent {
119
+ tokens: number;
120
+ turns: number;
121
+ wallclockMs: number;
122
+ }
116
123
  interface Iteration {
117
124
  id: string;
118
125
  goal: string;
119
126
  budget: Budget;
120
- spent: Required<Budget>;
127
+ spent: Spent;
121
128
  startedAt: string;
122
129
  endedAt?: string;
123
130
  committed: string[];
@@ -170,6 +177,8 @@ interface Accounting {
170
177
  durationMs: number;
171
178
  startedAt: string;
172
179
  endedAt: string;
180
+ /** The tokens are a placeholder the host will correct with correctAccounting, not the host's usage figures. */
181
+ estimate?: boolean;
173
182
  }
174
183
  interface Event {
175
184
  seq: number;
@@ -189,6 +198,7 @@ interface PendingHuman {
189
198
  type LessonChange = {
190
199
  kind: "agreement";
191
200
  text: string;
201
+ replaces?: string;
192
202
  } | {
193
203
  kind: "dod";
194
204
  policy: Policy;
@@ -303,6 +313,15 @@ interface Brief {
303
313
  }>;
304
314
  budgetRemaining: Budget;
305
315
  gateAhead?: Gate;
316
+ /** for a question item: the escalating item's last handoff */
317
+ parent?: {
318
+ item: string;
319
+ role: string;
320
+ notes: string;
321
+ produced: Handoff["produced"];
322
+ open_questions: string[];
323
+ do_not: string[];
324
+ };
306
325
  }
307
326
  type CoreTerm = "backlog" | "item" | "stage" | "iteration" | "increment" | "ceremony" | "gate";
308
327
  type CeremonyInput = {
@@ -329,6 +348,10 @@ interface PlannerOptions {
329
348
  wipLimitOf?(stage: Stage, item: WorkItem): number | undefined;
330
349
  /** Role id to dispatch a todo item to (e.g. the phase's deliverer); undefined = default (item.role, then reviewer/deliverer by capability). */
331
350
  roleFor?(item: WorkItem): string | undefined;
351
+ /** How estimateTokens prices a candidate; default "per-weight". */
352
+ estimateMode?: "per-weight" | "per-call";
353
+ /** Tokens per weight unit when no accounting history exists; default 20000. PlanOptions.fallbackTokensPerWeight wins. */
354
+ fallbackTokensPerWeight?: number;
332
355
  }
333
356
  interface Methodology<C = unknown> {
334
357
  name: MethodologyName;
@@ -349,11 +372,17 @@ interface Methodology<C = unknown> {
349
372
  };
350
373
  /** Called after complete(); lets the methodology react (e.g. close a sprint when the budget is gone). */
351
374
  afterComplete?(state: WorkflowState, itemId: string, now: string): WorkflowState;
375
+ /** Config keys that cannot change after init (changeConfig refuses them). */
376
+ lockedConfigKeys?: string[];
377
+ /** Called by changeConfig after the new config is stored; keeps derived state (e.g. stage policies) in step. */
378
+ afterConfigChange?(state: WorkflowState, now: string): WorkflowState;
352
379
  /** Methodology-specific status for hosts (e.g. cadences due); printed by `exwf status`. */
353
380
  report?(state: WorkflowState): Record<string, unknown>;
354
381
  /** Called by decide() after a pending entry is resolved; lets the methodology act on it (e.g. baseline a phase gate, apply a change-request decision). */
355
382
  afterDecide?(state: WorkflowState, entry: PendingHuman, decision: "approve" | "reject", by: string, note: string, now: string): WorkflowState;
356
383
  }
357
- type ErrorCode = "unknown-item" | "duplicate-item" | "unknown-role" | "duplicate-role" | "unknown-stage" | "missing-capability" | "exclusive-capability" | "role-has-open-items" | "invalid-transition" | "policy-unmet" | "gate-unmet" | "conflict-of-interest" | "handoff-invalid" | "accounting-invalid" | "rule-violation" | "planner-error" | "no-op" | "unknown-pending" | "unknown-ceremony" | "state-version" | "config-invalid" | "budget-exhausted" | "invalid-input";
384
+ type ErrorCode = "unknown-item" | "duplicate-item" | "unknown-role" | "duplicate-role" | "unknown-stage" | "missing-capability" | "exclusive-capability" | "role-has-open-items" | "invalid-transition" | "policy-unmet" | "gate-unmet"
385
+ /** reserved: never thrown; kept for type compatibility */
386
+ | "conflict-of-interest" | "handoff-invalid" | "accounting-invalid" | "rule-violation" | "planner-error" | "no-op" | "unknown-pending" | "unknown-ceremony" | "state-version" | "config-invalid" | "budget-exhausted" | "invalid-input";
358
387
 
359
- export type { Accounting, Action, ApplyResult, Baseline, Blocker, Brief, Budget, Capability, Ceremony, CeremonyInput, ClassOfService, CoreTerm, ErrorCode, Event, Evidence, Gate, GateRequirement, Handoff, ImpactAnalysis, ItemStatus, ItemType, Iteration, Lesson, LessonChange, Methodology, MethodologyName, ModelTier, NewItem, PendingHuman, Phase, PlannerOptions, Policy, Produced, Role, Rule, Stage, Transition, Verdict, Violation, WorkItem, WorkflowState };
388
+ export type { Accounting, Action, ApplyResult, Baseline, Blocker, Brief, Budget, Capability, Ceremony, CeremonyInput, ClassOfService, CoreTerm, ErrorCode, Event, Evidence, Gate, GateRequirement, Handoff, ImpactAnalysis, ItemPatch, ItemStatus, ItemType, Iteration, Lesson, LessonChange, Methodology, MethodologyName, ModelTier, NewItem, PendingHuman, Phase, PlannerOptions, Policy, Produced, Role, Rule, Spent, Stage, Transition, Verdict, Violation, WorkItem, WorkflowState };
@@ -1,2 +1,2 @@
1
- 'use strict';var chunkTMKCALFT_cjs=require('../chunk-TMKCALFT.cjs');require('../chunk-2IKIBB73.cjs'),require('../chunk-23P7C25E.cjs'),require('../chunk-S3BXVHO7.cjs');Object.defineProperty(exports,"CHANGE_GATE",{enumerable:true,get:function(){return chunkTMKCALFT_cjs.e}});Object.defineProperty(exports,"DEFAULT_DELIVERABLES",{enumerable:true,get:function(){return chunkTMKCALFT_cjs.b}});Object.defineProperty(exports,"DEFAULT_DELIVER_BY",{enumerable:true,get:function(){return chunkTMKCALFT_cjs.c}});Object.defineProperty(exports,"DEFAULT_PHASE_IDS",{enumerable:true,get:function(){return chunkTMKCALFT_cjs.a}});Object.defineProperty(exports,"DONE",{enumerable:true,get:function(){return chunkTMKCALFT_cjs.k}});Object.defineProperty(exports,"GATE_ID",{enumerable:true,get:function(){return chunkTMKCALFT_cjs.d}});Object.defineProperty(exports,"REVIEW",{enumerable:true,get:function(){return chunkTMKCALFT_cjs.j}});Object.defineProperty(exports,"WATERFALL_VOCABULARY",{enumerable:true,get:function(){return chunkTMKCALFT_cjs.K}});Object.defineProperty(exports,"WORK",{enumerable:true,get:function(){return chunkTMKCALFT_cjs.i}});Object.defineProperty(exports,"approveChange",{enumerable:true,get:function(){return chunkTMKCALFT_cjs.z}});Object.defineProperty(exports,"baselinePhase",{enumerable:true,get:function(){return chunkTMKCALFT_cjs.x}});Object.defineProperty(exports,"configOf",{enumerable:true,get:function(){return chunkTMKCALFT_cjs.g}});Object.defineProperty(exports,"currentPhase",{enumerable:true,get:function(){return chunkTMKCALFT_cjs.s}});Object.defineProperty(exports,"defaultPhases",{enumerable:true,get:function(){return chunkTMKCALFT_cjs.f}});Object.defineProperty(exports,"deliverRoleFor",{enumerable:true,get:function(){return chunkTMKCALFT_cjs.L}});Object.defineProperty(exports,"getPhase",{enumerable:true,get:function(){return chunkTMKCALFT_cjs.o}});Object.defineProperty(exports,"isFrozen",{enumerable:true,get:function(){return chunkTMKCALFT_cjs.t}});Object.defineProperty(exports,"itemsInPhase",{enumerable:true,get:function(){return chunkTMKCALFT_cjs.q}});Object.defineProperty(exports,"lastToPhase",{enumerable:true,get:function(){return chunkTMKCALFT_cjs.w}});Object.defineProperty(exports,"missingDeliverables",{enumerable:true,get:function(){return chunkTMKCALFT_cjs.v}});Object.defineProperty(exports,"missingTraces",{enumerable:true,get:function(){return chunkTMKCALFT_cjs.C}});Object.defineProperty(exports,"openPhase",{enumerable:true,get:function(){return chunkTMKCALFT_cjs.r}});Object.defineProperty(exports,"phaseIndex",{enumerable:true,get:function(){return chunkTMKCALFT_cjs.n}});Object.defineProperty(exports,"phaseOf",{enumerable:true,get:function(){return chunkTMKCALFT_cjs.p}});Object.defineProperty(exports,"phaseReport",{enumerable:true,get:function(){return chunkTMKCALFT_cjs.M}});Object.defineProperty(exports,"phasesOf",{enumerable:true,get:function(){return chunkTMKCALFT_cjs.l}});Object.defineProperty(exports,"producedKinds",{enumerable:true,get:function(){return chunkTMKCALFT_cjs.u}});Object.defineProperty(exports,"rejectChange",{enumerable:true,get:function(){return chunkTMKCALFT_cjs.A}});Object.defineProperty(exports,"reopenPhases",{enumerable:true,get:function(){return chunkTMKCALFT_cjs.y}});Object.defineProperty(exports,"traceabilityMatrix",{enumerable:true,get:function(){return chunkTMKCALFT_cjs.B}});Object.defineProperty(exports,"validateWaterfallConfig",{enumerable:true,get:function(){return chunkTMKCALFT_cjs.h}});Object.defineProperty(exports,"wantPhase",{enumerable:true,get:function(){return chunkTMKCALFT_cjs.D}});Object.defineProperty(exports,"waterfall",{enumerable:true,get:function(){return chunkTMKCALFT_cjs.N}});Object.defineProperty(exports,"waterfallAfterDecide",{enumerable:true,get:function(){return chunkTMKCALFT_cjs.F}});Object.defineProperty(exports,"waterfallCeremonies",{enumerable:true,get:function(){return chunkTMKCALFT_cjs.E}});Object.defineProperty(exports,"waterfallMetrics",{enumerable:true,get:function(){return chunkTMKCALFT_cjs.G}});Object.defineProperty(exports,"waterfallRoles",{enumerable:true,get:function(){return chunkTMKCALFT_cjs.H}});Object.defineProperty(exports,"waterfallRules",{enumerable:true,get:function(){return chunkTMKCALFT_cjs.I}});Object.defineProperty(exports,"waterfallStages",{enumerable:true,get:function(){return chunkTMKCALFT_cjs.J}});Object.defineProperty(exports,"withPhases",{enumerable:true,get:function(){return chunkTMKCALFT_cjs.m}});//# sourceMappingURL=index.cjs.map
1
+ 'use strict';var chunkUBFIKDIP_cjs=require('../chunk-UBFIKDIP.cjs');require('../chunk-N3QB2S7R.cjs'),require('../chunk-ZTE7LREB.cjs'),require('../chunk-S3BXVHO7.cjs');Object.defineProperty(exports,"CHANGE_GATE",{enumerable:true,get:function(){return chunkUBFIKDIP_cjs.e}});Object.defineProperty(exports,"DEFAULT_DELIVERABLES",{enumerable:true,get:function(){return chunkUBFIKDIP_cjs.b}});Object.defineProperty(exports,"DEFAULT_DELIVER_BY",{enumerable:true,get:function(){return chunkUBFIKDIP_cjs.c}});Object.defineProperty(exports,"DEFAULT_PHASE_IDS",{enumerable:true,get:function(){return chunkUBFIKDIP_cjs.a}});Object.defineProperty(exports,"DONE",{enumerable:true,get:function(){return chunkUBFIKDIP_cjs.k}});Object.defineProperty(exports,"GATE_ID",{enumerable:true,get:function(){return chunkUBFIKDIP_cjs.d}});Object.defineProperty(exports,"REVIEW",{enumerable:true,get:function(){return chunkUBFIKDIP_cjs.j}});Object.defineProperty(exports,"WATERFALL_VOCABULARY",{enumerable:true,get:function(){return chunkUBFIKDIP_cjs.K}});Object.defineProperty(exports,"WORK",{enumerable:true,get:function(){return chunkUBFIKDIP_cjs.i}});Object.defineProperty(exports,"approveChange",{enumerable:true,get:function(){return chunkUBFIKDIP_cjs.z}});Object.defineProperty(exports,"baselinePhase",{enumerable:true,get:function(){return chunkUBFIKDIP_cjs.x}});Object.defineProperty(exports,"configOf",{enumerable:true,get:function(){return chunkUBFIKDIP_cjs.g}});Object.defineProperty(exports,"currentPhase",{enumerable:true,get:function(){return chunkUBFIKDIP_cjs.s}});Object.defineProperty(exports,"defaultPhases",{enumerable:true,get:function(){return chunkUBFIKDIP_cjs.f}});Object.defineProperty(exports,"deliverRoleFor",{enumerable:true,get:function(){return chunkUBFIKDIP_cjs.L}});Object.defineProperty(exports,"getPhase",{enumerable:true,get:function(){return chunkUBFIKDIP_cjs.o}});Object.defineProperty(exports,"isFrozen",{enumerable:true,get:function(){return chunkUBFIKDIP_cjs.t}});Object.defineProperty(exports,"itemsInPhase",{enumerable:true,get:function(){return chunkUBFIKDIP_cjs.q}});Object.defineProperty(exports,"lastToPhase",{enumerable:true,get:function(){return chunkUBFIKDIP_cjs.w}});Object.defineProperty(exports,"missingDeliverables",{enumerable:true,get:function(){return chunkUBFIKDIP_cjs.v}});Object.defineProperty(exports,"missingTraces",{enumerable:true,get:function(){return chunkUBFIKDIP_cjs.C}});Object.defineProperty(exports,"openPhase",{enumerable:true,get:function(){return chunkUBFIKDIP_cjs.r}});Object.defineProperty(exports,"phaseIndex",{enumerable:true,get:function(){return chunkUBFIKDIP_cjs.n}});Object.defineProperty(exports,"phaseOf",{enumerable:true,get:function(){return chunkUBFIKDIP_cjs.p}});Object.defineProperty(exports,"phaseReport",{enumerable:true,get:function(){return chunkUBFIKDIP_cjs.M}});Object.defineProperty(exports,"phasesOf",{enumerable:true,get:function(){return chunkUBFIKDIP_cjs.l}});Object.defineProperty(exports,"producedKinds",{enumerable:true,get:function(){return chunkUBFIKDIP_cjs.u}});Object.defineProperty(exports,"rejectChange",{enumerable:true,get:function(){return chunkUBFIKDIP_cjs.A}});Object.defineProperty(exports,"reopenPhases",{enumerable:true,get:function(){return chunkUBFIKDIP_cjs.y}});Object.defineProperty(exports,"traceabilityMatrix",{enumerable:true,get:function(){return chunkUBFIKDIP_cjs.B}});Object.defineProperty(exports,"validateWaterfallConfig",{enumerable:true,get:function(){return chunkUBFIKDIP_cjs.h}});Object.defineProperty(exports,"wantPhase",{enumerable:true,get:function(){return chunkUBFIKDIP_cjs.D}});Object.defineProperty(exports,"waterfall",{enumerable:true,get:function(){return chunkUBFIKDIP_cjs.N}});Object.defineProperty(exports,"waterfallAfterDecide",{enumerable:true,get:function(){return chunkUBFIKDIP_cjs.F}});Object.defineProperty(exports,"waterfallCeremonies",{enumerable:true,get:function(){return chunkUBFIKDIP_cjs.E}});Object.defineProperty(exports,"waterfallMetrics",{enumerable:true,get:function(){return chunkUBFIKDIP_cjs.G}});Object.defineProperty(exports,"waterfallRoles",{enumerable:true,get:function(){return chunkUBFIKDIP_cjs.H}});Object.defineProperty(exports,"waterfallRules",{enumerable:true,get:function(){return chunkUBFIKDIP_cjs.I}});Object.defineProperty(exports,"waterfallStages",{enumerable:true,get:function(){return chunkUBFIKDIP_cjs.J}});Object.defineProperty(exports,"withPhases",{enumerable:true,get:function(){return chunkUBFIKDIP_cjs.m}});//# sourceMappingURL=index.cjs.map
2
2
  //# sourceMappingURL=index.cjs.map
@@ -21,6 +21,8 @@ interface WaterfallConfig {
21
21
  to: string[];
22
22
  };
23
23
  humanGates: "all" | string[];
24
+ /** tokens per weight unit when there is no accounting history (default 20000, as Scrum) */
25
+ fallbackTokensPerWeight?: number;
24
26
  }
25
27
  declare const DEFAULT_PHASE_IDS: readonly string[];
26
28
  declare const DEFAULT_DELIVERABLES: Record<string, string[]>;