@mergesignal/shared 0.4.1 → 0.4.2

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 (61) hide show
  1. package/dist/deriveScanNarrative.d.ts.map +1 -1
  2. package/dist/deriveScanNarrative.js +41 -8
  3. package/dist/deriveScanNarrative.test.js +4 -0
  4. package/dist/fixtures/repoIntelligenceFixtures.d.ts.map +1 -1
  5. package/dist/fixtures/repoIntelligenceFixtures.js +8 -1
  6. package/dist/presentation/compose/narrativeCompose.d.ts.map +1 -1
  7. package/dist/presentation/compose/narrativeCompose.js +15 -101
  8. package/dist/presentation/dto/scanCardPresentation.d.ts +2 -0
  9. package/dist/presentation/dto/scanCardPresentation.d.ts.map +1 -1
  10. package/dist/presentation/dto/scanDetailsPresentation.d.ts +2 -0
  11. package/dist/presentation/dto/scanDetailsPresentation.d.ts.map +1 -1
  12. package/dist/presentation/fixtures/presentationPersonaFixtures.d.ts +11 -0
  13. package/dist/presentation/fixtures/presentationPersonaFixtures.d.ts.map +1 -0
  14. package/dist/presentation/fixtures/presentationPersonaFixtures.js +197 -0
  15. package/dist/presentation/index.d.ts +2 -0
  16. package/dist/presentation/index.d.ts.map +1 -1
  17. package/dist/presentation/index.js +1 -0
  18. package/dist/presentation/intent/applyPostureVocabularyGuard.d.ts +5 -0
  19. package/dist/presentation/intent/applyPostureVocabularyGuard.d.ts.map +1 -0
  20. package/dist/presentation/intent/applyPostureVocabularyGuard.js +44 -0
  21. package/dist/presentation/intent/derivePresentationInterpretation.d.ts +4 -0
  22. package/dist/presentation/intent/derivePresentationInterpretation.d.ts.map +1 -0
  23. package/dist/presentation/intent/derivePresentationInterpretation.js +202 -0
  24. package/dist/presentation/intent/formatPresentationCopy.d.ts +7 -0
  25. package/dist/presentation/intent/formatPresentationCopy.d.ts.map +1 -0
  26. package/dist/presentation/intent/formatPresentationCopy.js +153 -0
  27. package/dist/presentation/intent/packageDisplayName.d.ts +4 -0
  28. package/dist/presentation/intent/packageDisplayName.d.ts.map +1 -0
  29. package/dist/presentation/intent/packageDisplayName.js +17 -0
  30. package/dist/presentation/intent/postureVocabularyGuard.test.d.ts +2 -0
  31. package/dist/presentation/intent/postureVocabularyGuard.test.d.ts.map +1 -0
  32. package/dist/presentation/intent/postureVocabularyGuard.test.js +23 -0
  33. package/dist/presentation/intent/presentationIntent.d.ts +14 -0
  34. package/dist/presentation/intent/presentationIntent.d.ts.map +1 -0
  35. package/dist/presentation/intent/presentationIntent.js +1 -0
  36. package/dist/presentation/intent/presentationIntent.test.d.ts +2 -0
  37. package/dist/presentation/intent/presentationIntent.test.d.ts.map +1 -0
  38. package/dist/presentation/intent/presentationIntent.test.js +29 -0
  39. package/dist/presentation/intent/verificationFocusLabels.d.ts +2 -0
  40. package/dist/presentation/intent/verificationFocusLabels.d.ts.map +1 -0
  41. package/dist/presentation/intent/verificationFocusLabels.js +45 -0
  42. package/dist/presentation/presentation.test.js +3 -0
  43. package/dist/presentation/presentationPersonas.test.d.ts +2 -0
  44. package/dist/presentation/presentationPersonas.test.d.ts.map +1 -0
  45. package/dist/presentation/presentationPersonas.test.js +166 -0
  46. package/dist/presentation/presenters/presentScanCard.d.ts.map +1 -1
  47. package/dist/presentation/presenters/presentScanCard.js +1 -0
  48. package/dist/presentation/presenters/presentScanDetails.d.ts.map +1 -1
  49. package/dist/presentation/presenters/presentScanDetails.js +7 -1
  50. package/dist/presentation/profile/derivePresentationProfile.d.ts.map +1 -1
  51. package/dist/presentation/profile/derivePresentationProfile.js +18 -27
  52. package/dist/presentation/profile/presentationProfile.d.ts +2 -0
  53. package/dist/presentation/profile/presentationProfile.d.ts.map +1 -1
  54. package/dist/repoIntelligenceSchema.d.ts +1 -1
  55. package/dist/scanNarrativeFacts.d.ts +31 -7
  56. package/dist/scanNarrativeFacts.d.ts.map +1 -1
  57. package/dist/scanNarrativeFacts.js +1 -0
  58. package/dist/scanSurfaceCopy.d.ts +8 -0
  59. package/dist/scanSurfaceCopy.d.ts.map +1 -1
  60. package/dist/scanSurfaceCopy.js +8 -0
  61. package/package.json +1 -1
@@ -0,0 +1,166 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { buildScanPresentationBundle } from "./orchestration/buildScanPresentationBundle.js";
3
+ import { presentScanCard } from "./presenters/presentScanCard.js";
4
+ import { presentScanDetails } from "./presenters/presentScanDetails.js";
5
+ import { presentCliScanSummary } from "./presenters/presentCliScanSummary.js";
6
+ import { scanResultBullmq, scanResultEslint, scanResultFastifyRuntime, scanResultLimitedContext, scanResultMixedTypescriptFastify, scanResultNextAuth, scanResultPrettier, scanResultTypescriptPatch, scanResultUnknownSafe, scanResultVitest, } from "./fixtures/presentationPersonaFixtures.js";
7
+ const SCAN_ID = "22222222-2222-4222-8222-222222222222";
8
+ const SAFE_FORBIDDEN = /needs review|high risk|critical concern/i;
9
+ const REVIEW_FORBIDDEN = /no action required|no verification required/i;
10
+ const personas = [
11
+ {
12
+ name: "typescript patch",
13
+ result: scanResultTypescriptPatch,
14
+ intent: "tooling_patch",
15
+ status: "safe",
16
+ density: "minimal",
17
+ headlineMatch: /patch upgrade/i,
18
+ headlineMustNot: /needs review/i,
19
+ verificationIncludes: ["CI", "typecheck"],
20
+ verificationMustNot: /auth flow/i,
21
+ },
22
+ {
23
+ name: "eslint",
24
+ result: scanResultEslint,
25
+ intent: "tooling_upgrade",
26
+ status: "safe",
27
+ density: "minimal",
28
+ headlineMatch: /tooling upgrade/i,
29
+ headlineMustNot: /needs review/i,
30
+ verificationIncludes: ["CI", "lint"],
31
+ },
32
+ {
33
+ name: "prettier",
34
+ result: scanResultPrettier,
35
+ intent: "tooling_upgrade",
36
+ status: "safe",
37
+ density: "minimal",
38
+ headlineMatch: /tooling upgrade/i,
39
+ headlineMustNot: /needs review/i,
40
+ verificationIncludes: ["format"],
41
+ },
42
+ {
43
+ name: "vitest",
44
+ result: scanResultVitest,
45
+ intent: "tooling_upgrade",
46
+ status: "safe",
47
+ density: "minimal",
48
+ headlineMatch: /tooling upgrade/i,
49
+ headlineMustNot: /needs review/i,
50
+ verificationIncludes: ["test suite"],
51
+ },
52
+ {
53
+ name: "fastify runtime",
54
+ result: scanResultFastifyRuntime,
55
+ intent: "runtime_upgrade",
56
+ status: "needs_review",
57
+ density: "rich",
58
+ headlineMatch: /runtime upgrade affects/i,
59
+ verificationIncludes: ["routes", "middleware"],
60
+ },
61
+ {
62
+ name: "nextauth runtime",
63
+ result: scanResultNextAuth,
64
+ intent: "auth_runtime_upgrade",
65
+ status: "needs_review",
66
+ density: "rich",
67
+ headlineMatch: /runtime upgrade affects/i,
68
+ verificationIncludes: ["auth flow"],
69
+ },
70
+ {
71
+ name: "bullmq runtime",
72
+ result: scanResultBullmq,
73
+ intent: "queue_runtime_upgrade",
74
+ status: "needs_review",
75
+ density: "rich",
76
+ headlineMatch: /runtime upgrade affects/i,
77
+ verificationIncludes: ["workers", "queue"],
78
+ },
79
+ {
80
+ name: "limited context",
81
+ result: scanResultLimitedContext,
82
+ intent: "limited_context",
83
+ status: "needs_review",
84
+ density: "minimal",
85
+ headlineMatch: /limited scan context/i,
86
+ },
87
+ {
88
+ name: "unknown safe",
89
+ result: scanResultUnknownSafe,
90
+ intent: "unknown_upgrade",
91
+ status: "safe",
92
+ density: "standard",
93
+ headlineMatch: /dependency upgrade/i,
94
+ headlineMustNot: /needs review/i,
95
+ },
96
+ ];
97
+ function cardFor(result) {
98
+ const bundle = buildScanPresentationBundle({
99
+ result,
100
+ pipelineStatus: "done",
101
+ });
102
+ return presentScanCard(bundle);
103
+ }
104
+ describe("presentation personas", () => {
105
+ for (const persona of personas) {
106
+ it(`${persona.name}: intent, posture alignment, headline`, () => {
107
+ const card = cardFor(persona.result);
108
+ expect(card.presentationIntent).toBe(persona.intent);
109
+ expect(card.status).toBe(persona.status);
110
+ expect(card.density).toBe(persona.density);
111
+ expect(card.headline).toMatch(persona.headlineMatch);
112
+ if (persona.headlineMustNot) {
113
+ expect(card.headline).not.toMatch(persona.headlineMustNot);
114
+ }
115
+ if (persona.status === "safe") {
116
+ const combined = [
117
+ card.headline,
118
+ ...card.keyPoints,
119
+ ...card.verificationActions,
120
+ ].join(" ");
121
+ expect(combined).not.toMatch(SAFE_FORBIDDEN);
122
+ }
123
+ if (persona.status === "needs_review") {
124
+ const combined = card.verificationActions.join(" ");
125
+ expect(combined).not.toMatch(REVIEW_FORBIDDEN);
126
+ }
127
+ if (persona.verificationIncludes) {
128
+ for (const v of persona.verificationIncludes) {
129
+ expect(card.verificationActions.some((a) => a.toLowerCase().includes(v.toLowerCase()))).toBe(true);
130
+ }
131
+ }
132
+ if (persona.verificationMustNot) {
133
+ expect(card.verificationActions.join(" ")).not.toMatch(persona.verificationMustNot);
134
+ }
135
+ });
136
+ }
137
+ it("mixed typescript+fastify: runtime intent, fastify in headline", () => {
138
+ const card = cardFor(scanResultMixedTypescriptFastify);
139
+ expect(card.presentationIntent).toBe("runtime_upgrade");
140
+ expect(card.headline.toLowerCase()).toContain("fastify");
141
+ expect(card.headline).not.toMatch(/patch upgrade/i);
142
+ });
143
+ it("cross-surface parity: fastify headline matches card, details, CLI", () => {
144
+ const bundle = buildScanPresentationBundle({
145
+ result: scanResultFastifyRuntime,
146
+ pipelineStatus: "done",
147
+ });
148
+ const card = presentScanCard(bundle);
149
+ const details = presentScanDetails(bundle, { scanId: SCAN_ID });
150
+ const cli = presentCliScanSummary(bundle, { repoLabel: "acme/api" });
151
+ expect(details.hero.headline).toBe(card.headline);
152
+ expect(cli.headline).toBe(card.headline);
153
+ });
154
+ it("cross-surface parity: typescript headline matches card, details, CLI", () => {
155
+ const bundle = buildScanPresentationBundle({
156
+ result: scanResultTypescriptPatch,
157
+ pipelineStatus: "done",
158
+ });
159
+ const card = presentScanCard(bundle);
160
+ const details = presentScanDetails(bundle, { scanId: SCAN_ID });
161
+ const cli = presentCliScanSummary(bundle, { repoLabel: "acme/api" });
162
+ expect(details.hero.headline).toBe(card.headline);
163
+ expect(cli.headline).toBe(card.headline);
164
+ expect(card.headline).not.toMatch(/needs review/i);
165
+ });
166
+ });
@@ -1 +1 @@
1
- {"version":3,"file":"presentScanCard.d.ts","sourceRoot":"","sources":["../../../src/presentation/presenters/presentScanCard.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAgB3E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AAEzF,MAAM,MAAM,sBAAsB,GAAG;IACnC,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC,CAAC;AAsBF,wBAAgB,eAAe,CAC7B,MAAM,EAAE,sBAAsB,EAC9B,GAAG,GAAE,sBAA2B,GAC/B,oBAAoB,CAyBtB"}
1
+ {"version":3,"file":"presentScanCard.d.ts","sourceRoot":"","sources":["../../../src/presentation/presenters/presentScanCard.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAgB3E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AAEzF,MAAM,MAAM,sBAAsB,GAAG;IACnC,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC,CAAC;AAsBF,wBAAgB,eAAe,CAC7B,MAAM,EAAE,sBAAsB,EAC9B,GAAG,GAAE,sBAA2B,GAC/B,oBAAoB,CA0BtB"}
@@ -38,6 +38,7 @@ export function presentScanCard(bundle, ctx = {}) {
38
38
  ? aggregateFindingCounts(result.findings)
39
39
  : null,
40
40
  actionLabel: scanSurfaceCopy.presentation.actionLabelReview,
41
+ presentationIntent: profile.interpretation.intent,
41
42
  };
42
43
  return normalizeCard(presentation);
43
44
  }
@@ -1 +1 @@
1
- {"version":3,"file":"presentScanDetails.d.ts","sourceRoot":"","sources":["../../../src/presentation/presenters/presentScanDetails.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AAEzF,MAAM,MAAM,yBAAyB,GAAG;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAAC;AAoHF,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,sBAAsB,EAC9B,GAAG,EAAE,yBAAyB,GAC7B,uBAAuB,CAgFzB"}
1
+ {"version":3,"file":"presentScanDetails.d.ts","sourceRoot":"","sources":["../../../src/presentation/presenters/presentScanDetails.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AAEzF,MAAM,MAAM,yBAAyB,GAAG;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAAC;AAoHF,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,sBAAsB,EAC9B,GAAG,EAAE,yBAAyB,GAC7B,uBAAuB,CAyFzB"}
@@ -123,15 +123,21 @@ export function presentScanDetails(bundle, ctx) {
123
123
  : undefined;
124
124
  const posture = profile.status;
125
125
  const postureLabel = MERGE_POSTURE_LABEL[posture];
126
+ const toolingIntent = profile.interpretation.intent === "tooling_patch" ||
127
+ profile.interpretation.intent === "tooling_upgrade";
128
+ const verdictLine = profile.priority === "pr_intelligence" && toolingIntent && keyPoints[0]
129
+ ? keyPoints[0]
130
+ : deriveVerdictLineFromFacts(facts, result);
126
131
  return {
127
132
  evidenceContext: evidenceContextFromProfile(bundle),
128
133
  status: profile.status,
129
134
  density: profile.density,
130
135
  confidence: profile.confidence,
136
+ presentationIntent: profile.interpretation.intent,
131
137
  hero: {
132
138
  headline: normalizeGeneratedText(headline),
133
139
  subheadline: normalizeGeneratedTextNullable(subheadline) ?? undefined,
134
- verdictLine: deriveVerdictLineFromFacts(facts, result),
140
+ verdictLine: normalizeGeneratedText(verdictLine),
135
141
  scopeChip: deriveDetailReachChip(result.totalScore) ?? undefined,
136
142
  postureLabel,
137
143
  riskIndex: facts.riskIndex,
@@ -1 +1 @@
1
- {"version":3,"file":"derivePresentationProfile.d.ts","sourceRoot":"","sources":["../../../src/presentation/profile/derivePresentationProfile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAGtE,OAAO,KAAK,EAAE,cAAc,EAAsB,MAAM,iBAAiB,CAAC;AAC1E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,KAAK,gCAAgC,GAAG;IACtC,cAAc,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAAC;AAyGF,8DAA8D;AAC9D,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,kBAAkB,EACzB,GAAG,EAAE,gCAAgC,GACpC,mBAAmB,GAAG,IAAI,CAsB5B"}
1
+ {"version":3,"file":"derivePresentationProfile.d.ts","sourceRoot":"","sources":["../../../src/presentation/profile/derivePresentationProfile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAKtE,OAAO,KAAK,EAAE,cAAc,EAAsB,MAAM,iBAAiB,CAAC;AAC1E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,KAAK,gCAAgC,GAAG;IACtC,cAAc,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAAC;AAwFF,8DAA8D;AAC9D,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,kBAAkB,EACzB,GAAG,EAAE,gCAAgC,GACpC,mBAAmB,GAAG,IAAI,CAwB5B"}
@@ -1,5 +1,6 @@
1
1
  import { mergePostureFromDecision } from "../../riskVocabulary.js";
2
2
  import { scanSurfaceCopy } from "../../scanSurfaceCopy.js";
3
+ import { derivePresentationInterpretation } from "../intent/derivePresentationInterpretation.js";
3
4
  function statusFromScore(totalScore) {
4
5
  if (totalScore == null || !Number.isFinite(totalScore))
5
6
  return "needs_review";
@@ -26,36 +27,24 @@ function hasHighSeverityFindings(facts) {
26
27
  return facts.reviewerGuidance.some((g) => g.kind === "finding" &&
27
28
  (g.priority === "critical" || g.priority === "high"));
28
29
  }
29
- function hasRuntimeUsage(facts) {
30
- if (facts.runtimeSurface?.kind === "runtime")
31
- return true;
32
- return facts.packageUsage.some((u) => u.paths.length > 0 || u.criticalPaths.length > 0);
33
- }
34
- function deriveDensity(facts, priority) {
30
+ function deriveDensity(facts, priority, interpretation) {
35
31
  if (priority === "limited") {
36
32
  return hasHighSeverityFindings(facts) ? "standard" : "minimal";
37
33
  }
38
- const semantics = facts.packageSemantics;
39
- const runtime = facts.runtimeSurface?.kind === "runtime" ||
40
- semantics?.runtimeImpact === "confirmed";
41
- const wideOrModerate = facts.blastRadius?.level === "wide" ||
42
- facts.blastRadius?.level === "moderate";
43
- const hasAreas = facts.affectedAreas.length > 0;
44
- const hasRuntimePaths = hasRuntimeUsage(facts);
45
- if (runtime && (wideOrModerate || hasAreas || hasRuntimePaths)) {
46
- return "rich";
34
+ if (interpretation.allowRuntimeNarrative) {
35
+ const wideOrModerate = facts.blastRadius?.level === "wide" ||
36
+ facts.blastRadius?.level === "moderate";
37
+ const hasAreas = facts.affectedAreas.length > 0;
38
+ const hasPaths = facts.packageUsage.some((u) => u.paths.length > 0 || u.criticalPaths.length > 0);
39
+ if (wideOrModerate || hasAreas || hasPaths) {
40
+ return "rich";
41
+ }
47
42
  }
48
- const toolingImpact = semantics?.expectedImpact === "typecheck" ||
49
- semantics?.expectedImpact === "development_only" ||
50
- semantics?.expectedImpact === "test_time" ||
51
- semantics?.expectedImpact === "build_time";
52
- const buildOnly = semantics?.suppressRuntimeNarrative === true ||
53
- toolingImpact ||
54
- facts.runtimeSurface?.kind === "build" ||
55
- facts.reachability?.kind === "build_only";
56
- const narrowBlast = !facts.blastRadius || facts.blastRadius.level === "narrow";
57
- if (buildOnly && narrowBlast && !hasAreas) {
58
- return "minimal";
43
+ if (interpretation.suppressRuntimeNarrative) {
44
+ const narrow = !facts.blastRadius || facts.blastRadius.level === "narrow";
45
+ if (narrow && facts.affectedAreas.length === 0) {
46
+ return "minimal";
47
+ }
59
48
  }
60
49
  return "standard";
61
50
  }
@@ -75,11 +64,12 @@ function deriveConfidence(facts, priority) {
75
64
  export function derivePresentationProfile(facts, ctx) {
76
65
  if (ctx.pipelineStatus !== "done")
77
66
  return null;
67
+ const interpretation = derivePresentationInterpretation(facts);
78
68
  const priority = hasStrongPrIntelligence(facts)
79
69
  ? "pr_intelligence"
80
70
  : "limited";
81
71
  const status = resolveStatus(facts, ctx);
82
- const density = deriveDensity(facts, priority);
72
+ const density = deriveDensity(facts, priority, interpretation);
83
73
  const confidence = deriveConfidence(facts, priority);
84
74
  const degradedMessage = priority === "limited"
85
75
  ? scanSurfaceCopy.presentation.limitedContextMessage
@@ -90,5 +80,6 @@ export function derivePresentationProfile(facts, ctx) {
90
80
  confidence,
91
81
  priority,
92
82
  degradedMessage,
83
+ interpretation,
93
84
  };
94
85
  }
@@ -1,9 +1,11 @@
1
1
  import type { PresentationConfidence, PresentationDensity, PresentationPriority, PresentationStatus } from "../dto/types.js";
2
+ import type { PresentationInterpretation } from "../intent/presentationIntent.js";
2
3
  export type PresentationProfile = {
3
4
  status: PresentationStatus;
4
5
  density: PresentationDensity;
5
6
  confidence: PresentationConfidence;
6
7
  priority: PresentationPriority;
7
8
  degradedMessage?: string;
9
+ interpretation: PresentationInterpretation;
8
10
  };
9
11
  //# sourceMappingURL=presentationProfile.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"presentationProfile.d.ts","sourceRoot":"","sources":["../../../src/presentation/profile/presentationProfile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,OAAO,EAAE,mBAAmB,CAAC;IAC7B,UAAU,EAAE,sBAAsB,CAAC;IACnC,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC"}
1
+ {"version":3,"file":"presentationProfile.d.ts","sourceRoot":"","sources":["../../../src/presentation/profile/presentationProfile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAElF,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,OAAO,EAAE,mBAAmB,CAAC;IAC7B,UAAU,EAAE,sBAAsB,CAAC;IACnC,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,0BAA0B,CAAC;CAC5C,CAAC"}
@@ -39,9 +39,9 @@ export declare const repoIntelligenceWireSchema: z.ZodObject<{
39
39
  runtime: "runtime";
40
40
  build: "build";
41
41
  test: "test";
42
- format: "format";
43
42
  tooling: "tooling";
44
43
  lint: "lint";
44
+ format: "format";
45
45
  ci: "ci";
46
46
  }>>;
47
47
  packageRole: z.ZodOptional<z.ZodEnum<{
@@ -15,6 +15,33 @@ export type NarrativePackageUsage = {
15
15
  areas: string[];
16
16
  };
17
17
  export type RepoIntelligenceParseStatus = "ok" | "invalid" | "absent" | "untrusted";
18
+ export type PackageDependencyClass = "runtime" | "tooling" | "test" | "lint" | "format" | "build" | "ci" | "unknown";
19
+ export type PackageRoleKind = "typechecker" | "compiler" | "bundler" | "linter" | "formatter" | "test_runner" | "http_framework" | "auth" | "queue" | "orm" | "unknown";
20
+ export type PackageRuntimeImpact = "none" | "possible" | "confirmed" | "unknown";
21
+ export type PackageExpectedImpact = "runtime" | "build_time" | "typecheck" | "test_time" | "development_only" | "unknown";
22
+ export type PackageEvidenceStrength = "high" | "medium" | "low";
23
+ /** Engine semantic projection for one changed package (wire copy only). */
24
+ export type ChangedPackageSemantics = {
25
+ packageName: string;
26
+ dependencyClass: PackageDependencyClass | null;
27
+ packageRole: PackageRoleKind | null;
28
+ runtimeImpact: PackageRuntimeImpact | null;
29
+ expectedImpact: PackageExpectedImpact | null;
30
+ suppressRuntimeNarrative: boolean;
31
+ evidenceStrength: PackageEvidenceStrength | null;
32
+ verificationFocus: string[];
33
+ usagePathCount: number;
34
+ usageAreaCount: number;
35
+ };
36
+ export type PackageSemanticsSummary = {
37
+ dependencyClass: PackageDependencyClass | null;
38
+ packageRole: PackageRoleKind | null;
39
+ runtimeImpact: PackageRuntimeImpact | null;
40
+ expectedImpact: PackageExpectedImpact | null;
41
+ suppressRuntimeNarrative: boolean;
42
+ evidenceStrength: PackageEvidenceStrength | null;
43
+ verificationFocus: string[];
44
+ };
18
45
  export type ScanNarrativeFacts = {
19
46
  availability: {
20
47
  mode: NarrativeAvailabilityMode;
@@ -47,13 +74,10 @@ export type ScanNarrativeFacts = {
47
74
  frameworks: string[];
48
75
  };
49
76
  } | null;
50
- /** From sanitized repoIntelligence primary package semantics (ABI 2). */
51
- packageSemantics: {
52
- runtimeImpact: "none" | "possible" | "confirmed" | "unknown" | null;
53
- expectedImpact: "runtime" | "build_time" | "typecheck" | "test_time" | "development_only" | "unknown" | null;
54
- suppressRuntimeNarrative: boolean;
55
- verificationFocus: string[];
56
- } | null;
77
+ /** Primary changed package semantics (ABI 2 wire projection). */
78
+ packageSemantics: PackageSemanticsSummary | null;
79
+ /** Per changed package semantics for mixed-PR precedence (wire projection). */
80
+ changedPackageSemantics: ChangedPackageSemantics[];
57
81
  blastRadius: {
58
82
  level: BlastRadiusLevel;
59
83
  changedPackageCount?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"scanNarrativeFacts.d.ts","sourceRoot":"","sources":["../src/scanNarrativeFacts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scanNarrativeFacts.d.ts","sourceRoot":"","sources":["../src/scanNarrativeFacts.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,7 @@ export const EMPTY_SCAN_NARRATIVE_FACTS = {
11
11
  runtimeSurface: null,
12
12
  reachability: null,
13
13
  packageSemantics: null,
14
+ changedPackageSemantics: [],
14
15
  blastRadius: null,
15
16
  affectedAreas: [],
16
17
  hotspots: [],
@@ -297,11 +297,19 @@ export declare const scanSurfaceCopy: {
297
297
  readonly multiRuntimeHeadline: "Multiple runtime dependency upgrades need review";
298
298
  readonly buildOnlyHeadline: "{package} patch upgrade with limited application impact";
299
299
  readonly runtimeHeadline: "{package} upgrade affects {surface}";
300
+ readonly toolingPatchHeadline: "{package} patch upgrade";
301
+ readonly toolingUpgradeHeadline: "{package} tooling upgrade";
302
+ readonly runtimeUpgradeHeadline: "{package} runtime upgrade affects {surface}";
303
+ readonly safeNeutralHeadline: "{package} dependency upgrade";
300
304
  readonly defaultUpgradeHeadline: "{package} dependency upgrade needs review";
301
305
  readonly changedPackageKeyPoint: "Changed package: {package}";
302
306
  readonly usedInPathsSingle: "Used across application code ({path})";
303
307
  readonly usedInPathsMultiple: "Used across {count} code paths";
304
308
  readonly noRuntimePathsKeyPoint: "No runtime usage paths detected";
309
+ readonly expectedImpactLimitedKeyPoint: "Expected impact is limited to {workflows}";
310
+ readonly limitedEvidenceKeyPoint: "Evidence for this upgrade is limited";
311
+ readonly usedInRuntimePathsKeyPoint: "Used in runtime application paths";
312
+ readonly runtimeUsageKeyPoint: "Used in runtime application paths";
305
313
  readonly blastRadiusWideKeyPoint: "Blast radius is wide";
306
314
  readonly blastRadiusLevelKeyPoint: "Blast radius is {level}";
307
315
  readonly noAffectedAreasKeyPoint: "No affected application areas identified";
@@ -1 +1 @@
1
- {"version":3,"file":"scanSurfaceCopy.d.ts","sourceRoot":"","sources":["../src/scanSurfaceCopy.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;QAgBxB,8EAA8E;;QAG9E,6DAA6D;;;;QAO7D,qDAAqD;;;;;QASrD,mEAAmE;;;;QAOnE,yFAAyF;;QAGzF,mFAAmF;;QAGnF,4EAA4E;;QAE5E,8FAA8F;;QAE9F,+DAA+D;;;QAI/D,6EAA6E;;;;;QAK7E,2CAA2C;;;QAK3C,2EAA2E;;QAE3E,4EAA4E;;;QAI5E,sEAAsE;;;IAGxE,2EAA2E;;;;;;;;;;;;;;QAiBzE,oEAAoE;;;IAGtE,wEAAwE;;;;;;QAOtE,2CAA2C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAkCzC,yDAAyD;;YAGzD,mDAAmD;;YAGnD,8BAA8B;;YAE9B,oDAAoD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA4CtD,6CAA6C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAsI/C,uFAAuF;;;;;;;;;;;;;;;;;;;;;;;;IAwBvF,kFAAkF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA+BlF,sEAAsE;;;;;CAO9D,CAAC;AAEX,iEAAiE;AACjE,wBAAgB,mBAAmB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAa5D"}
1
+ {"version":3,"file":"scanSurfaceCopy.d.ts","sourceRoot":"","sources":["../src/scanSurfaceCopy.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;QAgBxB,8EAA8E;;QAG9E,6DAA6D;;;;QAO7D,qDAAqD;;;;;QASrD,mEAAmE;;;;QAOnE,yFAAyF;;QAGzF,mFAAmF;;QAGnF,4EAA4E;;QAE5E,8FAA8F;;QAE9F,+DAA+D;;;QAI/D,6EAA6E;;;;;QAK7E,2CAA2C;;;QAK3C,2EAA2E;;QAE3E,4EAA4E;;;QAI5E,sEAAsE;;;IAGxE,2EAA2E;;;;;;;;;;;;;;QAiBzE,oEAAoE;;;IAGtE,wEAAwE;;;;;;QAOtE,2CAA2C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAkCzC,yDAAyD;;YAGzD,mDAAmD;;YAGnD,8BAA8B;;YAE9B,oDAAoD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA4CtD,6CAA6C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAsI/C,uFAAuF;;;;;;;;;;;;;;;;;;;;;;;;IAwBvF,kFAAkF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAuClF,sEAAsE;;;;;CAO9D,CAAC;AAEX,iEAAiE;AACjE,wBAAgB,mBAAmB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAa5D"}
@@ -300,11 +300,19 @@ export const scanSurfaceCopy = {
300
300
  multiRuntimeHeadline: "Multiple runtime dependency upgrades need review",
301
301
  buildOnlyHeadline: "{package} patch upgrade with limited application impact",
302
302
  runtimeHeadline: "{package} upgrade affects {surface}",
303
+ toolingPatchHeadline: "{package} patch upgrade",
304
+ toolingUpgradeHeadline: "{package} tooling upgrade",
305
+ runtimeUpgradeHeadline: "{package} runtime upgrade affects {surface}",
306
+ safeNeutralHeadline: "{package} dependency upgrade",
303
307
  defaultUpgradeHeadline: "{package} dependency upgrade needs review",
304
308
  changedPackageKeyPoint: "Changed package: {package}",
305
309
  usedInPathsSingle: "Used across application code ({path})",
306
310
  usedInPathsMultiple: "Used across {count} code paths",
307
311
  noRuntimePathsKeyPoint: "No runtime usage paths detected",
312
+ expectedImpactLimitedKeyPoint: "Expected impact is limited to {workflows}",
313
+ limitedEvidenceKeyPoint: "Evidence for this upgrade is limited",
314
+ usedInRuntimePathsKeyPoint: "Used in runtime application paths",
315
+ runtimeUsageKeyPoint: "Used in runtime application paths",
308
316
  blastRadiusWideKeyPoint: "Blast radius is wide",
309
317
  blastRadiusLevelKeyPoint: "Blast radius is {level}",
310
318
  noAffectedAreasKeyPoint: "No affected application areas identified",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mergesignal/shared",
3
- "version": "0.4.1",
3
+ "version": "0.4.2",
4
4
  "description": "MergeSignal shared scan contract, presentation policy, and trusted validation",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",