@llm-dev-ops/agentics-cli 2.1.5 → 2.3.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.
Files changed (76) hide show
  1. package/dist/pipeline/auto-chain.d.ts +73 -0
  2. package/dist/pipeline/auto-chain.d.ts.map +1 -1
  3. package/dist/pipeline/auto-chain.js +525 -38
  4. package/dist/pipeline/auto-chain.js.map +1 -1
  5. package/dist/pipeline/phase2/phases/prompt-generator.d.ts.map +1 -1
  6. package/dist/pipeline/phase2/phases/prompt-generator.js +53 -6
  7. package/dist/pipeline/phase2/phases/prompt-generator.js.map +1 -1
  8. package/dist/pipeline/phase2/schemas.d.ts +10 -10
  9. package/dist/pipeline/phase4/phases/http-server-generator.d.ts +12 -0
  10. package/dist/pipeline/phase4/phases/http-server-generator.d.ts.map +1 -1
  11. package/dist/pipeline/phase4/phases/http-server-generator.js +92 -25
  12. package/dist/pipeline/phase4/phases/http-server-generator.js.map +1 -1
  13. package/dist/pipeline/phase5-build/phase5-build-coordinator.d.ts.map +1 -1
  14. package/dist/pipeline/phase5-build/phase5-build-coordinator.js +44 -0
  15. package/dist/pipeline/phase5-build/phase5-build-coordinator.js.map +1 -1
  16. package/dist/pipeline/phase5-build/phases/post-generation-validator.d.ts +75 -0
  17. package/dist/pipeline/phase5-build/phases/post-generation-validator.d.ts.map +1 -0
  18. package/dist/pipeline/phase5-build/phases/post-generation-validator.js +728 -0
  19. package/dist/pipeline/phase5-build/phases/post-generation-validator.js.map +1 -0
  20. package/dist/pipeline/phase5-build/types.d.ts +1 -1
  21. package/dist/pipeline/phase5-build/types.d.ts.map +1 -1
  22. package/dist/pipeline/types.d.ts +84 -0
  23. package/dist/pipeline/types.d.ts.map +1 -1
  24. package/dist/pipeline/types.js +43 -1
  25. package/dist/pipeline/types.js.map +1 -1
  26. package/dist/synthesis/consensus-svg.d.ts +19 -0
  27. package/dist/synthesis/consensus-svg.d.ts.map +1 -0
  28. package/dist/synthesis/consensus-svg.js +95 -0
  29. package/dist/synthesis/consensus-svg.js.map +1 -0
  30. package/dist/synthesis/consensus-tiers.d.ts +99 -0
  31. package/dist/synthesis/consensus-tiers.d.ts.map +1 -0
  32. package/dist/synthesis/consensus-tiers.js +285 -0
  33. package/dist/synthesis/consensus-tiers.js.map +1 -0
  34. package/dist/synthesis/domain-labor-classifier.d.ts +101 -0
  35. package/dist/synthesis/domain-labor-classifier.d.ts.map +1 -0
  36. package/dist/synthesis/domain-labor-classifier.js +312 -0
  37. package/dist/synthesis/domain-labor-classifier.js.map +1 -0
  38. package/dist/synthesis/domain-unit-registry.d.ts +59 -0
  39. package/dist/synthesis/domain-unit-registry.d.ts.map +1 -0
  40. package/dist/synthesis/domain-unit-registry.js +294 -0
  41. package/dist/synthesis/domain-unit-registry.js.map +1 -0
  42. package/dist/synthesis/financial-claim-extractor.d.ts +52 -0
  43. package/dist/synthesis/financial-claim-extractor.d.ts.map +1 -0
  44. package/dist/synthesis/financial-claim-extractor.js +351 -0
  45. package/dist/synthesis/financial-claim-extractor.js.map +1 -0
  46. package/dist/synthesis/financial-consistency-rules.d.ts +66 -0
  47. package/dist/synthesis/financial-consistency-rules.d.ts.map +1 -0
  48. package/dist/synthesis/financial-consistency-rules.js +432 -0
  49. package/dist/synthesis/financial-consistency-rules.js.map +1 -0
  50. package/dist/synthesis/financial-consistency-runner.d.ts +73 -0
  51. package/dist/synthesis/financial-consistency-runner.d.ts.map +1 -0
  52. package/dist/synthesis/financial-consistency-runner.js +131 -0
  53. package/dist/synthesis/financial-consistency-runner.js.map +1 -0
  54. package/dist/synthesis/forbidden-spin-phrases.d.ts +32 -0
  55. package/dist/synthesis/forbidden-spin-phrases.d.ts.map +1 -0
  56. package/dist/synthesis/forbidden-spin-phrases.js +84 -0
  57. package/dist/synthesis/forbidden-spin-phrases.js.map +1 -0
  58. package/dist/synthesis/phase-gate-thresholds.d.ts +30 -0
  59. package/dist/synthesis/phase-gate-thresholds.d.ts.map +1 -0
  60. package/dist/synthesis/phase-gate-thresholds.js +34 -0
  61. package/dist/synthesis/phase-gate-thresholds.js.map +1 -0
  62. package/dist/synthesis/prompts/index.d.ts.map +1 -1
  63. package/dist/synthesis/prompts/index.js +22 -0
  64. package/dist/synthesis/prompts/index.js.map +1 -1
  65. package/dist/synthesis/simulation-artifact-generator.d.ts.map +1 -1
  66. package/dist/synthesis/simulation-artifact-generator.js +89 -1
  67. package/dist/synthesis/simulation-artifact-generator.js.map +1 -1
  68. package/dist/synthesis/simulation-renderers.d.ts +105 -2
  69. package/dist/synthesis/simulation-renderers.d.ts.map +1 -1
  70. package/dist/synthesis/simulation-renderers.js +1056 -92
  71. package/dist/synthesis/simulation-renderers.js.map +1 -1
  72. package/dist/synthesis/unit-economics-loader.d.ts +71 -0
  73. package/dist/synthesis/unit-economics-loader.d.ts.map +1 -0
  74. package/dist/synthesis/unit-economics-loader.js +200 -0
  75. package/dist/synthesis/unit-economics-loader.js.map +1 -0
  76. package/package.json +1 -1
@@ -0,0 +1,285 @@
1
+ /**
2
+ * ADR-PIPELINE-071: Consensus Tier Classifier
3
+ *
4
+ * Classifies an engagement's analytical consensus into one of three tiers:
5
+ *
6
+ * - aligned — agreement ≥70% AND precision ≥70% → footnote OK
7
+ * - directional — partial agreement (40–69 / 50–69) → opening-paragraph
8
+ * acknowledgement + ranges instead of point estimates
9
+ * - contested — agreement <40 AND precision <50 → headline-level
10
+ * treatment, drives document structure, "Why we are not
11
+ * more confident" section, Week-4 consensus gate, etc.
12
+ *
13
+ * Pure functions over a `ConsensusSnapshot`. The snapshot is populated from
14
+ * agent results by `populateConsensusSnapshot`.
15
+ */
16
+ // ============================================================================
17
+ // Classification
18
+ // ============================================================================
19
+ /**
20
+ * ADR-PIPELINE-071 §1: tier thresholds.
21
+ *
22
+ * The classifier intentionally biases toward `contested` for ambiguous cases —
23
+ * a low-consensus run rendered as if it were aligned is the failure mode the
24
+ * ADR is trying to eliminate.
25
+ */
26
+ export function classifyConsensus(agreementLevelPct, precisionConfidencePct) {
27
+ if (agreementLevelPct >= 70 && precisionConfidencePct >= 70)
28
+ return 'aligned';
29
+ if (agreementLevelPct < 40 && precisionConfidencePct < 50)
30
+ return 'contested';
31
+ if (agreementLevelPct >= 40 || precisionConfidencePct >= 50)
32
+ return 'directional';
33
+ return 'contested';
34
+ }
35
+ // ============================================================================
36
+ // Snapshot population
37
+ // ============================================================================
38
+ const DEFAULT_PER_DIMENSION = {
39
+ financial: 0.5,
40
+ operational: 0.5,
41
+ compliance: 0.5,
42
+ workforce: 0.5,
43
+ technical: 0.5,
44
+ };
45
+ /**
46
+ * Build a ConsensusSnapshot from explicit inputs. All fields default to a
47
+ * conservative middle-ground when omitted, except `tier` which is always
48
+ * recomputed from the two confidence numbers.
49
+ */
50
+ export function buildConsensusSnapshot(inputs = {}) {
51
+ const agreementLevelPct = clampPct(inputs.agreementLevelPct ?? 50);
52
+ const precisionConfidencePct = clampPct(inputs.precisionConfidencePct ?? 50);
53
+ const directionalConfidencePct = clampPct(inputs.directionalConfidencePct ?? Math.max(agreementLevelPct, precisionConfidencePct + 20));
54
+ const tier = classifyConsensus(agreementLevelPct, precisionConfidencePct);
55
+ return {
56
+ agreementLevelPct,
57
+ precisionConfidencePct,
58
+ directionalConfidencePct,
59
+ tier,
60
+ dissentingAgents: inputs.dissentingAgents ?? [],
61
+ loadBearingAssumptions: inputs.loadBearingAssumptions ?? [],
62
+ perDimension: { ...DEFAULT_PER_DIMENSION, ...(inputs.perDimension ?? {}) },
63
+ };
64
+ }
65
+ /**
66
+ * ADR-PIPELINE-071 §3: populate the snapshot from raw agent results.
67
+ *
68
+ * Reads:
69
+ * - `analytics-hub/consensus` → agreement, precision, dissenting agents
70
+ * - `simulator/enterprise` → success_probability fallback for direction
71
+ * - all `*` agent error responses → dissent dimension
72
+ *
73
+ * Returns a snapshot that's safe for renderers to consume — never throws.
74
+ */
75
+ export function populateConsensusSnapshot(simulationResult, platformResults) {
76
+ const consensusAgent = platformResults.find(r => r.domain === 'analytics-hub' && r.agent === 'consensus');
77
+ const data = consensusAgent ? extractConsensusData(consensusAgent) : null;
78
+ const agreementLevelPct = clampPct(data?.agreementLevelPct ?? Math.round((extractSimSuccess(simulationResult) ?? 0.5) * 100));
79
+ const precisionConfidencePct = clampPct(data?.precisionConfidencePct ?? data?.confidencePct ?? 50);
80
+ const directionalConfidencePct = clampPct(data?.directionalConfidencePct ??
81
+ Math.min(99, Math.max(agreementLevelPct, precisionConfidencePct + 20)));
82
+ const dissentingAgents = [];
83
+ for (const r of platformResults) {
84
+ if (r.status >= 200 && r.status < 300)
85
+ continue;
86
+ dissentingAgents.push({
87
+ domain: r.domain,
88
+ agent: r.agent,
89
+ dimension: dimensionFromDomain(r.domain),
90
+ summary: `Agent returned status ${r.status}.`,
91
+ });
92
+ }
93
+ if (data?.dissentingAgents) {
94
+ dissentingAgents.push(...data.dissentingAgents);
95
+ }
96
+ const loadBearingAssumptions = data?.loadBearingAssumptions ?? [
97
+ 'Pilot data reflects production conditions',
98
+ 'Adoption rate matches analogous deployments',
99
+ 'No regulatory scope changes during the pilot window',
100
+ ];
101
+ const perDimension = data?.perDimension ?? {
102
+ financial: precisionConfidencePct / 100,
103
+ operational: precisionConfidencePct / 100,
104
+ compliance: agreementLevelPct / 100,
105
+ workforce: Math.max(0.3, (agreementLevelPct - 10) / 100),
106
+ technical: Math.min(0.95, (precisionConfidencePct + 20) / 100),
107
+ };
108
+ return buildConsensusSnapshot({
109
+ agreementLevelPct,
110
+ precisionConfidencePct,
111
+ directionalConfidencePct,
112
+ dissentingAgents,
113
+ loadBearingAssumptions,
114
+ perDimension,
115
+ });
116
+ }
117
+ // ============================================================================
118
+ // Helpers
119
+ // ============================================================================
120
+ function clampPct(n) {
121
+ if (!Number.isFinite(n))
122
+ return 0;
123
+ if (n <= 0)
124
+ return 0;
125
+ if (n >= 100)
126
+ return 100;
127
+ return Math.round(n);
128
+ }
129
+ function extractConsensusData(agent) {
130
+ const response = agent.response;
131
+ if (!response || typeof response !== 'object')
132
+ return {};
133
+ const signal = response['signal'];
134
+ const payloadOuter = signal ? signal['payload'] : undefined;
135
+ const payload = payloadOuter ? payloadOuter['data'] : undefined;
136
+ const data = payload ?? response;
137
+ const out = {};
138
+ if (typeof data['agreement_level_pct'] === 'number') {
139
+ out.agreementLevelPct = data['agreement_level_pct'];
140
+ }
141
+ else if (typeof data['agreementLevelPct'] === 'number') {
142
+ out.agreementLevelPct = data['agreementLevelPct'];
143
+ }
144
+ if (typeof data['precision_confidence_pct'] === 'number') {
145
+ out.precisionConfidencePct = data['precision_confidence_pct'];
146
+ }
147
+ else if (typeof data['precisionConfidencePct'] === 'number') {
148
+ out.precisionConfidencePct = data['precisionConfidencePct'];
149
+ }
150
+ if (typeof data['confidence'] === 'number') {
151
+ out.confidencePct = data['confidence'] * 100;
152
+ }
153
+ else if (typeof data['overallConfidence'] === 'number') {
154
+ out.confidencePct = data['overallConfidence'] * 100;
155
+ }
156
+ if (typeof data['directional_confidence_pct'] === 'number') {
157
+ out.directionalConfidencePct = data['directional_confidence_pct'];
158
+ }
159
+ if (Array.isArray(data['dissenting_agents'])) {
160
+ out.dissentingAgents = data['dissenting_agents'].map(d => ({
161
+ domain: String(d['domain'] ?? 'unknown'),
162
+ agent: String(d['agent'] ?? 'unknown'),
163
+ dimension: (typeof d['dimension'] === 'string'
164
+ ? d['dimension']
165
+ : 'operational'),
166
+ summary: String(d['summary'] ?? d['reason'] ?? ''),
167
+ }));
168
+ }
169
+ if (Array.isArray(data['load_bearing_assumptions'])) {
170
+ out.loadBearingAssumptions = data['load_bearing_assumptions']
171
+ .filter(x => typeof x === 'string')
172
+ .slice(0, 3);
173
+ }
174
+ if (data['per_dimension'] && typeof data['per_dimension'] === 'object') {
175
+ out.perDimension = data['per_dimension'];
176
+ }
177
+ return out;
178
+ }
179
+ function dimensionFromDomain(domain) {
180
+ const d = domain.toLowerCase();
181
+ if (/cost|finan|roi|npv/.test(d))
182
+ return 'financial';
183
+ if (/governance|policy|compliance|shield|legal/.test(d))
184
+ return 'compliance';
185
+ if (/work\s*force|hr/.test(d))
186
+ return 'workforce';
187
+ if (/sec|engineer|tech|integration|architect/.test(d))
188
+ return 'technical';
189
+ return 'operational';
190
+ }
191
+ function extractSimSuccess(simulationResult) {
192
+ if (!simulationResult || typeof simulationResult !== 'object')
193
+ return null;
194
+ const sig = simulationResult['signal'];
195
+ const payload = sig?.['payload'];
196
+ const data = (payload?.['data'] ?? simulationResult);
197
+ const val = data['success_probability'] ?? data['confidence'];
198
+ if (typeof val === 'number')
199
+ return val;
200
+ return null;
201
+ }
202
+ // ============================================================================
203
+ // Tier-driven content blocks
204
+ // ============================================================================
205
+ /** Used by renderers as a top-of-document banner. */
206
+ export function consensusBanner(snapshot) {
207
+ if (snapshot.tier === 'aligned')
208
+ return null;
209
+ if (snapshot.tier === 'directional') {
210
+ return [
211
+ `> 📊 **Consensus: directional** — agreement ${snapshot.agreementLevelPct}%, precision ${snapshot.precisionConfidencePct}%.`,
212
+ '> Direction is supported, magnitude has meaningful variance. Treat headline figures as ranges.',
213
+ ].join('\n');
214
+ }
215
+ return [
216
+ `> 📊 **Consensus: contested** — agreement ${snapshot.agreementLevelPct}%, precision ${snapshot.precisionConfidencePct}%.`,
217
+ '> See "Why we are not more confident" before interpreting figures.',
218
+ ].join('\n');
219
+ }
220
+ /** Required opening paragraph for the executive summary on directional / contested tiers. */
221
+ export function consensusOpeningParagraph(snapshot) {
222
+ if (snapshot.tier === 'aligned')
223
+ return null;
224
+ if (snapshot.tier === 'directional') {
225
+ return (`**Agent consensus: directional (${snapshot.agreementLevelPct}%)** — direction is supported, ` +
226
+ 'magnitude has meaningful variance. Headline figures should be read as ranges, not point estimates.');
227
+ }
228
+ return (`**Agent consensus is contested (agreement ${snapshot.agreementLevelPct}%, precision ${snapshot.precisionConfidencePct}%).** ` +
229
+ 'This is why the recommendation is a bounded pilot, not full deployment — the pilot is designed ' +
230
+ 'to resolve the disagreement with measured data before any broader commitment.');
231
+ }
232
+ /** "Why we are not more confident" section body for the decision memo. */
233
+ export function whyNotMoreConfidentSection(snapshot) {
234
+ if (snapshot.tier === 'aligned')
235
+ return [];
236
+ const lines = ['## Why We Are Not More Confident', ''];
237
+ lines.push(`Agent consensus reached **agreement ${snapshot.agreementLevelPct}%** with **precision ${snapshot.precisionConfidencePct}%**. ` +
238
+ `Directional confidence is **${snapshot.directionalConfidencePct}%** — we are confident in the direction of the answer, ` +
239
+ 'but the magnitude carries meaningful uncertainty.', '');
240
+ if (snapshot.dissentingAgents.length > 0) {
241
+ lines.push('**Dissenting agents:**', '');
242
+ for (const d of snapshot.dissentingAgents.slice(0, 6)) {
243
+ lines.push(`- \`${d.domain}/${d.agent}\` (${d.dimension}) — ${d.summary}`);
244
+ }
245
+ lines.push('');
246
+ }
247
+ if (snapshot.loadBearingAssumptions.length > 0) {
248
+ lines.push('**Load-bearing assumptions:**', '');
249
+ for (const a of snapshot.loadBearingAssumptions.slice(0, 3)) {
250
+ lines.push(`- ${a}`);
251
+ }
252
+ lines.push('');
253
+ }
254
+ return lines;
255
+ }
256
+ /** Week-4 consensus gate for the roadmap on contested runs. */
257
+ export function consensusGate(snapshot) {
258
+ if (snapshot.tier !== 'contested')
259
+ return null;
260
+ return {
261
+ week: 4,
262
+ threshold_pct: 60,
263
+ default_action: 'STOP',
264
+ description: 'If measured pilot data has not moved precision confidence above 60% by Week 4, the Week 8 scale ' +
265
+ 'decision defaults to STOP. Resume only after a follow-up consensus check confirms the direction.',
266
+ };
267
+ }
268
+ /**
269
+ * Risk-register row injected on contested runs so analytical uncertainty is
270
+ * a named, owned risk rather than a tone-of-voice.
271
+ */
272
+ export function analyticalUncertaintyRisk(snapshot) {
273
+ if (snapshot.tier !== 'contested')
274
+ return null;
275
+ return {
276
+ risk: `Analytical uncertainty: agent consensus contested (agreement ${snapshot.agreementLevelPct}%, precision ${snapshot.precisionConfidencePct}%)`,
277
+ category: 'Analytical',
278
+ likelihood: 'High',
279
+ impact: 'High',
280
+ score: 9,
281
+ mitigation: 'Week-4 consensus gate (default STOP if precision <60%); pilot scope locked at one region; ' +
282
+ 'load-bearing assumptions tracked weekly with named owners.',
283
+ };
284
+ }
285
+ //# sourceMappingURL=consensus-tiers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consensus-tiers.js","sourceRoot":"","sources":["../../src/synthesis/consensus-tiers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAwCH,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAC/B,iBAAyB,EACzB,sBAA8B;IAE9B,IAAI,iBAAiB,IAAI,EAAE,IAAI,sBAAsB,IAAI,EAAE;QAAE,OAAO,SAAS,CAAC;IAC9E,IAAI,iBAAiB,GAAG,EAAE,IAAI,sBAAsB,GAAG,EAAE;QAAE,OAAO,WAAW,CAAC;IAC9E,IAAI,iBAAiB,IAAI,EAAE,IAAI,sBAAsB,IAAI,EAAE;QAAE,OAAO,aAAa,CAAC;IAClF,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,+EAA+E;AAC/E,sBAAsB;AACtB,+EAA+E;AAE/E,MAAM,qBAAqB,GAAiD;IAC1E,SAAS,EAAE,GAAG;IACd,WAAW,EAAE,GAAG;IAChB,UAAU,EAAE,GAAG;IACf,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,GAAG;CACf,CAAC;AAWF;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,SAA0B,EAAE;IACjE,MAAM,iBAAiB,GAAG,QAAQ,CAAC,MAAM,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;IACnE,MAAM,sBAAsB,GAAG,QAAQ,CAAC,MAAM,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC;IAC7E,MAAM,wBAAwB,GAAG,QAAQ,CACvC,MAAM,CAAC,wBAAwB,IAAI,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,sBAAsB,GAAG,EAAE,CAAC,CAC5F,CAAC;IACF,MAAM,IAAI,GAAG,iBAAiB,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,CAAC;IAC1E,OAAO;QACL,iBAAiB;QACjB,sBAAsB;QACtB,wBAAwB;QACxB,IAAI;QACJ,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,EAAE;QAC/C,sBAAsB,EAAE,MAAM,CAAC,sBAAsB,IAAI,EAAE;QAC3D,YAAY,EAAE,EAAE,GAAG,qBAAqB,EAAE,GAAG,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC,EAAE;KAC3E,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,yBAAyB,CACvC,gBAAyB,EACzB,eAAuC;IAEvC,MAAM,cAAc,GAAG,eAAe,CAAC,IAAI,CACzC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,eAAe,IAAI,CAAC,CAAC,KAAK,KAAK,WAAW,CAC7D,CAAC;IAEF,MAAM,IAAI,GAAG,cAAc,CAAC,CAAC,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1E,MAAM,iBAAiB,GAAG,QAAQ,CAChC,IAAI,EAAE,iBAAiB,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAC1F,CAAC;IACF,MAAM,sBAAsB,GAAG,QAAQ,CACrC,IAAI,EAAE,sBAAsB,IAAI,IAAI,EAAE,aAAa,IAAI,EAAE,CAC1D,CAAC;IACF,MAAM,wBAAwB,GAAG,QAAQ,CACvC,IAAI,EAAE,wBAAwB;QAC5B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,sBAAsB,GAAG,EAAE,CAAC,CAAC,CACzE,CAAC;IAEF,MAAM,gBAAgB,GAAsB,EAAE,CAAC;IAC/C,KAAK,MAAM,CAAC,IAAI,eAAe,EAAE,CAAC;QAChC,IAAI,CAAC,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,MAAM,GAAG,GAAG;YAAE,SAAS;QAChD,gBAAgB,CAAC,IAAI,CAAC;YACpB,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC;YACxC,OAAO,EAAE,yBAAyB,CAAC,CAAC,MAAM,GAAG;SAC9C,CAAC,CAAC;IACL,CAAC;IACD,IAAI,IAAI,EAAE,gBAAgB,EAAE,CAAC;QAC3B,gBAAgB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,sBAAsB,GAAG,IAAI,EAAE,sBAAsB,IAAI;QAC7D,2CAA2C;QAC3C,6CAA6C;QAC7C,qDAAqD;KACtD,CAAC;IAEF,MAAM,YAAY,GAAG,IAAI,EAAE,YAAY,IAAI;QACzC,SAAS,EAAE,sBAAsB,GAAG,GAAG;QACvC,WAAW,EAAE,sBAAsB,GAAG,GAAG;QACzC,UAAU,EAAE,iBAAiB,GAAG,GAAG;QACnC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,iBAAiB,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC;QACxD,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,sBAAsB,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC;KAC/D,CAAC;IAEF,OAAO,sBAAsB,CAAC;QAC5B,iBAAiB;QACjB,sBAAsB;QACtB,wBAAwB;QACxB,gBAAgB;QAChB,sBAAsB;QACtB,YAAY;KACb,CAAC,CAAC;AACL,CAAC;AAED,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E,SAAS,QAAQ,CAAC,CAAS;IACzB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC;IAClC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IACrB,IAAI,CAAC,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC;IACzB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC;AAYD,SAAS,oBAAoB,CAAC,KAAkB;IAC9C,MAAM,QAAQ,GAAG,KAAK,CAAC,QAA0C,CAAC;IAClE,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACzD,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAwC,CAAC;IACzE,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAE,MAAM,CAAC,SAAS,CAAyC,CAAC,CAAC,CAAC,SAAS,CAAC;IACrG,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAE,YAAY,CAAC,MAAM,CAAyC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzG,MAAM,IAAI,GAA4B,OAAO,IAAI,QAAQ,CAAC;IAE1D,MAAM,GAAG,GAAwB,EAAE,CAAC;IACpC,IAAI,OAAO,IAAI,CAAC,qBAAqB,CAAC,KAAK,QAAQ,EAAE,CAAC;QACpD,GAAG,CAAC,iBAAiB,GAAG,IAAI,CAAC,qBAAqB,CAAW,CAAC;IAChE,CAAC;SAAM,IAAI,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,QAAQ,EAAE,CAAC;QACzD,GAAG,CAAC,iBAAiB,GAAG,IAAI,CAAC,mBAAmB,CAAW,CAAC;IAC9D,CAAC;IAED,IAAI,OAAO,IAAI,CAAC,0BAA0B,CAAC,KAAK,QAAQ,EAAE,CAAC;QACzD,GAAG,CAAC,sBAAsB,GAAG,IAAI,CAAC,0BAA0B,CAAW,CAAC;IAC1E,CAAC;SAAM,IAAI,OAAO,IAAI,CAAC,wBAAwB,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC9D,GAAG,CAAC,sBAAsB,GAAG,IAAI,CAAC,wBAAwB,CAAW,CAAC;IACxE,CAAC;IAED,IAAI,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC3C,GAAG,CAAC,aAAa,GAAI,IAAI,CAAC,YAAY,CAAY,GAAG,GAAG,CAAC;IAC3D,CAAC;SAAM,IAAI,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,QAAQ,EAAE,CAAC;QACzD,GAAG,CAAC,aAAa,GAAI,IAAI,CAAC,mBAAmB,CAAY,GAAG,GAAG,CAAC;IAClE,CAAC;IAED,IAAI,OAAO,IAAI,CAAC,4BAA4B,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC3D,GAAG,CAAC,wBAAwB,GAAG,IAAI,CAAC,4BAA4B,CAAW,CAAC;IAC9E,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC;QAC7C,GAAG,CAAC,gBAAgB,GAAI,IAAI,CAAC,mBAAmB,CAAoC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC7F,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC;YACxC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC;YACtC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,KAAK,QAAQ;gBAC5C,CAAC,CAAE,CAAC,CAAC,WAAW,CAAwB;gBACxC,CAAC,CAAC,aAAa,CAAC;YAClB,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;SACnD,CAAC,CAAC,CAAC;IACN,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,EAAE,CAAC;QACpD,GAAG,CAAC,sBAAsB,GAAI,IAAI,CAAC,0BAA0B,CAAe;aACzE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;aAClC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAa,CAAC;IAC7B,CAAC;IAED,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,QAAQ,EAAE,CAAC;QACvE,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,CAAgD,CAAC;IAC1F,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAc;IACzC,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IAC/B,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,WAAW,CAAC;IACrD,IAAI,2CAA2C,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,YAAY,CAAC;IAC7E,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,WAAW,CAAC;IAClD,IAAI,yCAAyC,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,WAAW,CAAC;IAC1E,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,SAAS,iBAAiB,CAAC,gBAAyB;IAClD,IAAI,CAAC,gBAAgB,IAAI,OAAO,gBAAgB,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3E,MAAM,GAAG,GAAI,gBAA4C,CAAC,QAAQ,CAAwC,CAAC;IAC3G,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,SAAS,CAAwC,CAAC;IACxE,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAA4B,CAAC;IAChF,MAAM,GAAG,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC;IAC9D,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IACxC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,+EAA+E;AAC/E,6BAA6B;AAC7B,+EAA+E;AAE/E,qDAAqD;AACrD,MAAM,UAAU,eAAe,CAAC,QAA2B;IACzD,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC7C,IAAI,QAAQ,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QACpC,OAAO;YACL,+CAA+C,QAAQ,CAAC,iBAAiB,gBAAgB,QAAQ,CAAC,sBAAsB,IAAI;YAC5H,gGAAgG;SACjG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IACD,OAAO;QACL,6CAA6C,QAAQ,CAAC,iBAAiB,gBAAgB,QAAQ,CAAC,sBAAsB,IAAI;QAC1H,oEAAoE;KACrE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,yBAAyB,CAAC,QAA2B;IACnE,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC7C,IAAI,QAAQ,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QACpC,OAAO,CACL,mCAAmC,QAAQ,CAAC,iBAAiB,iCAAiC;YAC9F,oGAAoG,CACrG,CAAC;IACJ,CAAC;IACD,OAAO,CACL,6CAA6C,QAAQ,CAAC,iBAAiB,gBAAgB,QAAQ,CAAC,sBAAsB,QAAQ;QAC9H,iGAAiG;QACjG,+EAA+E,CAChF,CAAC;AACJ,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,0BAA0B,CAAC,QAA2B;IACpE,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAa,CAAC,kCAAkC,EAAE,EAAE,CAAC,CAAC;IACjE,KAAK,CAAC,IAAI,CACR,uCAAuC,QAAQ,CAAC,iBAAiB,wBAAwB,QAAQ,CAAC,sBAAsB,OAAO;QAC/H,+BAA+B,QAAQ,CAAC,wBAAwB,yDAAyD;QACzH,mDAAmD,EACnD,EAAE,CACH,CAAC;IAEF,IAAI,QAAQ,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;QACzC,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACtD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,SAAS,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,QAAQ,CAAC,sBAAsB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,+BAA+B,EAAE,EAAE,CAAC,CAAC;QAChD,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YAC5D,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvB,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,aAAa,CAAC,QAA2B;IAMvD,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IAC/C,OAAO;QACL,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,EAAE;QACjB,cAAc,EAAE,MAAM;QACtB,WAAW,EACT,kGAAkG;YAClG,kGAAkG;KACrG,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,QAA2B;IAQnE,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IAC/C,OAAO;QACL,IAAI,EAAE,gEAAgE,QAAQ,CAAC,iBAAiB,gBAAgB,QAAQ,CAAC,sBAAsB,IAAI;QACnJ,QAAQ,EAAE,YAAY;QACtB,UAAU,EAAE,MAAM;QAClB,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,CAAC;QACR,UAAU,EACR,4FAA4F;YAC5F,4DAA4D;KAC/D,CAAC;AACJ,CAAC"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * ADR-PIPELINE-070: Domain Labor-Intensity Classifier
3
+ *
4
+ * Pure rules-based classifier. Maps the detected sector + free-text query
5
+ * keywords to a LaborProfile that downstream renderers consume:
6
+ *
7
+ * - Risk register injects a Workforce Impact section
8
+ * - Financial analysis adds a workforce exposure block
9
+ * - Decision memo RACI gains HR + Legal rows
10
+ * - Sensitivity table gains a change-management variable
11
+ *
12
+ * The classifier is intentionally coarse — it answers "is this sector
13
+ * labor-intensive enough that workforce risk MUST appear in the
14
+ * deliverables?" not "what specific labor risks does this engagement
15
+ * have?". The Workforce Impact rows it produces are templates labelled
16
+ * `*Template risk — refine with HR during pilot scoping*`.
17
+ */
18
+ import { type Sector } from './domain-unit-registry.js';
19
+ import type { DomainAnalysis } from './simulation-renderers.js';
20
+ export type LaborIntensity = 'high' | 'medium' | 'low';
21
+ export type UnionizationRisk = 'high' | 'medium' | 'low';
22
+ export type Region = 'NA' | 'EMEA' | 'APAC';
23
+ export interface LaborProfile {
24
+ /** Overall labor intensity for this engagement. */
25
+ readonly intensity: LaborIntensity;
26
+ /** Detected sector (from ADR-066 registry) — 'unknown' when unmatched. */
27
+ readonly sector: Sector;
28
+ /** Plain-English role types most affected by the engagement. */
29
+ readonly roleTypes: readonly string[];
30
+ /** Likelihood that affected workforce sits within a unionized population. */
31
+ readonly unionizationRisk: UnionizationRisk;
32
+ /** Per-region labor exposure multipliers (1.0 = baseline). */
33
+ readonly regionMultipliers: Readonly<Record<Region, number>>;
34
+ /** Why the classifier picked this intensity — surfaced in logs/artifacts. */
35
+ readonly reasoning: string;
36
+ }
37
+ /**
38
+ * ADR-PIPELINE-070: classify the labor intensity of an engagement.
39
+ *
40
+ * Inputs:
41
+ * - `domainAnalysis` — when present, its `domain` field is treated as the
42
+ * authoritative sector hint (from ADR-PIPELINE-041's pipeline output).
43
+ * - `query` — free-text query, used both for sector detection and for
44
+ * intensity-override patterns.
45
+ *
46
+ * The function never throws. Unknown sectors return the LOW_DEFAULT profile.
47
+ */
48
+ export declare function classifyLaborIntensity(domainAnalysis: DomainAnalysis | null, query: string): LaborProfile;
49
+ /** True when the renderer must inject workforce content. */
50
+ export declare function isLaborIntensive(profile: LaborProfile): boolean;
51
+ export interface WorkforceRiskRow {
52
+ readonly category: string;
53
+ readonly risk: string;
54
+ readonly likelihood: 'High' | 'Medium' | 'Low';
55
+ readonly severity: 'High' | 'Medium' | 'Low';
56
+ readonly owner: string;
57
+ readonly mitigation: string;
58
+ readonly template: true;
59
+ }
60
+ export declare function workforceRiskTemplate(profile: LaborProfile): readonly WorkforceRiskRow[];
61
+ export interface WorkforceExposure {
62
+ readonly rolesAffected: number;
63
+ readonly emeaUnionExposure: number;
64
+ readonly changeMgmtBudgetLowUsd: number;
65
+ readonly changeMgmtBudgetHighUsd: number;
66
+ readonly changeMgmtPct: number;
67
+ readonly reallocationNeutral: boolean;
68
+ readonly primaryRoleLabel: string;
69
+ }
70
+ interface WorkforceExposureInputs {
71
+ /** Total enterprise headcount (for context only — never the savings base). */
72
+ readonly employees: number;
73
+ /** Operational units (rooms, sqft, vehicles, ...) when known. */
74
+ readonly operationalUnits?: number;
75
+ /** Pilot investment range mid-point in USD — basis for change-mgmt budget. */
76
+ readonly pilotInvestmentUsd?: number;
77
+ }
78
+ export declare function estimateWorkforceExposure(profile: LaborProfile, inputs: WorkforceExposureInputs): WorkforceExposure | null;
79
+ export interface WorkforceRaciRow {
80
+ readonly role: string;
81
+ readonly responsibility: 'Responsible' | 'Accountable' | 'Consulted' | 'Informed';
82
+ readonly cadence: string;
83
+ readonly template: true;
84
+ }
85
+ export declare function workforceRaciTemplate(profile: LaborProfile): readonly WorkforceRaciRow[];
86
+ export interface WorkforceSensitivityRow {
87
+ readonly variable: string;
88
+ readonly range: string;
89
+ readonly impactPctOfPilot: number;
90
+ readonly reasoning: string;
91
+ }
92
+ export declare function workforceSensitivityRow(profile: LaborProfile): WorkforceSensitivityRow | null;
93
+ export interface LaborProfileArtifact {
94
+ readonly version: '1.0';
95
+ readonly generated_at: string;
96
+ readonly profile: LaborProfile;
97
+ readonly exposure: WorkforceExposure | null;
98
+ }
99
+ export declare function buildLaborProfileArtifact(profile: LaborProfile, exposure: WorkforceExposure | null): LaborProfileArtifact;
100
+ export {};
101
+ //# sourceMappingURL=domain-labor-classifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain-labor-classifier.d.ts","sourceRoot":"","sources":["../../src/synthesis/domain-labor-classifier.ts"],"names":[],"mappings":"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"}