@lumenflow/initiatives 3.3.0 → 3.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/initiative-orchestrator.d.ts +1 -0
- package/dist/initiative-orchestrator.d.ts.map +1 -1
- package/dist/initiative-orchestrator.js +2 -0
- package/dist/initiative-orchestrator.js.map +1 -1
- package/dist/initiative-yaml.js.map +1 -1
- package/dist/orchestrator/index.d.ts +1 -0
- package/dist/orchestrator/index.d.ts.map +1 -1
- package/dist/orchestrator/index.js +1 -0
- package/dist/orchestrator/index.js.map +1 -1
- package/dist/orchestrator/scope-advisory.d.ts +90 -0
- package/dist/orchestrator/scope-advisory.d.ts.map +1 -0
- package/dist/orchestrator/scope-advisory.js +182 -0
- package/dist/orchestrator/scope-advisory.js.map +1 -0
- package/package.json +2 -2
|
@@ -25,4 +25,5 @@ export { formatExecutionPlan, generateSpawnCommands, calculateProgress, formatPr
|
|
|
25
25
|
export { getManifestWUStatus, isWUActuallySpawned, getSpawnCandidatesWithYAMLCheck, } from './orchestrator/spawn-status.js';
|
|
26
26
|
export { getLockPolicyForLane, getLaneAvailability } from './orchestrator/lane-policy.js';
|
|
27
27
|
export { loadInitiativeWUs, loadMultipleInitiatives } from './orchestrator/initiative-loading.js';
|
|
28
|
+
export { analyseScopeShape, formatScopeAdvisory, SCOPE_ADVISORY_THRESHOLDS, type ScopeAdvisory, type ScopeAdvisoryResult, type ScopeAdvisoryType, type ScopeAdvisorySeverity, } from './orchestrator/scope-advisory.js';
|
|
28
29
|
//# sourceMappingURL=initiative-orchestrator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initiative-orchestrator.d.ts","sourceRoot":"","sources":["../src/initiative-orchestrator.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,YAAY,EACV,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,cAAc,EACd,eAAe,EACf,aAAa,EACb,aAAa,EACb,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,oBAAoB,EACpB,sBAAsB,EACtB,UAAU,EACV,UAAU,EACV,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAGtD,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,gCAAgC,GACjC,MAAM,sCAAsC,CAAC;AAG9C,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,EACxB,0BAA0B,EAC1B,+BAA+B,EAC/B,qBAAqB,EACrB,0BAA0B,EAC1B,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACtB,2BAA2B,EAC3B,qCAAqC,EACrC,qCAAqC,GACtC,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,+BAA+B,GAChC,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAG1F,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC"}
|
|
1
|
+
{"version":3,"file":"initiative-orchestrator.d.ts","sourceRoot":"","sources":["../src/initiative-orchestrator.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,YAAY,EACV,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,cAAc,EACd,eAAe,EACf,aAAa,EACb,aAAa,EACb,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,oBAAoB,EACpB,sBAAsB,EACtB,UAAU,EACV,UAAU,EACV,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAGtD,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,gCAAgC,GACjC,MAAM,sCAAsC,CAAC;AAG9C,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,EACxB,0BAA0B,EAC1B,+BAA+B,EAC/B,qBAAqB,EACrB,0BAA0B,EAC1B,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACtB,2BAA2B,EAC3B,qCAAqC,EACrC,qCAAqC,GACtC,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,+BAA+B,GAChC,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAG1F,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAGlG,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,yBAAyB,EACzB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,GAC3B,MAAM,kCAAkC,CAAC"}
|
|
@@ -14,4 +14,6 @@ export { getManifestWUStatus, isWUActuallySpawned, getSpawnCandidatesWithYAMLChe
|
|
|
14
14
|
export { getLockPolicyForLane, getLaneAvailability } from './orchestrator/lane-policy.js';
|
|
15
15
|
// ── Initiative loading ────────────────────────────────────────────────────────
|
|
16
16
|
export { loadInitiativeWUs, loadMultipleInitiatives } from './orchestrator/initiative-loading.js';
|
|
17
|
+
// ── Scope advisory (WU-2142/WU-2155) ────────────────────────────────────────
|
|
18
|
+
export { analyseScopeShape, formatScopeAdvisory, SCOPE_ADVISORY_THRESHOLDS, } from './orchestrator/scope-advisory.js';
|
|
17
19
|
//# sourceMappingURL=initiative-orchestrator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initiative-orchestrator.js","sourceRoot":"","sources":["../src/initiative-orchestrator.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,yCAAyC;AA0CzC,iFAAiF;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,iFAAiF;AACjF,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,gCAAgC,GACjC,MAAM,sCAAsC,CAAC;AAE9C,iFAAiF;AACjF,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,EACxB,0BAA0B,EAC1B,+BAA+B,EAC/B,qBAAqB,EACrB,0BAA0B,EAC1B,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AAEtC,iFAAiF;AACjF,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACtB,2BAA2B,EAC3B,qCAAqC,EACrC,qCAAqC,GACtC,MAAM,8BAA8B,CAAC;AAEtC,iFAAiF;AACjF,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,+BAA+B,GAChC,MAAM,gCAAgC,CAAC;AAExC,iFAAiF;AACjF,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAE1F,iFAAiF;AACjF,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC"}
|
|
1
|
+
{"version":3,"file":"initiative-orchestrator.js","sourceRoot":"","sources":["../src/initiative-orchestrator.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,yCAAyC;AA0CzC,iFAAiF;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,iFAAiF;AACjF,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,gCAAgC,GACjC,MAAM,sCAAsC,CAAC;AAE9C,iFAAiF;AACjF,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,EACxB,0BAA0B,EAC1B,+BAA+B,EAC/B,qBAAqB,EACrB,0BAA0B,EAC1B,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AAEtC,iFAAiF;AACjF,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACtB,2BAA2B,EAC3B,qCAAqC,EACrC,qCAAqC,GACtC,MAAM,8BAA8B,CAAC;AAEtC,iFAAiF;AACjF,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,+BAA+B,GAChC,MAAM,gCAAgC,CAAC;AAExC,iFAAiF;AACjF,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAE1F,iFAAiF;AACjF,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAElG,+EAA+E;AAC/E,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,yBAAyB,GAK1B,MAAM,kCAAkC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initiative-yaml.js","sourceRoot":"","sources":["../src/initiative-yaml.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"initiative-yaml.js","sourceRoot":"","sources":["../src/initiative-yaml.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/orchestrator/index.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/orchestrator/index.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/orchestrator/index.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,yCAAyC;AAEzC;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/orchestrator/index.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,yCAAyC;AAEzC;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Initiative scope shape advisory (WU-2142).
|
|
3
|
+
*
|
|
4
|
+
* Pure-function analysis of initiative WU sets for scope-shape anti-patterns:
|
|
5
|
+
* - Over-granular: too many WUs relative to unique files touched
|
|
6
|
+
* - Overlap-heavy: many WUs share the same code_paths
|
|
7
|
+
* - Lane-heavy: most WUs concentrated in a single lane
|
|
8
|
+
*
|
|
9
|
+
* All functions are side-effect-free. Formatting is separated from analysis.
|
|
10
|
+
*
|
|
11
|
+
* @module orchestrator/scope-advisory
|
|
12
|
+
*/
|
|
13
|
+
import type { WUEntry } from '../initiative-yaml.js';
|
|
14
|
+
/**
|
|
15
|
+
* Advisory type discriminator.
|
|
16
|
+
*/
|
|
17
|
+
export type ScopeAdvisoryType = 'over-granular' | 'overlap-heavy' | 'lane-heavy';
|
|
18
|
+
/**
|
|
19
|
+
* Advisory severity level.
|
|
20
|
+
*/
|
|
21
|
+
export type ScopeAdvisorySeverity = 'warning' | 'info';
|
|
22
|
+
/**
|
|
23
|
+
* A single scope advisory.
|
|
24
|
+
*/
|
|
25
|
+
export interface ScopeAdvisory {
|
|
26
|
+
/** Anti-pattern type. */
|
|
27
|
+
type: ScopeAdvisoryType;
|
|
28
|
+
/** Severity level. */
|
|
29
|
+
severity: ScopeAdvisorySeverity;
|
|
30
|
+
/** Human-readable detail about the detected anti-pattern. */
|
|
31
|
+
detail: string;
|
|
32
|
+
/** Actionable suggestion to resolve the anti-pattern. */
|
|
33
|
+
suggestion: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Result of scope shape analysis.
|
|
37
|
+
*/
|
|
38
|
+
export interface ScopeAdvisoryResult {
|
|
39
|
+
/** List of detected advisories (empty if initiative is clean). */
|
|
40
|
+
advisories: ScopeAdvisory[];
|
|
41
|
+
/** True if no advisories were detected. */
|
|
42
|
+
clean: boolean;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Configurable thresholds for scope shape detection.
|
|
46
|
+
*
|
|
47
|
+
* These are tuned for typical LumenFlow initiatives. Projects can adjust
|
|
48
|
+
* by passing custom thresholds in the future if needed.
|
|
49
|
+
*/
|
|
50
|
+
export declare const SCOPE_ADVISORY_THRESHOLDS: {
|
|
51
|
+
/**
|
|
52
|
+
* WU-to-unique-file ratio above which the initiative is flagged as over-granular.
|
|
53
|
+
* A ratio of 2.0 means there are twice as many WUs as unique files.
|
|
54
|
+
*/
|
|
55
|
+
readonly OVER_GRANULAR_RATIO: 2;
|
|
56
|
+
/**
|
|
57
|
+
* Percentage of WUs that share the same code path before flagging overlap.
|
|
58
|
+
* 0.5 = 50% of WUs touch at least one common file.
|
|
59
|
+
*/
|
|
60
|
+
readonly OVERLAP_PERCENTAGE: 0.5;
|
|
61
|
+
/**
|
|
62
|
+
* Percentage of WUs in a single lane before flagging lane concentration.
|
|
63
|
+
* 0.7 = 70% of WUs are in the same lane.
|
|
64
|
+
*/
|
|
65
|
+
readonly LANE_CONCENTRATION_PERCENTAGE: 0.7;
|
|
66
|
+
/**
|
|
67
|
+
* Minimum number of WUs required before lane concentration check fires.
|
|
68
|
+
* Small initiatives (< 4 WUs) naturally have high lane concentration.
|
|
69
|
+
*/
|
|
70
|
+
readonly MIN_WUS_FOR_LANE_CHECK: 4;
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* Analyse an initiative's WU set for scope-shape anti-patterns.
|
|
74
|
+
*
|
|
75
|
+
* Pure function with no side effects. Returns structured advisory data.
|
|
76
|
+
*
|
|
77
|
+
* @param wus - WU entries belonging to the initiative
|
|
78
|
+
* @returns Advisory result with any detected anti-patterns
|
|
79
|
+
*/
|
|
80
|
+
export declare function analyseScopeShape(wus: WUEntry[]): ScopeAdvisoryResult;
|
|
81
|
+
/**
|
|
82
|
+
* Format scope advisory result for display.
|
|
83
|
+
*
|
|
84
|
+
* Returns empty string if no advisories exist.
|
|
85
|
+
*
|
|
86
|
+
* @param result - Advisory result from analyseScopeShape
|
|
87
|
+
* @returns Formatted multi-line string for terminal output
|
|
88
|
+
*/
|
|
89
|
+
export declare function formatScopeAdvisory(result: ScopeAdvisoryResult): string;
|
|
90
|
+
//# sourceMappingURL=scope-advisory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-advisory.d.ts","sourceRoot":"","sources":["../../src/orchestrator/scope-advisory.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAIrD;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,eAAe,GAAG,eAAe,GAAG,YAAY,CAAC;AAEjF;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,MAAM,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,yBAAyB;IACzB,IAAI,EAAE,iBAAiB,CAAC;IACxB,sBAAsB;IACtB,QAAQ,EAAE,qBAAqB,CAAC;IAChC,6DAA6D;IAC7D,MAAM,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,kEAAkE;IAClE,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,2CAA2C;IAC3C,KAAK,EAAE,OAAO,CAAC;CAChB;AAID;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB;IACpC;;;OAGG;;IAGH;;;OAGG;;IAGH;;;OAGG;;IAGH;;;OAGG;;CAEK,CAAC;AAIX;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,mBAAmB,CA0BrE;AAID;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAevE"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
// Copyright (c) 2026 Hellmai Ltd
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
// ── Thresholds ───────────────────────────────────────────────────────────
|
|
4
|
+
/**
|
|
5
|
+
* Configurable thresholds for scope shape detection.
|
|
6
|
+
*
|
|
7
|
+
* These are tuned for typical LumenFlow initiatives. Projects can adjust
|
|
8
|
+
* by passing custom thresholds in the future if needed.
|
|
9
|
+
*/
|
|
10
|
+
export const SCOPE_ADVISORY_THRESHOLDS = {
|
|
11
|
+
/**
|
|
12
|
+
* WU-to-unique-file ratio above which the initiative is flagged as over-granular.
|
|
13
|
+
* A ratio of 2.0 means there are twice as many WUs as unique files.
|
|
14
|
+
*/
|
|
15
|
+
OVER_GRANULAR_RATIO: 2.0,
|
|
16
|
+
/**
|
|
17
|
+
* Percentage of WUs that share the same code path before flagging overlap.
|
|
18
|
+
* 0.5 = 50% of WUs touch at least one common file.
|
|
19
|
+
*/
|
|
20
|
+
OVERLAP_PERCENTAGE: 0.5,
|
|
21
|
+
/**
|
|
22
|
+
* Percentage of WUs in a single lane before flagging lane concentration.
|
|
23
|
+
* 0.7 = 70% of WUs are in the same lane.
|
|
24
|
+
*/
|
|
25
|
+
LANE_CONCENTRATION_PERCENTAGE: 0.7,
|
|
26
|
+
/**
|
|
27
|
+
* Minimum number of WUs required before lane concentration check fires.
|
|
28
|
+
* Small initiatives (< 4 WUs) naturally have high lane concentration.
|
|
29
|
+
*/
|
|
30
|
+
MIN_WUS_FOR_LANE_CHECK: 4,
|
|
31
|
+
};
|
|
32
|
+
// ── Analysis ─────────────────────────────────────────────────────────────
|
|
33
|
+
/**
|
|
34
|
+
* Analyse an initiative's WU set for scope-shape anti-patterns.
|
|
35
|
+
*
|
|
36
|
+
* Pure function with no side effects. Returns structured advisory data.
|
|
37
|
+
*
|
|
38
|
+
* @param wus - WU entries belonging to the initiative
|
|
39
|
+
* @returns Advisory result with any detected anti-patterns
|
|
40
|
+
*/
|
|
41
|
+
export function analyseScopeShape(wus) {
|
|
42
|
+
const advisories = [];
|
|
43
|
+
if (wus.length <= 1) {
|
|
44
|
+
return { advisories, clean: true };
|
|
45
|
+
}
|
|
46
|
+
const overGranularAdvisory = detectOverGranular(wus);
|
|
47
|
+
if (overGranularAdvisory) {
|
|
48
|
+
advisories.push(overGranularAdvisory);
|
|
49
|
+
}
|
|
50
|
+
const overlapAdvisory = detectOverlapConcentration(wus);
|
|
51
|
+
if (overlapAdvisory) {
|
|
52
|
+
advisories.push(overlapAdvisory);
|
|
53
|
+
}
|
|
54
|
+
const laneAdvisory = detectLaneConcentration(wus);
|
|
55
|
+
if (laneAdvisory) {
|
|
56
|
+
advisories.push(laneAdvisory);
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
advisories,
|
|
60
|
+
clean: advisories.length === 0,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
// ── Formatting ───────────────────────────────────────────────────────────
|
|
64
|
+
/**
|
|
65
|
+
* Format scope advisory result for display.
|
|
66
|
+
*
|
|
67
|
+
* Returns empty string if no advisories exist.
|
|
68
|
+
*
|
|
69
|
+
* @param result - Advisory result from analyseScopeShape
|
|
70
|
+
* @returns Formatted multi-line string for terminal output
|
|
71
|
+
*/
|
|
72
|
+
export function formatScopeAdvisory(result) {
|
|
73
|
+
if (result.clean) {
|
|
74
|
+
return '';
|
|
75
|
+
}
|
|
76
|
+
const lines = [];
|
|
77
|
+
lines.push('Scope Advisory:');
|
|
78
|
+
for (const advisory of result.advisories) {
|
|
79
|
+
lines.push(` [${advisory.severity}] ${advisory.type}: ${advisory.detail}`);
|
|
80
|
+
lines.push(` -> ${advisory.suggestion}`);
|
|
81
|
+
}
|
|
82
|
+
return lines.join('\n');
|
|
83
|
+
}
|
|
84
|
+
// ── Internal detectors ───────────────────────────────────────────────────
|
|
85
|
+
/**
|
|
86
|
+
* Collect all code_paths from WU entries, returning per-WU and aggregate sets.
|
|
87
|
+
*/
|
|
88
|
+
function collectCodePaths(wus) {
|
|
89
|
+
const uniqueFiles = new Set();
|
|
90
|
+
const fileToWuCount = new Map();
|
|
91
|
+
let wusWithPaths = 0;
|
|
92
|
+
for (const wu of wus) {
|
|
93
|
+
const paths = wu.doc.code_paths;
|
|
94
|
+
if (!paths || paths.length === 0) {
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
wusWithPaths++;
|
|
98
|
+
for (const p of paths) {
|
|
99
|
+
uniqueFiles.add(p);
|
|
100
|
+
fileToWuCount.set(p, (fileToWuCount.get(p) ?? 0) + 1);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return { uniqueFiles, wusWithPaths, fileToWuCount };
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Detect over-granular WU-to-file ratio.
|
|
107
|
+
*
|
|
108
|
+
* Fires when the number of WUs with code_paths greatly exceeds
|
|
109
|
+
* the number of unique files those WUs touch.
|
|
110
|
+
*/
|
|
111
|
+
function detectOverGranular(wus) {
|
|
112
|
+
const { uniqueFiles, wusWithPaths } = collectCodePaths(wus);
|
|
113
|
+
if (uniqueFiles.size === 0 || wusWithPaths === 0) {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
const ratio = wusWithPaths / uniqueFiles.size;
|
|
117
|
+
if (ratio > SCOPE_ADVISORY_THRESHOLDS.OVER_GRANULAR_RATIO) {
|
|
118
|
+
return {
|
|
119
|
+
type: 'over-granular',
|
|
120
|
+
severity: 'warning',
|
|
121
|
+
detail: `${wusWithPaths} WUs touch only ${uniqueFiles.size} unique files (ratio: ${ratio.toFixed(1)})`,
|
|
122
|
+
suggestion: 'Consider merging related WUs to reduce context-switching overhead.',
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Detect overlap concentration -- many WUs sharing the same code paths.
|
|
129
|
+
*
|
|
130
|
+
* Fires when any single file is touched by more than OVERLAP_PERCENTAGE
|
|
131
|
+
* of the WUs that have code_paths.
|
|
132
|
+
*/
|
|
133
|
+
function detectOverlapConcentration(wus) {
|
|
134
|
+
const { wusWithPaths, fileToWuCount } = collectCodePaths(wus);
|
|
135
|
+
if (wusWithPaths < 2) {
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
const threshold = SCOPE_ADVISORY_THRESHOLDS.OVERLAP_PERCENTAGE;
|
|
139
|
+
for (const [filePath, count] of fileToWuCount) {
|
|
140
|
+
const percentage = count / wusWithPaths;
|
|
141
|
+
if (percentage > threshold) {
|
|
142
|
+
return {
|
|
143
|
+
type: 'overlap-heavy',
|
|
144
|
+
severity: 'warning',
|
|
145
|
+
detail: `${count} of ${wusWithPaths} WUs (${Math.round(percentage * 100)}%) touch ${filePath}`,
|
|
146
|
+
suggestion: 'High overlap suggests these WUs could be consolidated or the shared file should be split first.',
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return null;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Detect lane concentration -- most WUs in a single lane.
|
|
154
|
+
*
|
|
155
|
+
* Fires when any single lane contains more than LANE_CONCENTRATION_PERCENTAGE
|
|
156
|
+
* of the total WUs, provided the initiative has enough WUs for the check
|
|
157
|
+
* to be meaningful.
|
|
158
|
+
*/
|
|
159
|
+
function detectLaneConcentration(wus) {
|
|
160
|
+
if (wus.length < SCOPE_ADVISORY_THRESHOLDS.MIN_WUS_FOR_LANE_CHECK) {
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
const laneCounts = new Map();
|
|
164
|
+
for (const wu of wus) {
|
|
165
|
+
const lane = wu.doc.lane ?? 'unknown';
|
|
166
|
+
laneCounts.set(lane, (laneCounts.get(lane) ?? 0) + 1);
|
|
167
|
+
}
|
|
168
|
+
const threshold = SCOPE_ADVISORY_THRESHOLDS.LANE_CONCENTRATION_PERCENTAGE;
|
|
169
|
+
for (const [lane, count] of laneCounts) {
|
|
170
|
+
const percentage = count / wus.length;
|
|
171
|
+
if (percentage > threshold) {
|
|
172
|
+
return {
|
|
173
|
+
type: 'lane-heavy',
|
|
174
|
+
severity: 'warning',
|
|
175
|
+
detail: `${count} of ${wus.length} WUs (${Math.round(percentage * 100)}%) are in lane "${lane}"`,
|
|
176
|
+
suggestion: 'Lane concentration creates a serialisation bottleneck. Consider splitting work across lanes or increasing WIP limits for this lane.',
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return null;
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=scope-advisory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-advisory.js","sourceRoot":"","sources":["../../src/orchestrator/scope-advisory.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lumenflow/initiatives",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.5.0",
|
|
4
4
|
"description": "Initiative tracking for LumenFlow workflow framework - multi-phase project coordination",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"lumenflow",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"dependencies": {
|
|
42
42
|
"yaml": "^2.8.2",
|
|
43
43
|
"zod": "^4.3.6",
|
|
44
|
-
"@lumenflow/core": "3.
|
|
44
|
+
"@lumenflow/core": "3.5.0"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
47
|
"@vitest/coverage-v8": "^4.0.18",
|