ex-workflow 0.3.0-stage → 0.6.0-stage
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +52 -1
- package/README.md +73 -30
- package/dist/adapters/index.cjs +1 -1
- package/dist/adapters/index.mjs +1 -1
- package/dist/{roles-BLBRKhUZ.d.ts → budget-Cx63FX2K.d.ts} +9 -2
- package/dist/{roles-aneKYJ3Z.d.cts → budget-JyNKxP5N.d.cts} +9 -2
- package/dist/{chunk-7HZXZF3L.cjs → chunk-2OVYXXNV.cjs} +2 -2
- package/dist/chunk-2OVYXXNV.cjs.map +1 -0
- package/dist/chunk-3CLDZCHN.cjs +2 -0
- package/dist/chunk-3CLDZCHN.cjs.map +1 -0
- package/dist/chunk-5TXYMLBF.mjs +3 -0
- package/dist/chunk-5TXYMLBF.mjs.map +1 -0
- package/dist/chunk-7CDGPTEJ.mjs +2 -0
- package/dist/chunk-7CDGPTEJ.mjs.map +1 -0
- package/dist/chunk-7IG6EQI4.mjs +6 -0
- package/dist/chunk-7IG6EQI4.mjs.map +1 -0
- package/dist/chunk-GT57PLUT.mjs +2 -0
- package/dist/chunk-GT57PLUT.mjs.map +1 -0
- package/dist/chunk-IHE5K4X3.mjs +2 -0
- package/dist/chunk-IHE5K4X3.mjs.map +1 -0
- package/dist/chunk-KF5VQH3M.mjs +2 -0
- package/dist/chunk-KF5VQH3M.mjs.map +1 -0
- package/dist/chunk-MH66G5KV.cjs +2 -0
- package/dist/chunk-MH66G5KV.cjs.map +1 -0
- package/dist/chunk-N3QB2S7R.cjs +2 -0
- package/dist/chunk-N3QB2S7R.cjs.map +1 -0
- package/dist/chunk-NA53TZE4.mjs +2 -0
- package/dist/chunk-NA53TZE4.mjs.map +1 -0
- package/dist/chunk-TEPK5Y36.mjs +2 -0
- package/dist/chunk-TEPK5Y36.mjs.map +1 -0
- package/dist/chunk-UBFIKDIP.cjs +2 -0
- package/dist/chunk-UBFIKDIP.cjs.map +1 -0
- package/dist/chunk-UUOMQMWT.cjs +2 -0
- package/dist/chunk-UUOMQMWT.cjs.map +1 -0
- package/dist/chunk-WOGK54HB.cjs +3 -0
- package/dist/chunk-WOGK54HB.cjs.map +1 -0
- package/dist/chunk-YRATJT7P.cjs +6 -0
- package/dist/chunk-YRATJT7P.cjs.map +1 -0
- package/dist/chunk-Z3PU6EBI.mjs +2 -0
- package/dist/chunk-Z3PU6EBI.mjs.map +1 -0
- package/dist/chunk-ZTE7LREB.cjs +2 -0
- package/dist/chunk-ZTE7LREB.cjs.map +1 -0
- package/dist/cli/bin.cjs +1 -1
- package/dist/cli/bin.cjs.map +1 -1
- package/dist/cli/bin.mjs +1 -1
- package/dist/cli/bin.mjs.map +1 -1
- package/dist/cli/index.cjs +1 -1
- package/dist/cli/index.mjs +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +36 -13
- package/dist/index.d.ts +36 -13
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/kanban/index.cjs +1 -1
- package/dist/kanban/index.mjs +1 -1
- package/dist/schema/index.cjs +2 -0
- package/dist/schema/index.cjs.map +1 -0
- package/dist/schema/index.d.cts +57 -0
- package/dist/schema/index.d.ts +57 -0
- package/dist/schema/index.mjs +2 -0
- package/dist/schema/index.mjs.map +1 -0
- package/dist/scrum/index.cjs +1 -1
- package/dist/scrum/index.d.cts +18 -3
- package/dist/scrum/index.d.ts +18 -3
- package/dist/scrum/index.mjs +1 -1
- package/dist/types.d.cts +32 -3
- package/dist/types.d.ts +32 -3
- package/dist/waterfall/index.cjs +1 -1
- package/dist/waterfall/index.d.cts +2 -0
- package/dist/waterfall/index.d.ts +2 -0
- package/dist/waterfall/index.mjs +1 -1
- package/package.json +18 -2
- package/dist/chunk-23P7C25E.cjs +0 -2
- package/dist/chunk-23P7C25E.cjs.map +0 -1
- package/dist/chunk-2IKIBB73.cjs +0 -2
- package/dist/chunk-2IKIBB73.cjs.map +0 -1
- package/dist/chunk-4A4TD4MH.cjs +0 -2
- package/dist/chunk-4A4TD4MH.cjs.map +0 -1
- package/dist/chunk-6R3YFUUV.cjs +0 -6
- package/dist/chunk-6R3YFUUV.cjs.map +0 -1
- package/dist/chunk-7HZXZF3L.cjs.map +0 -1
- package/dist/chunk-AUZIQPFT.cjs +0 -2
- package/dist/chunk-AUZIQPFT.cjs.map +0 -1
- package/dist/chunk-BJEOTG6P.mjs +0 -2
- package/dist/chunk-BJEOTG6P.mjs.map +0 -1
- package/dist/chunk-FLCYD2QF.mjs +0 -2
- package/dist/chunk-FLCYD2QF.mjs.map +0 -1
- package/dist/chunk-NN3XJUHP.cjs +0 -2
- package/dist/chunk-NN3XJUHP.cjs.map +0 -1
- package/dist/chunk-P4P4JTE5.mjs +0 -2
- package/dist/chunk-P4P4JTE5.mjs.map +0 -1
- package/dist/chunk-R27STIER.mjs +0 -2
- package/dist/chunk-R27STIER.mjs.map +0 -1
- package/dist/chunk-TMKCALFT.cjs +0 -2
- package/dist/chunk-TMKCALFT.cjs.map +0 -1
- package/dist/chunk-UOGNVWVO.mjs +0 -2
- package/dist/chunk-UOGNVWVO.mjs.map +0 -1
- package/dist/chunk-VGD4V5BA.mjs +0 -6
- package/dist/chunk-VGD4V5BA.mjs.map +0 -1
- package/dist/chunk-WOKNWJKU.mjs +0 -2
- package/dist/chunk-WOKNWJKU.mjs.map +0 -1
- package/dist/chunk-ZX4DAMTG.mjs +0 -2
- package/dist/chunk-ZX4DAMTG.mjs.map +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { ErrorCode, WorkflowState, MethodologyName, Stage, Role, Event,
|
|
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,
|
|
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
|
-
|
|
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.
|
|
155
|
+
declare const VERSION = "0.6.0-stage";
|
|
133
156
|
|
|
134
|
-
export { Accounting, Action, ApplyResult, Brief,
|
|
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{
|
|
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
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"names":["VERSION"],"mappings":"
|
|
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"]}
|
package/dist/kanban/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var
|
|
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
|
package/dist/kanban/index.mjs
CHANGED
|
@@ -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-
|
|
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"}
|
package/dist/scrum/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var
|
|
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
|
package/dist/scrum/index.d.cts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { Budget, Policy, WorkflowState, Role, Rule, Stage, ItemStatus, Methodology, Ceremony, CoreTerm } from '../types.cjs';
|
|
2
|
-
|
|
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 };
|
package/dist/scrum/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { Budget, Policy, WorkflowState, Role, Rule, Stage, ItemStatus, Methodology, Ceremony, CoreTerm } from '../types.js';
|
|
2
|
-
|
|
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 };
|
package/dist/scrum/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{h as SCRUM_VOCABULARY,
|
|
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:
|
|
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"
|
|
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:
|
|
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"
|
|
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/waterfall/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var
|
|
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[]>;
|