@aibvf/core 0.3.4 → 0.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.
@@ -0,0 +1,22 @@
1
+ /**
2
+ * The change-leader layer of the AI BVF.
3
+ *
4
+ * A Fix verdict without a route to Go is a Stop wearing a nicer word. This
5
+ * module turns a Fix or Stop into a specific, sequenced change plan: it names
6
+ * the one binding constraint, places the initiative between Go and Stop,
7
+ * selects named plays matched to the failing pillar AND the organisational
8
+ * context (readiness, tier, function, industry, and optional caller-supplied
9
+ * diagnostics), prices the cost of waiting from the pace-layer drag model,
10
+ * and sets a re-score gate so Fix is a decision with a deadline rather than
11
+ * a limbo state.
12
+ *
13
+ * Every play works at two altitudes, the organisation (Kotter) and the
14
+ * person (Prosci ADKAR), because a coalition without individual adoption
15
+ * dies quietly, and trained individuals without a coalition drift back.
16
+ * When the honest escalation from a play is Stop, the play says so.
17
+ *
18
+ * Deterministic, like everything in the engine: same inputs, same plan.
19
+ */
20
+ import type { RecommendInput, Recommendation, ChangePlan, PillarScores } from './types.js';
21
+ export declare function buildChangePlan(input: RecommendInput, resolved: PillarScores, recommendations: Recommendation[], feasible: boolean): ChangePlan;
22
+ //# sourceMappingURL=changePlan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changePlan.d.ts","sourceRoot":"","sources":["../src/changePlan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EACV,cAAc,EAAE,cAAc,EAAE,UAAU,EAAc,YAAY,EACrE,MAAM,YAAY,CAAC;AAuRpB,wBAAgB,eAAe,CAC7B,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,YAAY,EACtB,eAAe,EAAE,cAAc,EAAE,EACjC,QAAQ,EAAE,OAAO,GAChB,UAAU,CAuFZ"}
@@ -0,0 +1,353 @@
1
+ import { PACE_DRAG_RATE } from './score.js';
2
+ import { REGULATED_FUNCTIONS, REGULATED_INDUSTRIES } from './taxonomy.js';
3
+ const ACCELERATE_FLOOR = 60;
4
+ const GOV_CEILING = 40;
5
+ // ── play builders ──────────────────────────────────────────────────────────
6
+ function coalitionFirst(readiness, provisional) {
7
+ return {
8
+ id: 'coalition-first',
9
+ pillar: 'change_enablement',
10
+ diagnosis: `The change-enablement gap here reads as desire, not budget. Readiness is ${readiness}, which means functional walls, hand-off habits, and people who have not yet been given a reason to want this. Funding adoption before people want the change buys training nobody attends.`,
11
+ org_move: {
12
+ method: 'Kotter steps 1 and 2, urgency and guiding coalition',
13
+ action: 'Write the one-page case for change that answers why now and why us, then name a cross-functional sponsor coalition with a single executive chair who owns the outcome by name.',
14
+ },
15
+ person_move: {
16
+ method: 'ADKAR Awareness and Desire',
17
+ action: 'Run listening sessions with the people whose daily work changes, surface the top three reasons a reasonable person would resist, and answer them in the open before any tool lands.',
18
+ },
19
+ steps: [
20
+ 'Publish the one-page case for change: why now, why us, what changes for whom.',
21
+ 'Name the sponsor coalition and its executive chair, in writing.',
22
+ 'Hold listening sessions and publish the top three resistance points with honest answers.',
23
+ 'Size and fund the change budget at 10 to 15 percent of initiative spend, after desire exists, not before.',
24
+ 'Baseline adoption metrics before the build starts, so progress is measurable from day one.',
25
+ ],
26
+ diagnostic_questions: [
27
+ 'Who gains power, budget or status if this works?',
28
+ 'Who loses power, budget or status if this works?',
29
+ 'Who is likely to agree in the room and quietly block the change later?',
30
+ 'What would make a good person resist this change for rational reasons?',
31
+ ],
32
+ owner: 'Executive sponsor, a named individual who chairs the coalition',
33
+ timeline_weeks: [4, 6],
34
+ stop_condition: 'If no executive will chair the coalition after two direct asks, the initiative has a sponsorship vacuum, and the honest verdict is Stop until a sponsor exists.',
35
+ provisional,
36
+ source: 'Kotter, Leading Change (steps 1 to 2); Prosci ADKAR (Awareness, Desire); Prosci change benchmark',
37
+ };
38
+ }
39
+ function ownerAndCapability(provisional) {
40
+ return {
41
+ id: 'owner-and-capability',
42
+ pillar: 'change_enablement',
43
+ diagnosis: 'The organisation can absorb change, this specific capability is simply unresourced. That is a knowledge and ability gap, not a resistance problem, and coalition-building theatre would waste the goodwill that already exists.',
44
+ org_move: {
45
+ method: 'Kotter step 5, remove barriers and empower action',
46
+ action: 'Name a single accountable product owner with real capacity in writing, and fund enablement as a budget line rather than an assumption.',
47
+ },
48
+ person_move: {
49
+ method: 'ADKAR Knowledge, Ability and Reinforcement',
50
+ action: 'Run role-based skilling on the exact workflows that change, with practice time inside work hours and a named floor-level coach per affected team.',
51
+ },
52
+ steps: [
53
+ 'Name the accountable owner, with capacity confirmed in writing.',
54
+ 'Map the skills gap per affected role against the workflows that actually change.',
55
+ 'Deliver role-based training with protected practice windows.',
56
+ 'Wire adoption telemetry from day one, measuring usage rather than attendance.',
57
+ 'Run a reinforcement check at 30 days and close the gaps it finds.',
58
+ ],
59
+ diagnostic_questions: [
60
+ 'What skill does the workforce need before the tool can be trusted?',
61
+ 'What behaviour has to change before the system can create value?',
62
+ 'How will we know people have adopted the new way of working after the training has finished?',
63
+ ],
64
+ owner: 'Accountable product owner',
65
+ timeline_weeks: [3, 5],
66
+ provisional,
67
+ source: 'Prosci ADKAR (Knowledge, Ability, Reinforcement); Kotter step 5',
68
+ };
69
+ }
70
+ function regulatoryRemediation(provisional) {
71
+ return {
72
+ id: 'regulatory-remediation',
73
+ pillar: 'governance_risk',
74
+ diagnosis: 'The governance exposure here is regulatory, so no amount of change budget or communication reduces it. The remediation is sequence and design, done before the legal review at the end rather than during an incident.',
75
+ org_move: {
76
+ method: 'Pre-deployment regulatory sequence',
77
+ action: 'Classify the system under the EU AI Act, build the data lineage and model-risk file, run the DPIA where personal data is in scope, and keep a decision log that answers who owns the decision when it is wrong.',
78
+ },
79
+ person_move: {
80
+ method: 'Human-in-the-loop accountability',
81
+ action: 'Put a named human in the loop on every decision with legal or significant effect on a person, with authority to override and a script for when they should, so accountability sits with someone a regulator can name.',
82
+ },
83
+ steps: [
84
+ 'Classify the system under the EU AI Act and record the reasoning.',
85
+ 'Map every decision with legal or significant effect on people, the GDPR Article 22 surface.',
86
+ 'Design the human-in-the-loop role with genuine override authority.',
87
+ 'Complete the data lineage and model-risk documentation.',
88
+ 'Run the DPIA, remediate the findings, then re-score.',
89
+ ],
90
+ diagnostic_questions: [
91
+ 'What is the AI allowed to decide?',
92
+ 'Who owns the decision when it is wrong?',
93
+ 'What evidence would we need to defend this decision six months from now?',
94
+ ],
95
+ owner: 'Risk or compliance executive, jointly with the initiative owner',
96
+ timeline_weeks: [6, 10],
97
+ stop_condition: 'If the value case only works with full autonomy that regulation requires a human inside, this is not a Fix, it is a Stop, and finding that out now is the cheapest outcome available.',
98
+ provisional,
99
+ source: 'EU AI Act (Regulation 2024/1689); GDPR Article 22; DORA where in scope',
100
+ };
101
+ }
102
+ function trustGuardrails() {
103
+ return {
104
+ id: 'trust-guardrails',
105
+ pillar: 'governance_risk',
106
+ diagnosis: 'The exposure is reputational, which means the risk lives in how failure looks and lands rather than in a statute. Controls that only report that governance exists will not help; the fix is guardrails people can see.',
107
+ org_move: {
108
+ method: 'Visible-failure red team',
109
+ action: 'Red-team the visible failure modes, publish the escalation path, and decide in advance what the organisation says and does on the worst day.',
110
+ },
111
+ person_move: {
112
+ method: 'ADKAR Reinforcement at the front line',
113
+ action: 'Give frontline staff the disclosure language and the escalation script, so the people closest to customers are never improvising on the day something goes wrong.',
114
+ },
115
+ steps: [
116
+ 'Red-team the top failure modes as they would appear to a customer or a journalist.',
117
+ 'Publish the disclosure and escalation path internally.',
118
+ 'Script and train the frontline response.',
119
+ 'Put monitoring on the failure modes themselves, not just system health.',
120
+ 'Agree the worst-day communications plan before launch, then re-score.',
121
+ ],
122
+ diagnostic_questions: [
123
+ 'Which control is genuinely needed because of risk, and which control exists because trust is missing?',
124
+ 'What does the executive team need to know before they can sign the release with confidence?',
125
+ ],
126
+ owner: 'Initiative owner with the communications lead',
127
+ timeline_weeks: [3, 5],
128
+ provisional: false,
129
+ source: 'Operational resilience practice; Prosci ADKAR (Reinforcement)',
130
+ };
131
+ }
132
+ function governanceReview(provisional) {
133
+ return {
134
+ id: 'governance-review',
135
+ pillar: 'governance_risk',
136
+ diagnosis: 'The exposure reads operational: the risk is the system failing quietly inside a process rather than a regulator or a headline. The gap is control design, not communication.',
137
+ org_move: {
138
+ method: 'Proportionate pre-deployment review',
139
+ action: 'Run a governance review scaled to the actual risk: decision rights, failure detection, rollback, and the smallest safe version that still proves value.',
140
+ },
141
+ person_move: {
142
+ method: 'Named decision ownership',
143
+ action: 'Name the person who owns the decision when the system is wrong, and give them the authority and the information to catch it early.',
144
+ },
145
+ steps: [
146
+ 'Map decision rights: what the AI touches, what it decides, who overrides.',
147
+ 'Design failure detection and a rollback path.',
148
+ 'Scope the smallest safe version that still proves something meaningful.',
149
+ 'Review, remediate, then re-score.',
150
+ ],
151
+ diagnostic_questions: [
152
+ 'What governance helps the initiative reach production safely, and what governance only reports that governance exists?',
153
+ 'What is the smallest safe version of this idea that still proves something meaningful?',
154
+ ],
155
+ owner: 'Initiative owner with a risk partner',
156
+ timeline_weeks: [2, 4],
157
+ provisional,
158
+ source: 'AI BVF governance module',
159
+ };
160
+ }
161
+ function valueRescope(fr) {
162
+ const thin = fr <= 20;
163
+ return {
164
+ id: 'value-rescope',
165
+ pillar: 'financial_return',
166
+ diagnosis: thin
167
+ ? 'Financial return this thin fails the initiative on its own, whatever the other pillars say. The honest move is subtractive: find the slice that pays, or stop.'
168
+ : 'The case is thin because the capture rate or the scope is doing wishful work. The fix is subtractive: strengthen the case by cutting, not by adding.',
169
+ org_move: {
170
+ method: 'Value engineering, Stop-first',
171
+ action: 'Rank the scope by modelled EUR contribution, cut the features dragging the case, and rebuild the business case on the highest-value slice with an honest capture rate.',
172
+ },
173
+ person_move: {
174
+ method: 'Credible small win',
175
+ action: 'Take the smaller, sharper promise to the people affected; a small win they can see builds the desire the bigger case will need later.',
176
+ },
177
+ steps: [
178
+ 'Rank every scope element by modelled value contribution.',
179
+ 'Cut the bottom half of the scope, deliberately and in writing.',
180
+ 'Re-model the slice with benchmark rates and an honest capture rate.',
181
+ 'Re-score the slice on its own numbers.',
182
+ 'Scale only after the slice has paid.',
183
+ ],
184
+ diagnostic_questions: [
185
+ 'What is the unit of value here, a saved hour, a better decision, less risk, more revenue, faster cycle time or stronger trust?',
186
+ 'What is the smallest safe version of this idea that still proves something meaningful?',
187
+ ],
188
+ owner: 'Initiative owner with a finance partner',
189
+ timeline_weeks: [2, 4],
190
+ stop_condition: 'If no slice clears on its own numbers, the initiative does not have a thin case, it has no case, and the verdict is Stop.',
191
+ provisional: false,
192
+ source: 'AI BVF benchmark rates; McKinsey State of AI',
193
+ };
194
+ }
195
+ function boardAnchor() {
196
+ return {
197
+ id: 'board-anchor',
198
+ pillar: 'strategic_alignment',
199
+ diagnosis: 'Nobody at board level would miss this if it stopped tomorrow, which is what a low strategic alignment score means in practice.',
200
+ org_move: {
201
+ method: 'Kotter steps 1 and 3, urgency anchored in a real outcome',
202
+ action: 'Anchor the initiative to one named board-level KPI with a written success metric, an owner, and a timeframe, or accept that it is a pet project.',
203
+ },
204
+ person_move: {
205
+ method: 'Sponsor conviction test',
206
+ action: 'The sponsor explains to their own leadership why this initiative carries their name; if they will not make that argument, that is the answer.',
207
+ },
208
+ steps: [
209
+ 'List the board-level KPIs this initiative could plausibly move.',
210
+ 'Pick one, write the success metric and the timeframe.',
211
+ 'Have the sponsor sign it, by name.',
212
+ 'Re-score with the anchor in place.',
213
+ ],
214
+ diagnostic_questions: [
215
+ 'Which board outcome moves if this works, and who reports that number today?',
216
+ 'What do people need to believe before they will back this properly?',
217
+ ],
218
+ owner: 'Executive sponsor',
219
+ timeline_weeks: [1, 2],
220
+ stop_condition: 'If no board KPI plausibly moves, stop before this becomes a well-run irrelevant thing.',
221
+ provisional: false,
222
+ source: 'Kotter, Leading Change (steps 1, 3); AI BVF strategic alignment module',
223
+ };
224
+ }
225
+ function paceRealign(ai_tier, readiness) {
226
+ return {
227
+ id: 'pace-realign',
228
+ pillar: 'pace_gap',
229
+ diagnosis: `The initiative may be fine, the ground is not: ${ai_tier} ambition on ${readiness} readiness is a severe pace-layer mismatch, and project-level polish cannot fix an operating-model gap.`,
230
+ org_move: {
231
+ method: 'Pace-layer decision',
232
+ action: 'Choose deliberately: lift readiness first (decision rights, cross-functional teams, faster cadence) or drop the ambition one tier for phase one and earn the right to the higher tier.',
233
+ },
234
+ person_move: {
235
+ method: 'Change-load pacing',
236
+ action: 'Match the change load to what people can actually absorb; a tier too far breeds quiet non-adoption, which reads as failure of the AI when it is failure of pacing.',
237
+ },
238
+ steps: [
239
+ 'Read the pace layers: which parts of the operating model move at which speed.',
240
+ 'Decide: lift readiness or drop the tier for phase one, in writing.',
241
+ 'If dropping the tier, rescope to the highest-value lower-tier slice.',
242
+ 'Re-score with the pacing decision made.',
243
+ ],
244
+ diagnostic_questions: [
245
+ 'What behaviour has to change before the system can create value?',
246
+ 'Where would a uniform control model create friction without creating confidence?',
247
+ ],
248
+ owner: 'Executive sponsor with the operating-model owner',
249
+ timeline_weeks: [4, 8],
250
+ provisional: false,
251
+ source: 'AI BVF pace-layer diagnostic',
252
+ };
253
+ }
254
+ // ── plan assembly ──────────────────────────────────────────────────────────
255
+ function inferRiskType(input) {
256
+ if (input.ai_tier === 'gen3')
257
+ return 'regulatory';
258
+ if (REGULATED_FUNCTIONS.has(input.function))
259
+ return 'regulatory';
260
+ if (input.industry && REGULATED_INDUSTRIES.has(input.industry))
261
+ return 'regulatory';
262
+ if (input.function === 'cx' || input.function === 'sales')
263
+ return 'reputational';
264
+ return 'operational';
265
+ }
266
+ function inferResistanceType(input) {
267
+ return input.readiness === 'agile' ? 'skill' : 'will';
268
+ }
269
+ export function buildChangePlan(input, resolved, recommendations, feasible) {
270
+ const { strategic_alignment: sa, financial_return: fr, change_enablement: ce, governance_risk: gr } = resolved;
271
+ // Severity per pillar: distance from the Accelerate thresholds, with the
272
+ // forcing conditions (GR >= 70, FR <= 20) dominating everything else.
273
+ const allShortfalls = [
274
+ { pillar: 'strategic_alignment', severity: Math.max(0, ACCELERATE_FLOOR - sa), forcing: false },
275
+ { pillar: 'financial_return', severity: Math.max(0, ACCELERATE_FLOOR - fr), forcing: fr <= 20 },
276
+ { pillar: 'change_enablement', severity: Math.max(0, ACCELERATE_FLOOR - ce), forcing: false },
277
+ { pillar: 'governance_risk', severity: Math.max(0, gr - GOV_CEILING), forcing: gr >= 70 },
278
+ ];
279
+ const shortfalls = allShortfalls.filter(s => s.severity > 0);
280
+ shortfalls.sort((a, b) => (Number(b.forcing) - Number(a.forcing)) || (b.severity - a.severity));
281
+ const PILLAR_NAME = {
282
+ strategic_alignment: 'strategic alignment',
283
+ financial_return: 'financial return',
284
+ change_enablement: 'change enablement',
285
+ governance_risk: 'governance risk',
286
+ };
287
+ const top = shortfalls[0];
288
+ const binding_constraint = top
289
+ ? (shortfalls.length === 1
290
+ ? `${PILLAR_NAME[top.pillar]} is the only thing standing between this initiative and a Go; everything else clears. The first play below is where this is won.`
291
+ : `${PILLAR_NAME[top.pillar]} is the binding constraint${top.forcing ? ', and it is currently forcing the verdict on its own' : ''}. The other gaps matter, but nothing moves until this one does, so the plays are sequenced with it first.`)
292
+ : 'No single pillar is failing; the verdict is being shaped by the combination. Work the plays in the order given.';
293
+ // Position between Go and Stop.
294
+ const totalShortfall = shortfalls.reduce((s, x) => s + x.severity, 0);
295
+ const nearStop = gr >= 60 || fr <= 30;
296
+ const position = nearStop ? 'near_stop' : (totalShortfall <= 20 ? 'near_go' : 'contested');
297
+ const position_detail = position === 'near_go'
298
+ ? `This Fix is a Go you are ${totalShortfall} points away from. The gaps are closable inside the plan window; treat it as a funding decision waiting on evidence, not a rescue.`
299
+ : position === 'near_stop'
300
+ ? 'This Fix is leaning toward Stop: one adverse finding on the weak pillar tips it. Run the first play only, then re-score before spending anything else.'
301
+ : 'This Fix is genuinely contested: real gaps on more than one pillar. Sequence the plays, do not run them in parallel, and let the re-score arbitrate.';
302
+ // Select plays, worst pillar first.
303
+ const plays = [];
304
+ for (const s of shortfalls) {
305
+ if (s.pillar === 'change_enablement') {
306
+ const told = input.resistance_type !== undefined;
307
+ const rt = input.resistance_type ?? inferResistanceType(input);
308
+ plays.push(rt === 'skill' ? ownerAndCapability(!told) : coalitionFirst(input.readiness, !told));
309
+ }
310
+ else if (s.pillar === 'governance_risk') {
311
+ const told = input.risk_type !== undefined;
312
+ const rt = input.risk_type ?? inferRiskType(input);
313
+ if (rt === 'regulatory')
314
+ plays.push(regulatoryRemediation(!told));
315
+ else if (rt === 'reputational')
316
+ plays.push(trustGuardrails());
317
+ else
318
+ plays.push(governanceReview(!told));
319
+ }
320
+ else if (s.pillar === 'financial_return') {
321
+ plays.push(valueRescope(fr));
322
+ }
323
+ else {
324
+ plays.push(boardAnchor());
325
+ }
326
+ }
327
+ // Severe pace-layer mismatch is a cross-cutting play: the ground, not the project.
328
+ const severeGap = (input.ai_tier === 'gen3' && input.readiness !== 'agile')
329
+ || (input.ai_tier === 'gen2' && input.readiness === 'siloed');
330
+ if (severeGap)
331
+ plays.push(paceRealign(input.ai_tier, input.readiness));
332
+ // Price the delay from the drag model over the plan window.
333
+ const planWeeks = Math.max(...plays.map(p => p.timeline_weeks[1]), 4);
334
+ const rate = PACE_DRAG_RATE[input.ai_tier]?.[input.readiness];
335
+ const weeklyLow = rate ? (input.revenue_eur * rate.lo) / 52 : 0;
336
+ const weeklyHigh = rate ? (input.revenue_eur * rate.hi) / 52 : 0;
337
+ const cost_of_waiting_eur = {
338
+ low: Math.round(weeklyLow * planWeeks),
339
+ high: Math.round(weeklyHigh * planWeeks),
340
+ };
341
+ const cost_of_waiting = rate
342
+ ? `Sitting in Fix is not free: over the ${planWeeks}-week plan window the pace-layer mismatch carries an estimated ${cost_of_waiting_eur.low.toLocaleString('en-IE')} to ${cost_of_waiting_eur.high.toLocaleString('en-IE')} EUR of organisational drag. If the cost of the plays above is clearly smaller than that, fix now; if it is clearly larger, treat this as a Stop and say so.`
343
+ : 'Cost of waiting could not be modelled for this tier and readiness combination.';
344
+ const rescore_gate = {
345
+ clears_when: 'strategic alignment, financial return and change enablement all at or above 60 with governance risk at or below 40, scored honestly, not negotiated',
346
+ deadline_weeks: planWeeks,
347
+ };
348
+ const honest_stop = !feasible
349
+ ? 'The gaps are structurally too wide to close by improving this initiative: the truthful verdict is Stop. Redirect the plays toward scoping a different use case rather than rescuing this one, and treat the budget you have not yet spent as the win.'
350
+ : undefined;
351
+ return { binding_constraint, position, position_detail, plays, cost_of_waiting_eur, cost_of_waiting, rescore_gate, honest_stop };
352
+ }
353
+ //# sourceMappingURL=changePlan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changePlan.js","sourceRoot":"","sources":["../src/changePlan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=changePlan.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changePlan.test.d.ts","sourceRoot":"","sources":["../src/changePlan.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,108 @@
1
+ import test from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { recommendImprovements } from './score.js';
4
+ const base = {
5
+ industry: 'manufacturing',
6
+ revenue_eur: 2_400_000_000,
7
+ function: 'supply',
8
+ ai_tier: 'gen2',
9
+ readiness: 'traditional',
10
+ scores: { strategic_alignment: 70, financial_return: 65, change_enablement: 45, governance_risk: 35 },
11
+ };
12
+ test('CE-low on traditional readiness selects coalition-first, provisional, with a stop condition', () => {
13
+ const r = recommendImprovements(base);
14
+ const plan = r.change_plan;
15
+ const play = plan.plays.find(p => p.pillar === 'change_enablement');
16
+ assert.equal(play.id, 'coalition-first');
17
+ assert.equal(play.provisional, true);
18
+ assert.ok(play.person_move.method.includes('Awareness'));
19
+ assert.ok(play.stop_condition && play.stop_condition.includes('Stop'));
20
+ assert.ok(play.diagnostic_questions.length >= 3);
21
+ });
22
+ test('caller-supplied resistance_type=skill overrides inference and is not provisional', () => {
23
+ const r = recommendImprovements({ ...base, resistance_type: 'skill' });
24
+ const play = r.change_plan.plays.find(p => p.pillar === 'change_enablement');
25
+ assert.equal(play.id, 'owner-and-capability');
26
+ assert.equal(play.provisional, false);
27
+ assert.ok(play.person_move.method.includes('Knowledge'));
28
+ });
29
+ test('agile readiness infers the skill-side play', () => {
30
+ const r = recommendImprovements({ ...base, readiness: 'agile' });
31
+ const play = r.change_plan.plays.find(p => p.pillar === 'change_enablement');
32
+ assert.equal(play.id, 'owner-and-capability');
33
+ assert.equal(play.provisional, true);
34
+ });
35
+ test('high GR in a regulated function selects regulatory remediation with the honest stop language', () => {
36
+ const r = recommendImprovements({
37
+ ...base,
38
+ function: 'risk',
39
+ scores: { ...base.scores, change_enablement: 70, governance_risk: 65 },
40
+ });
41
+ const play = r.change_plan.plays.find(p => p.pillar === 'governance_risk');
42
+ assert.equal(play.id, 'regulatory-remediation');
43
+ assert.ok(play.stop_condition && play.stop_condition.includes('Stop'));
44
+ assert.ok(play.steps.some(s => s.includes('EU AI Act')));
45
+ });
46
+ test('risk_type=reputational selects trust-guardrails', () => {
47
+ const r = recommendImprovements({
48
+ ...base,
49
+ risk_type: 'reputational',
50
+ scores: { ...base.scores, change_enablement: 70, governance_risk: 55 },
51
+ });
52
+ const play = r.change_plan.plays.find(p => p.pillar === 'governance_risk');
53
+ assert.equal(play.id, 'trust-guardrails');
54
+ });
55
+ test('forcing FR selects value-rescope, positions near_stop, and binds the constraint to financial return', () => {
56
+ const r = recommendImprovements({
57
+ ...base,
58
+ scores: { strategic_alignment: 70, financial_return: 15, change_enablement: 70, governance_risk: 35 },
59
+ });
60
+ const plan = r.change_plan;
61
+ assert.equal(plan.position, 'near_stop');
62
+ assert.ok(plan.binding_constraint.includes('financial return'));
63
+ const play = plan.plays.find(p => p.pillar === 'financial_return');
64
+ assert.equal(play.id, 'value-rescope');
65
+ assert.ok(play.stop_condition);
66
+ });
67
+ test('gen3 on siloed adds the cross-cutting pace-realign play', () => {
68
+ const r = recommendImprovements({ ...base, ai_tier: 'gen3', readiness: 'siloed' });
69
+ assert.ok(r.change_plan.plays.some(p => p.id === 'pace-realign'));
70
+ });
71
+ test('near_go when the total shortfall is small', () => {
72
+ const r = recommendImprovements({
73
+ ...base,
74
+ scores: { strategic_alignment: 58, financial_return: 62, change_enablement: 58, governance_risk: 42 },
75
+ });
76
+ assert.equal(r.change_plan.position, 'near_go');
77
+ });
78
+ test('cost of waiting is a positive EUR range tied to the plan window', () => {
79
+ const plan = recommendImprovements(base).change_plan;
80
+ assert.ok(plan.cost_of_waiting_eur.low > 0);
81
+ assert.ok(plan.cost_of_waiting_eur.high > plan.cost_of_waiting_eur.low);
82
+ assert.ok(plan.cost_of_waiting.includes('EUR'));
83
+ assert.ok(plan.rescore_gate.deadline_weeks >= 4);
84
+ });
85
+ test('Accelerate carries no change plan', () => {
86
+ const r = recommendImprovements({
87
+ ...base,
88
+ scores: { strategic_alignment: 80, financial_return: 75, change_enablement: 70, governance_risk: 30 },
89
+ });
90
+ assert.equal(r.change_plan, undefined);
91
+ });
92
+ test('infeasible gaps surface the honest stop', () => {
93
+ const r = recommendImprovements({
94
+ ...base,
95
+ scores: { strategic_alignment: 30, financial_return: 5, change_enablement: 30, governance_risk: 80 },
96
+ });
97
+ assert.equal(r.feasible, false);
98
+ assert.ok(r.change_plan.honest_stop && r.change_plan.honest_stop.includes('Stop'));
99
+ });
100
+ test('plan text carries no em-dashes and no banned vocabulary', () => {
101
+ const plan = recommendImprovements(base).change_plan;
102
+ const text = JSON.stringify(plan);
103
+ assert.ok(!text.includes('—'), 'em-dash found in plan text');
104
+ for (const banned of ['boardroom', 'leverage', 'crucial', 'pivotal', 'seamless']) {
105
+ assert.ok(!text.toLowerCase().includes(banned), `banned word found: ${banned}`);
106
+ }
107
+ });
108
+ //# sourceMappingURL=changePlan.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changePlan.test.js","sourceRoot":"","sources":["../src/changePlan.test.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export { validate } from './validate.js';
2
- export { score, recommendImprovements, calculatePaceLayerDrag, BASE_RATES, IND_MULT, TIER_ADJ, READINESS_CAPTURE, PACE_DRAG_RATE, } from './score.js';
2
+ export { score, recommendImprovements, calculatePaceLayerDrag, estimatePillars, resolvePillars, BASE_RATES, IND_MULT, TIER_ADJ, READINESS_CAPTURE, PACE_DRAG_RATE, } from './score.js';
3
3
  export { diagnoseProcess, BRAIN_VERSION, EVIDENCE, FUNCTION_MEDIANS, } from './diagnose.js';
4
+ export { buildChangePlan } from './changePlan.js';
4
5
  export { bvfSchema } from './schema.js';
5
6
  export { INDUSTRIES, FUNCTIONS, AI_TIERS, READINESS, INDUSTRY_LABEL, FUNCTION_LABEL, TIER_LABEL } from './taxonomy.js';
6
7
  export type * from './types.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EACL,KAAK,EACL,qBAAqB,EACrB,sBAAsB,EACtB,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,cAAc,GAClE,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,eAAe,EACf,aAAa,EAAE,QAAQ,EAAE,gBAAgB,GAC1C,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACvH,mBAAmB,YAAY,CAAC;AAEhC,eAAO,MAAM,WAAW,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EACL,KAAK,EACL,qBAAqB,EACrB,sBAAsB,EACtB,eAAe,EAAE,cAAc,EAC/B,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,cAAc,GAClE,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,eAAe,EACf,aAAa,EAAE,QAAQ,EAAE,gBAAgB,GAC1C,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACvH,mBAAmB,YAAY,CAAC;AAEhC,eAAO,MAAM,WAAW,QAAQ,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  export { validate } from './validate.js';
2
- export { score, recommendImprovements, calculatePaceLayerDrag, BASE_RATES, IND_MULT, TIER_ADJ, READINESS_CAPTURE, PACE_DRAG_RATE, } from './score.js';
2
+ export { score, recommendImprovements, calculatePaceLayerDrag, estimatePillars, resolvePillars, BASE_RATES, IND_MULT, TIER_ADJ, READINESS_CAPTURE, PACE_DRAG_RATE, } from './score.js';
3
3
  export { diagnoseProcess, BRAIN_VERSION, EVIDENCE, FUNCTION_MEDIANS, } from './diagnose.js';
4
+ export { buildChangePlan } from './changePlan.js';
4
5
  export { bvfSchema } from './schema.js';
5
6
  export { INDUSTRIES, FUNCTIONS, AI_TIERS, READINESS, INDUSTRY_LABEL, FUNCTION_LABEL, TIER_LABEL } from './taxonomy.js';
6
7
  export const BVF_VERSION = '1.0';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EACL,KAAK,EACL,qBAAqB,EACrB,sBAAsB,EACtB,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,cAAc,GAClE,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,eAAe,EACf,aAAa,EAAE,QAAQ,EAAE,gBAAgB,GAC1C,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGvH,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EACL,KAAK,EACL,qBAAqB,EACrB,sBAAsB,EACtB,eAAe,EAAE,cAAc,EAC/B,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,cAAc,GAClE,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,eAAe,EACf,aAAa,EAAE,QAAQ,EAAE,gBAAgB,GAC1C,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGvH,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=pillarsOptional.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pillarsOptional.test.d.ts","sourceRoot":"","sources":["../src/pillarsOptional.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,75 @@
1
+ import test from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { score, recommendImprovements, estimatePillars } from './score.js';
4
+ const bare = {
5
+ industry: 'manufacturing', revenue_eur: 500_000_000,
6
+ function: 'cx', ai_tier: 'gen2', readiness: 'agile',
7
+ };
8
+ test('score runs with no pillar scores at all and reports every pillar estimated', () => {
9
+ const r = score(bare);
10
+ assert.ok(['Fix', 'Stop'].includes(r.classification));
11
+ assert.deepEqual(Object.values(r.pillar_basis), ['estimated', 'estimated', 'estimated', 'estimated']);
12
+ assert.ok(r.caveat && r.caveat.includes('Estimated pillars'));
13
+ });
14
+ test('fully estimated pillars never produce an Accelerate, by prior design', () => {
15
+ // Sweep every tier x readiness x function combination with no scores given.
16
+ for (const ai_tier of ['gen1', 'gen2', 'gen3']) {
17
+ for (const readiness of ['agile', 'traditional', 'siloed']) {
18
+ for (const fn of ['finance', 'hr', 'sales', 'supply', 'cx', 'risk', 'it', 'rd']) {
19
+ const r = score({ ...bare, ai_tier, readiness, function: fn });
20
+ assert.notEqual(r.classification, 'Accelerate', `${ai_tier}/${readiness}/${fn} accelerated on estimates`);
21
+ }
22
+ }
23
+ }
24
+ });
25
+ test('estimated GR forces Stop for agentic AI in a regulated function and industry', () => {
26
+ const r = score({ ...bare, industry: 'financial', function: 'risk', ai_tier: 'gen3' });
27
+ // gen3 (55) + regulated function (+10) + regulated industry (+8) = 73 >= 70.
28
+ assert.equal(r.scores_used.governance_risk, 73);
29
+ assert.equal(r.classification, 'Stop');
30
+ });
31
+ test('estimation priors are deterministic and sit in unproven territory', () => {
32
+ const e = estimatePillars({ industry: 'retail', function: 'sales', ai_tier: 'gen1', readiness: 'siloed' });
33
+ assert.deepEqual(e, estimatePillars({ industry: 'retail', function: 'sales', ai_tier: 'gen1', readiness: 'siloed' }));
34
+ assert.equal(e.strategic_alignment, 50);
35
+ assert.equal(e.change_enablement, 32);
36
+ assert.ok(e.financial_return < 60 && e.financial_return > 20);
37
+ });
38
+ test('partial scores keep given values, estimate the rest, and scale the signal default', () => {
39
+ const r = score({ ...bare, scores: { strategic_alignment: 70, financial_return: 65 } });
40
+ assert.equal(r.pillar_basis.strategic_alignment, 'given');
41
+ assert.equal(r.pillar_basis.financial_return, 'given');
42
+ assert.equal(r.pillar_basis.change_enablement, 'estimated');
43
+ assert.equal(r.scores_used.strategic_alignment, 70);
44
+ // 2 of 4 given: default signal 0.75, so confidence is haircut below the full-signal figure.
45
+ const full = score({ ...bare, scores: { strategic_alignment: 70, financial_return: 65, change_enablement: 55, governance_risk: 42 } });
46
+ assert.ok(r.confidence < full.confidence + 10); // sanity: haircut applied, not inflated
47
+ });
48
+ test('a mixed call with one estimated pillar can still Accelerate, with the estimation caveat attached', () => {
49
+ const r = score({
50
+ ...bare, ai_tier: 'gen1', industry: 'retail',
51
+ scores: { strategic_alignment: 72, financial_return: 68, change_enablement: 66 },
52
+ });
53
+ // GR estimated at gen1 unregulated = 30, under the 40 ceiling.
54
+ assert.equal(r.classification, 'Accelerate');
55
+ assert.equal(r.pillar_basis.governance_risk, 'estimated');
56
+ assert.ok(r.caveat && r.caveat.includes('governance_risk'));
57
+ });
58
+ test('all four given reproduces the old behaviour exactly: basis given, no estimation caveat, signal 1', () => {
59
+ const r = score({ ...bare, scores: { strategic_alignment: 70, financial_return: 65, change_enablement: 62, governance_risk: 35 } });
60
+ assert.deepEqual(Object.values(r.pillar_basis), ['given', 'given', 'given', 'given']);
61
+ assert.equal(r.classification, 'Accelerate');
62
+ assert.equal(r.caveat, undefined);
63
+ });
64
+ test('explicit signal_completeness still wins over the given-count default', () => {
65
+ const r = score({ ...bare, signal_completeness: 0.2 });
66
+ assert.ok(r.caveat && r.caveat.includes('0.2'));
67
+ });
68
+ test('recommend_improvements runs with no scores and returns a provisional change plan', () => {
69
+ const r = recommendImprovements({ ...bare, ai_tier: 'gen3', readiness: 'traditional' });
70
+ assert.ok(['Fix', 'Stop'].includes(r.current_classification));
71
+ assert.ok(r.notes.some(n => n.includes('Estimated pillars')));
72
+ assert.ok(r.change_plan && r.change_plan.plays.length > 0);
73
+ assert.ok(r.change_plan.plays.some(p => p.id === 'pace-realign'));
74
+ });
75
+ //# sourceMappingURL=pillarsOptional.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pillarsOptional.test.js","sourceRoot":"","sources":["../src/pillarsOptional.test.ts"],"names":[],"mappings":"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"}
package/dist/score.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { ScoreInput, ScoreResult, RecommendInput, RecommendResult, PaceLayerInput, PaceLayerResult, AiTier, Readiness } from './types.js';
1
+ import type { ScoreInput, ScoreResult, RecommendInput, RecommendResult, PaceLayerInput, PaceLayerResult, PillarScores, PillarBasis, AiTier, Readiness } from './types.js';
2
2
  interface BaseRate {
3
3
  rev: {
4
4
  lo: number;
@@ -55,6 +55,34 @@ export declare const PACE_DRAG_RATE: Record<AiTier, Record<Readiness, {
55
55
  lo: number;
56
56
  hi: number;
57
57
  }>>;
58
+ /**
59
+ * Deterministic pillar estimation for callers who do not have measured
60
+ * pillar scores. Every prior is anchored to something the engine already
61
+ * knows, and every estimated value sits in unproven territory by design:
62
+ * an estimate can force caution (a Stop) but can never hand out the
63
+ * evidence-cleared scores an Accelerate requires.
64
+ *
65
+ * - strategic_alignment: flat 50. Alignment to a board KPI cannot be read
66
+ * from industry or function; 50 means unproven, ask the board-anchor
67
+ * question.
68
+ * - financial_return: anchored to the published benchmark upside for the
69
+ * function (BASE_RATES). Strong upside estimates 52, mid 46, thin 40.
70
+ * Never above 60 (an unmodelled case is unproven), never at or below 20
71
+ * (no evidence of a bad case either).
72
+ * - change_enablement: from readiness, the engine's change-capability
73
+ * proxy. agile 55, traditional 45, siloed 32.
74
+ * - governance_risk: from tier plus regulated context. gen1 30, gen2 42,
75
+ * gen3 55, +10 in a regulated function, +8 in a regulated industry.
76
+ * Agentic AI in a regulated function and industry estimates at 73,
77
+ * which forces a Stop until governance evidence exists — deliberate.
78
+ */
79
+ export declare function estimatePillars(input: Pick<ScoreInput, 'industry' | 'function' | 'ai_tier' | 'readiness'>): PillarScores;
80
+ /** Resolve given + estimated pillars into a full set, with provenance. */
81
+ export declare function resolvePillars(input: ScoreInput): {
82
+ scores: PillarScores;
83
+ basis: PillarBasis;
84
+ givenCount: number;
85
+ };
58
86
  /**
59
87
  * Score an initiative according to AI BVF v1.0.
60
88
  * Deterministic. No network. No dependencies.
@@ -1 +1 @@
1
- {"version":3,"file":"score.d.ts","sourceRoot":"","sources":["../src/score.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EAAE,WAAW,EACvB,cAAc,EAAE,eAAe,EAC/B,cAAc,EAAE,eAAe,EACT,MAAM,EAAE,SAAS,EACxC,MAAM,YAAY,CAAC;AAEpB,UAAU,QAAQ;IAChB,GAAG,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAChC,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACjC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAS/C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAe3D,CAAC;AAEF,eAAO,MAAM,QAAQ;;;;CAAkD,CAAC;AAExE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;CAIpB,CAAC;AAEX;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAIxF,CAAC;AAgDF;;;GAGG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,CA6CpD;AAwBD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,cAAc,GAAG,eAAe,CA4C5E;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,cAAc,GAAG,eAAe,CAwB7E"}
1
+ {"version":3,"file":"score.d.ts","sourceRoot":"","sources":["../src/score.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EAAE,WAAW,EACvB,cAAc,EAAE,eAAe,EAC/B,cAAc,EAAE,eAAe,EAC/B,YAAY,EAAE,WAAW,EACH,MAAM,EAAE,SAAS,EACxC,MAAM,YAAY,CAAC;AAMpB,UAAU,QAAQ;IAChB,GAAG,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAChC,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACjC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAS/C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAe3D,CAAC;AAEF,eAAO,MAAM,QAAQ;;;;CAAkD,CAAC;AAExE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;CAIpB,CAAC;AAEX;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAIxF,CAAC;AAgDF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,CAAC,GACzE,YAAY,CAed;AAED,0EAA0E;AAC1E,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG;IACjD,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,WAAW,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,CAaA;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,CAgEpD;AAwBD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,cAAc,GAAG,eAAe,CAoD5E;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,cAAc,GAAG,eAAe,CAwB7E"}
package/dist/score.js CHANGED
@@ -1,3 +1,7 @@
1
+ import { REGULATED_FUNCTIONS, REGULATED_INDUSTRIES } from './taxonomy.js';
2
+ // Deferred-access import: buildChangePlan is only called inside
3
+ // recommendImprovements, so the score <-> changePlan module cycle is safe.
4
+ import { buildChangePlan } from './changePlan.js';
1
5
  /**
2
6
  * Published benchmark ranges, by business function.
3
7
  * Rates are fractions of annual revenue (lo/hi).
@@ -100,12 +104,70 @@ function appliedModules(industry, fn, readiness) {
100
104
  }
101
105
  /** Below this signal_completeness, score() attaches a soft-inputs caveat. */
102
106
  const SIGNAL_CAVEAT_THRESHOLD = 0.7;
107
+ /**
108
+ * Deterministic pillar estimation for callers who do not have measured
109
+ * pillar scores. Every prior is anchored to something the engine already
110
+ * knows, and every estimated value sits in unproven territory by design:
111
+ * an estimate can force caution (a Stop) but can never hand out the
112
+ * evidence-cleared scores an Accelerate requires.
113
+ *
114
+ * - strategic_alignment: flat 50. Alignment to a board KPI cannot be read
115
+ * from industry or function; 50 means unproven, ask the board-anchor
116
+ * question.
117
+ * - financial_return: anchored to the published benchmark upside for the
118
+ * function (BASE_RATES). Strong upside estimates 52, mid 46, thin 40.
119
+ * Never above 60 (an unmodelled case is unproven), never at or below 20
120
+ * (no evidence of a bad case either).
121
+ * - change_enablement: from readiness, the engine's change-capability
122
+ * proxy. agile 55, traditional 45, siloed 32.
123
+ * - governance_risk: from tier plus regulated context. gen1 30, gen2 42,
124
+ * gen3 55, +10 in a regulated function, +8 in a regulated industry.
125
+ * Agentic AI in a regulated function and industry estimates at 73,
126
+ * which forces a Stop until governance evidence exists — deliberate.
127
+ */
128
+ export function estimatePillars(input) {
129
+ const base = BASE_RATES[input.function];
130
+ const upside = base ? base.rev.hi + base.cost.hi : 0;
131
+ const financial_return = upside >= 0.10 ? 52 : upside >= 0.07 ? 46 : 40;
132
+ const CE_BY_READINESS = { agile: 55, traditional: 45, siloed: 32 };
133
+ const change_enablement = CE_BY_READINESS[input.readiness] ?? 45;
134
+ const GR_BY_TIER = { gen1: 30, gen2: 42, gen3: 55 };
135
+ let governance_risk = GR_BY_TIER[input.ai_tier] ?? 42;
136
+ if (REGULATED_FUNCTIONS.has(input.function))
137
+ governance_risk += 10;
138
+ if (input.industry && REGULATED_INDUSTRIES.has(input.industry))
139
+ governance_risk += 8;
140
+ governance_risk = Math.min(100, governance_risk);
141
+ return { strategic_alignment: 50, financial_return, change_enablement, governance_risk };
142
+ }
143
+ /** Resolve given + estimated pillars into a full set, with provenance. */
144
+ export function resolvePillars(input) {
145
+ const est = estimatePillars(input);
146
+ const given = input.scores ?? {};
147
+ const pillars = ['strategic_alignment', 'financial_return', 'change_enablement', 'governance_risk'];
148
+ const scores = {};
149
+ const basis = {};
150
+ let givenCount = 0;
151
+ for (const p of pillars) {
152
+ const v = given[p];
153
+ if (typeof v === 'number') {
154
+ scores[p] = v;
155
+ basis[p] = 'given';
156
+ givenCount++;
157
+ }
158
+ else {
159
+ scores[p] = est[p];
160
+ basis[p] = 'estimated';
161
+ }
162
+ }
163
+ return { scores, basis, givenCount };
164
+ }
103
165
  /**
104
166
  * Score an initiative according to AI BVF v1.0.
105
167
  * Deterministic. No network. No dependencies.
106
168
  */
107
169
  export function score(input) {
108
- const { industry, revenue_eur, function: fn, ai_tier, readiness, scores } = input;
170
+ const { industry, revenue_eur, function: fn, ai_tier, readiness } = input;
109
171
  const base = BASE_RATES[fn];
110
172
  if (!base)
111
173
  throw new Error(`Unknown function: ${fn}`);
@@ -116,23 +178,39 @@ export function score(input) {
116
178
  const cap = READINESS_CAPTURE[readiness];
117
179
  if (!cap)
118
180
  throw new Error(`Unknown readiness: ${readiness}`);
119
- const { strategic_alignment: sa, financial_return: fr, change_enablement: ce, governance_risk: gr } = scores;
181
+ const { scores: resolved, basis, givenCount } = resolvePillars(input);
182
+ const { strategic_alignment: sa, financial_return: fr, change_enablement: ce, governance_risk: gr } = resolved;
183
+ const allEstimated = givenCount === 0;
184
+ const anyEstimated = givenCount < 4;
120
185
  const grossLo = Math.round(revenue_eur * (base.rev.lo + base.cost.lo) * mult * tAdj);
121
186
  const grossHi = Math.round(revenue_eur * (base.rev.hi + base.cost.hi) * mult * tAdj);
122
187
  const netLo = Math.round(grossLo * cap.low);
123
188
  const netHi = Math.round(grossHi * cap.high);
124
- const cls = classify(sa, fr, ce, gr);
189
+ let cls = classify(sa, fr, ce, gr);
190
+ // Stop-first invariant: a fully-estimated pass can never hand out a green
191
+ // light. The priors already make this structurally impossible (estimated
192
+ // strategic_alignment is 50), this guard keeps the promise even if the
193
+ // priors ever change.
194
+ if (allEstimated && cls.label === 'Accelerate') {
195
+ cls = { label: 'Fix', reason: 'Clears the Accelerate thresholds on estimated pillars only. Confirm the four pillar scores with evidence to unlock the Go.' };
196
+ }
125
197
  // Base confidence from the pillar scores themselves.
126
198
  const baseConfidence = (sa + fr + ce + (100 - gr)) / 4;
127
- // Input-quality haircut. signal_completeness defaults to 1 (measured), which
128
- // leaves confidence identical to the pre-0.3.4 formula. As the inputs become
129
- // estimated rather than measured, confidence is scaled toward half the
130
- // verdict is only as trustworthy as the metadata behind it.
131
- const signal = Math.max(0, Math.min(1, input.signal_completeness ?? 1));
199
+ // Input-quality haircut. When the caller does not supply
200
+ // signal_completeness it defaults from how many pillars were actually
201
+ // given: all four = 1 (identical to the pre-0.5.0 behaviour), none = 0.5.
202
+ const defaultSignal = 0.5 + 0.125 * givenCount;
203
+ const signal = Math.max(0, Math.min(1, input.signal_completeness ?? defaultSignal));
132
204
  const confidence = Math.round(baseConfidence * (0.5 + 0.5 * signal));
133
- const caveat = signal < SIGNAL_CAVEAT_THRESHOLD
134
- ? `Verdict rests on soft inputs (signal_completeness ${signal}). Decision confidence has been reduced accordingly; treat this as directional and re-run with measured pillar scores before committing budget.`
135
- : undefined;
205
+ const caveatParts = [];
206
+ if (anyEstimated) {
207
+ const estimated = Object.keys(basis).filter(k => basis[k] === 'estimated');
208
+ caveatParts.push(`Estimated pillars: ${estimated.join(', ')} (deterministic priors from readiness, tier, function and benchmarks, see pillar_basis). Confirm them with evidence before committing budget.`);
209
+ }
210
+ if (signal < SIGNAL_CAVEAT_THRESHOLD) {
211
+ caveatParts.push(`Verdict rests on soft inputs (signal_completeness ${signal}). Decision confidence has been reduced accordingly; treat this as directional.`);
212
+ }
213
+ const caveat = caveatParts.length ? caveatParts.join(' ') : undefined;
136
214
  return {
137
215
  classification: cls.label,
138
216
  reason: cls.reason,
@@ -145,6 +223,8 @@ export function score(input) {
145
223
  drivers: base.drivers,
146
224
  source: base.source,
147
225
  applied_modules: appliedModules(industry, fn, readiness),
226
+ scores_used: resolved,
227
+ pillar_basis: basis,
148
228
  ...(caveat ? { caveat } : {}),
149
229
  };
150
230
  }
@@ -176,11 +256,19 @@ const GOV_LOWER_TARGET = 35;
176
256
  * high to recover.
177
257
  */
178
258
  export function recommendImprovements(input) {
179
- const { scores } = input;
180
- const { strategic_alignment: sa, financial_return: fr, change_enablement: ce, governance_risk: gr } = scores;
181
- const current = classify(sa, fr, ce, gr).label;
259
+ const { scores: resolved, basis, givenCount } = resolvePillars(input);
260
+ const { strategic_alignment: sa, financial_return: fr, change_enablement: ce, governance_risk: gr } = resolved;
261
+ let current = classify(sa, fr, ce, gr).label;
262
+ // Same Stop-first invariant as score(): fully-estimated pillars never
263
+ // produce an Accelerate, they produce a Fix pending confirmation.
264
+ if (givenCount === 0 && current === 'Accelerate')
265
+ current = 'Fix';
182
266
  const recs = [];
183
267
  const notes = [];
268
+ if (givenCount < 4) {
269
+ const estimated = Object.keys(basis).filter(k => basis[k] === 'estimated');
270
+ notes.push(`Estimated pillars: ${estimated.join(', ')} (deterministic priors from readiness, tier, function and benchmarks). The plan below is provisional on those pillars; confirm them with evidence and re-run.`);
271
+ }
184
272
  if (current === 'Accelerate') {
185
273
  return {
186
274
  current_classification: current,
@@ -216,6 +304,7 @@ export function recommendImprovements(input) {
216
304
  recommendations: recs,
217
305
  projected_confidence: projectedConfidence,
218
306
  notes,
307
+ change_plan: buildChangePlan(input, resolved, recs, feasible),
219
308
  };
220
309
  }
221
310
  /**
package/dist/score.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"score.js","sourceRoot":"","sources":["../src/score.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"score.js","sourceRoot":"","sources":["../src/score.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC1E,gEAAgE;AAChE,2EAA2E;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AASlD;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAA6B;IAClD,OAAO,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,6CAA6C,EAAC,uBAAuB,EAAC,uCAAuC,CAAC,EAAE,MAAM,EAAE,kDAAkD,EAAE;IAChQ,EAAE,EAAO,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,gDAAgD,EAAC,kCAAkC,EAAC,gCAAgC,CAAC,EAAE,MAAM,EAAE,8BAA8B,EAAE;IACnP,KAAK,EAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,gCAAgC,EAAC,6CAA6C,EAAC,kBAAkB,CAAC,EAAE,MAAM,EAAE,+DAA+D,EAAE;IACjQ,MAAM,EAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,qDAAqD,EAAC,4CAA4C,EAAC,iCAAiC,CAAC,EAAE,MAAM,EAAE,wCAAwC,EAAE;IAC7Q,EAAE,EAAO,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,2CAA2C,EAAC,uBAAuB,EAAC,uCAAuC,CAAC,EAAE,MAAM,EAAE,6BAA6B,EAAE;IACzO,IAAI,EAAK,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,sCAAsC,EAAC,sCAAsC,EAAC,kCAAkC,CAAC,EAAE,MAAM,EAAE,qCAAqC,EAAE;IACtP,EAAE,EAAO,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,wBAAwB,EAAC,2BAA2B,EAAC,4BAA4B,CAAC,EAAE,MAAM,EAAE,uCAAuC,EAAE;IACzN,EAAE,EAAO,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,+CAA+C,EAAC,iCAAiC,EAAC,aAAa,CAAC,EAAE,MAAM,EAAE,yCAAyC,EAAE;CAC1O,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAA2C;IAC9D,SAAS,EAAM,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE;IACvG,QAAQ,EAAO,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE;IACvG,SAAS,EAAM,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE;IACvG,MAAM,EAAS,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE;IACvG,SAAS,EAAM,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE;IACvG,UAAU,EAAK,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE;IACvG,SAAS,EAAM,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE;IACvG,aAAa,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE;IACvG,SAAS,EAAM,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE;IACvG,YAAY,EAAG,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE;IACvG,aAAa,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE;IACvG,WAAW,EAAI,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE;IACvG,MAAM,EAAS,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE;IACvG,UAAU,EAAK,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE;CACxG,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAW,CAAC;AAExE,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,KAAK,EAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,uBAAuB,EAAE;IACtE,WAAW,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,uBAAuB,EAAE;IACtE,MAAM,EAAO,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,uBAAuB,EAAE;CAC9D,CAAC;AAEX;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,cAAc,GAAkE;IAC3F,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,EAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE;IACvH,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,EAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE;IACvH,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,EAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE;CACxH,CAAC;AAEF,MAAM,iBAAiB,GAAgC;IACrD,KAAK,EAAQ,CAAC,qEAAqE,EAAE,wCAAwC,EAAE,yDAAyD,CAAC;IACzL,WAAW,EAAE,CAAC,0CAA0C,EAAE,gEAAgE,EAAE,4DAA4D,CAAC;IACzL,MAAM,EAAO,CAAC,kDAAkD,EAAE,2CAA2C,EAAE,qDAAqD,EAAE,6CAA6C,CAAC;CACrN,CAAC;AAEF,MAAM,gBAAgB,GAAG,gIAAgI,CAAC;AAE1J,SAAS,QAAQ,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU;IAC9D,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;QACzB,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,2CAA2C,CAAC,CAAC,CAAC,6CAA6C,EAAE,CAAC;IAC3I,CAAC;IACD,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;QACjD,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,wDAAwD,EAAE,CAAC;IACnG,CAAC;IACD,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,EAAE,GAAG,EAAE;QAAE,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IACtD,IAAI,EAAE,GAAG,EAAE;QAAE,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACnD,IAAI,EAAE,GAAG,EAAE;QAAE,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IACtD,IAAI,EAAE,GAAG,EAAE;QAAE,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IACtD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,iCAAiC,EAAE,CAAC;AACrG,CAAC;AAED;;;;GAIG;AACH,SAAS,cAAc,CAAC,QAAkB,EAAE,EAAc,EAAE,SAAoB;IAC9E,MAAM,IAAI,GAAa,CAAC,kBAAkB,EAAE,qBAAqB,SAAS,EAAE,CAAC,CAAC;IAC9E,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,gCAAgC,EAAE,gCAAgC,CAAC,CAAC;QAC9E,IAAI,EAAE,KAAK,MAAM;YAAE,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC3C,IAAI,EAAE,KAAK,MAAM;YAAE,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,QAAQ,KAAK,eAAe;QAAE,IAAI,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAChF,IAAI,QAAQ,KAAK,QAAQ;QAAE,IAAI,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IAC9E,OAAO,IAAI,CAAC;AACd,CAAC;AAED,6EAA6E;AAC7E,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAEpC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,eAAe,CAC7B,KAA0E;IAE1E,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,MAAM,gBAAgB,GAAG,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAExE,MAAM,eAAe,GAA2B,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAC3F,MAAM,iBAAiB,GAAG,eAAe,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IAEjE,MAAM,UAAU,GAA2B,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IAC5E,IAAI,eAAe,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACtD,IAAI,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;QAAE,eAAe,IAAI,EAAE,CAAC;IACnE,IAAI,KAAK,CAAC,QAAQ,IAAI,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;QAAE,eAAe,IAAI,CAAC,CAAC;IACrF,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IAEjD,OAAO,EAAE,mBAAmB,EAAE,EAAE,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAE,CAAC;AAC3F,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,cAAc,CAAC,KAAiB;IAK9C,MAAM,GAAG,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;IACjC,MAAM,OAAO,GAAG,CAAC,qBAAqB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,iBAAiB,CAAU,CAAC;IAC7G,MAAM,MAAM,GAAG,EAAkB,CAAC;IAClC,MAAM,KAAK,GAAG,EAAiB,CAAC;IAChC,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;YAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAAC,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;YAAC,UAAU,EAAE,CAAC;QAAC,CAAC;aAC1E,CAAC;YAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAAC,KAAK,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;QAAC,CAAC;IACtD,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,KAAK,CAAC,KAAiB;IACrC,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAC1E,MAAM,IAAI,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;IAC5B,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;IACtD,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IACjE,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC/B,IAAI,IAAI,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;IACvE,MAAM,GAAG,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACzC,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;IAE7D,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACtE,MAAM,EAAE,mBAAmB,EAAE,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,GAAG,QAAQ,CAAC;IAC/G,MAAM,YAAY,GAAG,UAAU,KAAK,CAAC,CAAC;IACtC,MAAM,YAAY,GAAG,UAAU,GAAG,CAAC,CAAC;IAEpC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;IACrF,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;IACrF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;IAE7C,IAAI,GAAG,GAAG,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACnC,0EAA0E;IAC1E,yEAAyE;IACzE,uEAAuE;IACvE,sBAAsB;IACtB,IAAI,YAAY,IAAI,GAAG,CAAC,KAAK,KAAK,YAAY,EAAE,CAAC;QAC/C,GAAG,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,4HAA4H,EAAE,CAAC;IAC/J,CAAC;IAED,qDAAqD;IACrD,MAAM,cAAc,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IACvD,yDAAyD;IACzD,sEAAsE;IACtE,0EAA0E;IAC1E,MAAM,aAAa,GAAG,GAAG,GAAG,KAAK,GAAG,UAAU,CAAC;IAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,mBAAmB,IAAI,aAAa,CAAC,CAAC,CAAC;IACpF,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC;IAErE,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,SAAS,GAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAA8B,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC;QACzG,WAAW,CAAC,IAAI,CAAC,sBAAsB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,+IAA+I,CAAC,CAAC;IAC9M,CAAC;IACD,IAAI,MAAM,GAAG,uBAAuB,EAAE,CAAC;QACrC,WAAW,CAAC,IAAI,CAAC,qDAAqD,MAAM,iFAAiF,CAAC,CAAC;IACjK,CAAC;IACD,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEtE,OAAO;QACL,cAAc,EAAE,GAAG,CAAC,KAAK;QACzB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,aAAa,EAAE,OAAO;QACtB,cAAc,EAAE,OAAO;QACvB,WAAW,EAAE,KAAK;QAClB,YAAY,EAAE,KAAK;QACnB,UAAU;QACV,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,CAAC,GAAG,EAAE,YAAY,EAAE,GAAG,CAAC,IAAI,EAAE;QACzF,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,eAAe,EAAE,cAAc,CAAC,QAAQ,EAAE,EAAE,EAAE,SAAS,CAAC;QACxD,WAAW,EAAE,QAAQ;QACrB,YAAY,EAAE,KAAK;QACnB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9B,CAAC;AACJ,CAAC;AAED,MAAM,cAAc,GAA4E;IAC9F,mBAAmB,EAAE;QACnB,MAAM,EAAE,wHAAwH;QAChI,SAAS,EAAE,gJAAgJ;KAC5J;IACD,gBAAgB,EAAE;QAChB,MAAM,EAAE,2JAA2J;QACnK,SAAS,EAAE,6LAA6L;KACzM;IACD,iBAAiB,EAAE;QACjB,MAAM,EAAE,0IAA0I;QAClJ,SAAS,EAAE,+KAA+K;KAC3L;IACD,eAAe,EAAE;QACf,MAAM,EAAE,0IAA0I;QAClJ,SAAS,EAAE,0KAA0K;KACtL;CACF,CAAC;AAEF,MAAM,YAAY,GAAG,EAAE,CAAC;AACxB,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAE5B;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAqB;IACzD,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACtE,MAAM,EAAE,mBAAmB,EAAE,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,GAAG,QAAQ,CAAC;IAE/G,IAAI,OAAO,GAAG,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC;IAC7C,sEAAsE;IACtE,kEAAkE;IAClE,IAAI,UAAU,KAAK,CAAC,IAAI,OAAO,KAAK,YAAY;QAAE,OAAO,GAAG,KAAK,CAAC;IAClE,MAAM,IAAI,GAAqB,EAAE,CAAC;IAClC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACnB,MAAM,SAAS,GAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAA8B,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC;QACzG,KAAK,CAAC,IAAI,CAAC,sBAAsB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,+JAA+J,CAAC,CAAC;IACxN,CAAC;IAED,IAAI,OAAO,KAAK,YAAY,EAAE,CAAC;QAC7B,OAAO;YACL,sBAAsB,EAAE,OAAO;YAC/B,qBAAqB,EAAE,OAAO;YAC9B,QAAQ,EAAE,IAAI;YACd,eAAe,EAAE,EAAE;YACnB,oBAAoB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;YACjE,KAAK,EAAE,CAAC,gEAAgE,CAAC;SAC1E,CAAC;IACJ,CAAC;IAED,IAAI,EAAE,GAAG,EAAE;QAAE,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,EAAE,EAAE,GAAG,cAAc,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC9J,IAAI,EAAE,GAAG,EAAE;QAAE,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAK,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,EAAE,EAAE,GAAG,cAAc,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC3J,IAAI,EAAE,GAAG,EAAE;QAAE,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,mBAAmB,EAAI,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,EAAE,EAAE,GAAG,cAAc,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAC5J,IAAI,EAAE,GAAG,EAAE;QAAE,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAM,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,GAAG,EAAE,EAAE,GAAG,cAAc,CAAC,eAAe,EAAE,CAAC,CAAC;IAElK,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,gBAAgB,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,YAAY,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IAC9G,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,KAAK,CAAC,IAAI,CAAC,uIAAuI,CAAC,CAAC;IACtJ,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAClE,MAAM,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,CAAC,GAAG,GAAG,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5G,MAAM,cAAc,GAAG,QAAQ,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,KAAK,CAAC;IAE1F,OAAO;QACL,sBAAsB,EAAE,OAAO;QAC/B,qBAAqB,EAAE,cAAc;QACrC,QAAQ;QACR,eAAe,EAAE,IAAI;QACrB,oBAAoB,EAAE,mBAAmB;QACzC,KAAK;QACL,WAAW,EAAE,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC;KAC9D,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAqB;IAC1D,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAClD,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7B,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;IAE9D,MAAM,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9D,MAAM,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IAE/D,IAAI,QAAQ,GAAgC,SAAS,CAAC;IACtD,IAAI,OAAO,KAAK,MAAM,IAAI,SAAS,KAAK,OAAO;QAAE,QAAQ,GAAG,QAAQ,CAAC;SAChE,IAAI,OAAO,KAAK,MAAM,IAAI,SAAS,KAAK,QAAQ;QAAE,QAAQ,GAAG,QAAQ,CAAC;SACtE,IAAI,SAAS,KAAK,OAAO;QAAE,QAAQ,GAAG,UAAU,CAAC;IAEtD,OAAO;QACL,mBAAmB;QACnB,oBAAoB;QACpB,aAAa,EAAE,IAAI,CAAC,EAAE;QACtB,cAAc,EAAE,IAAI,CAAC,EAAE;QACvB,QAAQ;QACR,OAAO,EAAE,iBAAiB,CAAC,SAAS,CAAC;QACrC,MAAM,EAAE,gBAAgB;KACzB,CAAC;AACJ,CAAC"}
@@ -5,4 +5,11 @@ export declare const READINESS: readonly ["agile", "traditional", "siloed"];
5
5
  export declare const INDUSTRY_LABEL: Record<string, string>;
6
6
  export declare const FUNCTION_LABEL: Record<string, string>;
7
7
  export declare const TIER_LABEL: Record<string, string>;
8
+ /**
9
+ * Contexts where governance exposure defaults to regulatory. Shared by the
10
+ * pillar estimator and the change-leader play selector so both infer the
11
+ * same way from the same facts.
12
+ */
13
+ export declare const REGULATED_FUNCTIONS: ReadonlySet<string>;
14
+ export declare const REGULATED_INDUSTRIES: ReadonlySet<string>;
8
15
  //# sourceMappingURL=taxonomy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"taxonomy.d.ts","sourceRoot":"","sources":["../src/taxonomy.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,yMAGb,CAAC;AAEX,eAAO,MAAM,SAAS,yEAAmE,CAAC;AAC1F,eAAO,MAAM,QAAQ,mCAAkC,CAAC;AACxD,eAAO,MAAM,SAAS,6CAA4C,CAAC;AAEnE,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAOjD,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAGjD,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAI7C,CAAC"}
1
+ {"version":3,"file":"taxonomy.d.ts","sourceRoot":"","sources":["../src/taxonomy.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,yMAGb,CAAC;AAEX,eAAO,MAAM,SAAS,yEAAmE,CAAC;AAC1F,eAAO,MAAM,QAAQ,mCAAkC,CAAC;AACxD,eAAO,MAAM,SAAS,6CAA4C,CAAC;AAEnE,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAOjD,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAGjD,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAI7C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,MAAM,CAAsC,CAAC;AAC3F,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAAmE,CAAC"}
package/dist/taxonomy.js CHANGED
@@ -22,4 +22,11 @@ export const TIER_LABEL = {
22
22
  gen2: 'Gen 2 — GenAI',
23
23
  gen3: 'Gen 3 — Agentic',
24
24
  };
25
+ /**
26
+ * Contexts where governance exposure defaults to regulatory. Shared by the
27
+ * pillar estimator and the change-leader play selector so both infer the
28
+ * same way from the same facts.
29
+ */
30
+ export const REGULATED_FUNCTIONS = new Set(['risk', 'finance', 'hr']);
31
+ export const REGULATED_INDUSTRIES = new Set(['financial', 'healthcare', 'public_sector', 'energy']);
25
32
  //# sourceMappingURL=taxonomy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"taxonomy.js","sourceRoot":"","sources":["../src/taxonomy.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,WAAW,EAAC,UAAU,EAAC,WAAW,EAAC,QAAQ,EAAC,WAAW,EAAC,YAAY,EAAC,WAAW;IAChF,eAAe,EAAC,WAAW,EAAC,cAAc,EAAC,eAAe,EAAC,aAAa,EAAC,QAAQ,EAAC,YAAY;CACtF,CAAC;AAEX,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,SAAS,EAAC,IAAI,EAAC,OAAO,EAAC,QAAQ,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,IAAI,CAAU,CAAC;AAC1F,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAC,MAAM,EAAC,MAAM,CAAU,CAAC;AACxD,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,OAAO,EAAC,aAAa,EAAC,QAAQ,CAAU,CAAC;AAEnE,MAAM,CAAC,MAAM,cAAc,GAA2B;IACpD,SAAS,EAAE,mBAAmB,EAAE,QAAQ,EAAE,kBAAkB,EAAE,SAAS,EAAE,sBAAsB;IAC/F,MAAM,EAAE,oBAAoB,EAAE,SAAS,EAAE,oBAAoB,EAAE,UAAU,EAAE,sBAAsB;IACjG,SAAS,EAAE,4BAA4B,EAAE,aAAa,EAAE,8BAA8B;IACtF,SAAS,EAAE,kBAAkB,EAAE,YAAY,EAAE,uBAAuB;IACpE,aAAa,EAAE,4BAA4B,EAAE,WAAW,EAAE,4BAA4B;IACtF,MAAM,EAAE,mBAAmB,EAAE,UAAU,EAAE,YAAY;CACtD,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAA2B;IACpD,OAAO,EAAE,eAAe,EAAE,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,cAAc;IAChG,EAAE,EAAE,qBAAqB,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,kBAAkB;CAClG,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAA2B;IAChD,IAAI,EAAE,0BAA0B;IAChC,IAAI,EAAE,eAAe;IACrB,IAAI,EAAE,iBAAiB;CACxB,CAAC"}
1
+ {"version":3,"file":"taxonomy.js","sourceRoot":"","sources":["../src/taxonomy.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,WAAW,EAAC,UAAU,EAAC,WAAW,EAAC,QAAQ,EAAC,WAAW,EAAC,YAAY,EAAC,WAAW;IAChF,eAAe,EAAC,WAAW,EAAC,cAAc,EAAC,eAAe,EAAC,aAAa,EAAC,QAAQ,EAAC,YAAY;CACtF,CAAC;AAEX,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,SAAS,EAAC,IAAI,EAAC,OAAO,EAAC,QAAQ,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,IAAI,CAAU,CAAC;AAC1F,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAC,MAAM,EAAC,MAAM,CAAU,CAAC;AACxD,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,OAAO,EAAC,aAAa,EAAC,QAAQ,CAAU,CAAC;AAEnE,MAAM,CAAC,MAAM,cAAc,GAA2B;IACpD,SAAS,EAAE,mBAAmB,EAAE,QAAQ,EAAE,kBAAkB,EAAE,SAAS,EAAE,sBAAsB;IAC/F,MAAM,EAAE,oBAAoB,EAAE,SAAS,EAAE,oBAAoB,EAAE,UAAU,EAAE,sBAAsB;IACjG,SAAS,EAAE,4BAA4B,EAAE,aAAa,EAAE,8BAA8B;IACtF,SAAS,EAAE,kBAAkB,EAAE,YAAY,EAAE,uBAAuB;IACpE,aAAa,EAAE,4BAA4B,EAAE,WAAW,EAAE,4BAA4B;IACtF,MAAM,EAAE,mBAAmB,EAAE,UAAU,EAAE,YAAY;CACtD,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAA2B;IACpD,OAAO,EAAE,eAAe,EAAE,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,cAAc;IAChG,EAAE,EAAE,qBAAqB,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,kBAAkB;CAClG,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAA2B;IAChD,IAAI,EAAE,0BAA0B;IAChC,IAAI,EAAE,eAAe;IACrB,IAAI,EAAE,iBAAiB;CACxB,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAwB,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;AAC3F,MAAM,CAAC,MAAM,oBAAoB,GAAwB,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC"}
package/dist/types.d.ts CHANGED
@@ -39,25 +39,35 @@ export interface Portfolio {
39
39
  };
40
40
  initiatives: Initiative[];
41
41
  }
42
+ /** The four pillars, fully resolved (every pillar carries a number). */
43
+ export interface PillarScores {
44
+ strategic_alignment: number;
45
+ financial_return: number;
46
+ change_enablement: number;
47
+ governance_risk: number;
48
+ }
49
+ /** Where each resolved pillar value came from. */
50
+ export type PillarBasis = Record<keyof PillarScores, 'given' | 'estimated'>;
42
51
  export interface ScoreInput {
43
52
  industry: Industry;
44
53
  revenue_eur: number;
45
54
  function: FunctionId;
46
55
  ai_tier: AiTier;
47
56
  readiness: Readiness;
48
- scores: {
49
- strategic_alignment: number;
50
- financial_return: number;
51
- change_enablement: number;
52
- governance_risk: number;
53
- };
57
+ /**
58
+ * Optional, and each pillar inside it is optional. Give the pillars you
59
+ * have evidence for; any missing pillar is estimated deterministically
60
+ * from readiness, tier, function and the published benchmarks, the result
61
+ * reports which were estimated via pillar_basis, and a fully-estimated
62
+ * pass can never return Accelerate.
63
+ */
64
+ scores?: Partial<PillarScores>;
54
65
  /**
55
66
  * Optional 0–1. How grounded the four pillar scores are in real evidence
56
- * versus estimated from context. Defaults to 1 (treated as measured), which
57
- * leaves confidence unchanged. Lower values honestly haircut decision
58
- * confidence and attach a caveat the answer to "the scoring is only as
59
- * good as the metadata you feed it". Mirrors diagnose_process's
60
- * signal_completeness.
67
+ * versus estimated from context. When omitted it defaults from the count
68
+ * of pillars actually given (all four = 1, none = 0.5), which haircuts
69
+ * decision confidence and attaches a caveat on soft inputs. Mirrors
70
+ * diagnose_process's signal_completeness.
61
71
  */
62
72
  signal_completeness?: number;
63
73
  }
@@ -78,10 +88,22 @@ export interface ScoreResult {
78
88
  drivers: string[];
79
89
  source: string;
80
90
  applied_modules: string[];
81
- /** Present only when signal_completeness is low: warns the verdict rests on soft inputs. */
91
+ /** The four pillar values the verdict was computed on, given or estimated. */
92
+ scores_used: PillarScores;
93
+ /** Which pillars were given by the caller and which were estimated by the engine. */
94
+ pillar_basis: PillarBasis;
95
+ /** Present when signal_completeness is low or any pillar was estimated: warns the verdict rests on soft inputs. */
82
96
  caveat?: string;
83
97
  }
98
+ /** What kind of resistance sits behind a low change-enablement score. */
99
+ export type ResistanceType = 'will' | 'skill';
100
+ /** What kind of exposure sits behind a high governance-risk score. */
101
+ export type RiskType = 'regulatory' | 'reputational' | 'operational';
84
102
  export interface RecommendInput extends ScoreInput {
103
+ /** Optional. Whether people do not WANT the change (will) or cannot yet DO it (skill). Sharpens the change plan; inferred from readiness when absent. */
104
+ resistance_type?: ResistanceType;
105
+ /** Optional. The nature of the governance exposure. Sharpens the change plan; inferred from tier, function and industry when absent. */
106
+ risk_type?: RiskType;
85
107
  }
86
108
  export interface Recommendation {
87
109
  pillar: 'strategic_alignment' | 'financial_return' | 'change_enablement' | 'governance_risk';
@@ -91,6 +113,47 @@ export interface Recommendation {
91
113
  action: string;
92
114
  rationale: string;
93
115
  }
116
+ /** One move at one altitude: the organisation (Kotter) or the person (ADKAR). */
117
+ export interface ChangeMove {
118
+ method: string;
119
+ action: string;
120
+ }
121
+ /** A named, context-selected change play. The unit of advice in the change plan. */
122
+ export interface ChangePlay {
123
+ id: string;
124
+ pillar: Recommendation['pillar'] | 'pace_gap';
125
+ diagnosis: string;
126
+ org_move: ChangeMove;
127
+ person_move: ChangeMove;
128
+ steps: string[];
129
+ diagnostic_questions: string[];
130
+ owner: string;
131
+ timeline_weeks: [number, number];
132
+ /** Present when the honest escalation from this play is Stop, and under what condition. */
133
+ stop_condition?: string;
134
+ /** True when the play was inferred from context rather than told via resistance_type / risk_type. */
135
+ provisional: boolean;
136
+ source: string;
137
+ }
138
+ export interface RescoreGate {
139
+ clears_when: string;
140
+ deadline_weeks: number;
141
+ }
142
+ /** The change-leader layer: a specific, sequenced route from Fix or Stop toward Go. */
143
+ export interface ChangePlan {
144
+ binding_constraint: string;
145
+ position: 'near_go' | 'contested' | 'near_stop';
146
+ position_detail: string;
147
+ plays: ChangePlay[];
148
+ cost_of_waiting_eur: {
149
+ low: number;
150
+ high: number;
151
+ };
152
+ cost_of_waiting: string;
153
+ rescore_gate: RescoreGate;
154
+ /** Present when the truthful call is Stop rather than Fix. */
155
+ honest_stop?: string;
156
+ }
94
157
  export interface RecommendResult {
95
158
  current_classification: Classification;
96
159
  target_classification: Classification;
@@ -98,6 +161,8 @@ export interface RecommendResult {
98
161
  recommendations: Recommendation[];
99
162
  projected_confidence: number;
100
163
  notes: string[];
164
+ /** Absent when the initiative is already Accelerate. */
165
+ change_plan?: ChangePlan;
101
166
  }
102
167
  export interface PaceLayerInput {
103
168
  revenue_eur: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aibvf/core",
3
- "version": "0.3.4",
3
+ "version": "0.5.0",
4
4
  "description": "AI BVF — open protocol for scoring AI investments. Validator and scoring engine.",
5
5
  "keywords": [
6
6
  "ai",