@mergesignal/shared 0.12.3 → 0.14.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 (178) hide show
  1. package/dist/assessment/authoredCommunication.d.ts +30 -0
  2. package/dist/assessment/authoredCommunication.d.ts.map +1 -0
  3. package/dist/assessment/authoredCommunication.js +18 -0
  4. package/dist/assessment/index.d.ts +6 -0
  5. package/dist/assessment/index.d.ts.map +1 -0
  6. package/dist/assessment/index.js +5 -0
  7. package/dist/assessment/literals.d.ts +44 -0
  8. package/dist/assessment/literals.d.ts.map +1 -0
  9. package/dist/assessment/literals.js +140 -0
  10. package/dist/assessment/schema.d.ts +311 -0
  11. package/dist/assessment/schema.d.ts.map +1 -0
  12. package/dist/assessment/schema.js +162 -0
  13. package/dist/assessment/types.d.ts +197 -0
  14. package/dist/assessment/types.d.ts.map +1 -0
  15. package/dist/assessment/types.js +1 -0
  16. package/dist/assessment/version.d.ts +11 -0
  17. package/dist/assessment/version.d.ts.map +1 -0
  18. package/dist/assessment/version.js +9 -0
  19. package/dist/assessmentLabels.d.ts +1 -1
  20. package/dist/assessmentLabels.d.ts.map +1 -1
  21. package/dist/assessmentLabels.js +2 -2
  22. package/dist/assessmentPresentationUtils.d.ts +1 -1
  23. package/dist/assessmentPresentationUtils.d.ts.map +1 -1
  24. package/dist/assessmentProjection.d.ts +1 -1
  25. package/dist/assessmentProjection.d.ts.map +1 -1
  26. package/dist/assessmentProjection.js +2 -2
  27. package/dist/deriveScanNarrative.d.ts.map +1 -1
  28. package/dist/deriveScanNarrative.js +2 -1
  29. package/dist/fixtures/assessmentFixtures.d.ts +1 -1
  30. package/dist/fixtures/assessmentFixtures.js +12 -12
  31. package/dist/fixtures/assessmentScopeFixtures.d.ts +1 -1
  32. package/dist/index.d.ts +2 -0
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +2 -0
  35. package/dist/lockfileEvidence.d.ts +22 -0
  36. package/dist/lockfileEvidence.d.ts.map +1 -0
  37. package/dist/lockfileEvidence.js +32 -0
  38. package/dist/presentation/dto/assessmentPresentationFields.d.ts +1 -1
  39. package/dist/presentation/dto/assessmentPresentationFields.d.ts.map +1 -1
  40. package/dist/presentation/orchestration/buildScanPresentationBundle.d.ts.map +1 -1
  41. package/dist/presentation/orchestration/buildScanPresentationBundle.js +2 -1
  42. package/dist/presentation/orchestration/scanPresentationBundle.d.ts +2 -1
  43. package/dist/presentation/orchestration/scanPresentationBundle.d.ts.map +1 -1
  44. package/dist/presentation/profile/buildProfileFromAssessment.d.ts +1 -1
  45. package/dist/presentation/profile/buildProfileFromAssessment.d.ts.map +1 -1
  46. package/dist/presentation/profile/buildProfileFromAssessment.js +14 -6
  47. package/dist/repoIntelligenceSchema.d.ts +5 -5
  48. package/dist/scanResultSchema.d.ts +8 -8
  49. package/dist/scanResultSchema.js +1 -1
  50. package/dist/scanSurfaceCopy.d.ts +1 -0
  51. package/dist/scanSurfaceCopy.d.ts.map +1 -1
  52. package/dist/scanSurfaceCopy.js +1 -0
  53. package/dist/types.d.ts +6 -2
  54. package/dist/types.d.ts.map +1 -1
  55. package/package.json +2 -3
  56. package/dist/actionsStepSummary.test.d.ts +0 -2
  57. package/dist/actionsStepSummary.test.d.ts.map +0 -1
  58. package/dist/actionsStepSummary.test.js +0 -53
  59. package/dist/assessmentProjection.verificationChannel.test.d.ts +0 -2
  60. package/dist/assessmentProjection.verificationChannel.test.d.ts.map +0 -1
  61. package/dist/assessmentProjection.verificationChannel.test.js +0 -110
  62. package/dist/deriveScanNarrative.test.d.ts +0 -2
  63. package/dist/deriveScanNarrative.test.d.ts.map +0 -1
  64. package/dist/deriveScanNarrative.test.js +0 -274
  65. package/dist/engineWireRegression.test.d.ts +0 -2
  66. package/dist/engineWireRegression.test.d.ts.map +0 -1
  67. package/dist/engineWireRegression.test.js +0 -77
  68. package/dist/fixtures/engineAbi4Fixtures.d.ts +0 -16
  69. package/dist/fixtures/engineAbi4Fixtures.d.ts.map +0 -1
  70. package/dist/fixtures/engineAbi4Fixtures.js +0 -26
  71. package/dist/fixtures/legacyEngineRepoIntelligence.d.ts +0 -28
  72. package/dist/fixtures/legacyEngineRepoIntelligence.d.ts.map +0 -1
  73. package/dist/fixtures/legacyEngineRepoIntelligence.js +0 -28
  74. package/dist/fixtures/repoIntelligenceFixtures.d.ts +0 -8
  75. package/dist/fixtures/repoIntelligenceFixtures.d.ts.map +0 -1
  76. package/dist/fixtures/repoIntelligenceFixtures.js +0 -123
  77. package/dist/fixtures/repoIntelligenceTestHelpers.d.ts +0 -5
  78. package/dist/fixtures/repoIntelligenceTestHelpers.d.ts.map +0 -1
  79. package/dist/fixtures/repoIntelligenceTestHelpers.js +0 -28
  80. package/dist/formatInsight.test.d.ts +0 -2
  81. package/dist/formatInsight.test.d.ts.map +0 -1
  82. package/dist/formatInsight.test.js +0 -102
  83. package/dist/narrativeParity.test.d.ts +0 -2
  84. package/dist/narrativeParity.test.d.ts.map +0 -1
  85. package/dist/narrativeParity.test.js +0 -35
  86. package/dist/narrativePresentation.test.d.ts +0 -2
  87. package/dist/narrativePresentation.test.d.ts.map +0 -1
  88. package/dist/narrativePresentation.test.js +0 -54
  89. package/dist/normalizeGeneratedText.test.d.ts +0 -2
  90. package/dist/normalizeGeneratedText.test.d.ts.map +0 -1
  91. package/dist/normalizeGeneratedText.test.js +0 -18
  92. package/dist/prRiskBand.test.d.ts +0 -2
  93. package/dist/prRiskBand.test.d.ts.map +0 -1
  94. package/dist/prRiskBand.test.js +0 -68
  95. package/dist/prRiskWire.test.d.ts +0 -2
  96. package/dist/prRiskWire.test.d.ts.map +0 -1
  97. package/dist/prRiskWire.test.js +0 -106
  98. package/dist/prRiskWiringRegression.test.d.ts +0 -2
  99. package/dist/prRiskWiringRegression.test.d.ts.map +0 -1
  100. package/dist/prRiskWiringRegression.test.js +0 -102
  101. package/dist/presentation/abi3Expression.test.d.ts +0 -13
  102. package/dist/presentation/abi3Expression.test.d.ts.map +0 -1
  103. package/dist/presentation/abi3Expression.test.js +0 -392
  104. package/dist/presentation/buildGitHubCheckRunOutput.test.d.ts +0 -2
  105. package/dist/presentation/buildGitHubCheckRunOutput.test.d.ts.map +0 -1
  106. package/dist/presentation/buildGitHubCheckRunOutput.test.js +0 -163
  107. package/dist/presentation/bundleAccessorParity.test.d.ts +0 -9
  108. package/dist/presentation/bundleAccessorParity.test.d.ts.map +0 -1
  109. package/dist/presentation/bundleAccessorParity.test.js +0 -126
  110. package/dist/presentation/cliParity.test.d.ts +0 -2
  111. package/dist/presentation/cliParity.test.d.ts.map +0 -1
  112. package/dist/presentation/cliParity.test.js +0 -49
  113. package/dist/presentation/compose/narrativeChannels.test.d.ts +0 -2
  114. package/dist/presentation/compose/narrativeChannels.test.d.ts.map +0 -1
  115. package/dist/presentation/compose/narrativeChannels.test.js +0 -42
  116. package/dist/presentation/decisionSurface.test.d.ts +0 -2
  117. package/dist/presentation/decisionSurface.test.d.ts.map +0 -1
  118. package/dist/presentation/decisionSurface.test.js +0 -290
  119. package/dist/presentation/fixtures/dashboardCardGolden.test.d.ts +0 -2
  120. package/dist/presentation/fixtures/dashboardCardGolden.test.d.ts.map +0 -1
  121. package/dist/presentation/fixtures/dashboardCardGolden.test.js +0 -38
  122. package/dist/presentation/fixtures/presentationPersonaFixtures.d.ts +0 -11
  123. package/dist/presentation/fixtures/presentationPersonaFixtures.d.ts.map +0 -1
  124. package/dist/presentation/fixtures/presentationPersonaFixtures.js +0 -208
  125. package/dist/presentation/fixtures/scanResultFixtures.d.ts +0 -5
  126. package/dist/presentation/fixtures/scanResultFixtures.d.ts.map +0 -1
  127. package/dist/presentation/fixtures/scanResultFixtures.js +0 -123
  128. package/dist/presentation/intent/postureVocabularyGuard.test.d.ts +0 -2
  129. package/dist/presentation/intent/postureVocabularyGuard.test.d.ts.map +0 -1
  130. package/dist/presentation/intent/postureVocabularyGuard.test.js +0 -23
  131. package/dist/presentation/orchestration/buildScanPresentationBundle.test.d.ts +0 -2
  132. package/dist/presentation/orchestration/buildScanPresentationBundle.test.d.ts.map +0 -1
  133. package/dist/presentation/orchestration/buildScanPresentationBundle.test.js +0 -99
  134. package/dist/presentation/presentation.test.d.ts +0 -2
  135. package/dist/presentation/presentation.test.d.ts.map +0 -1
  136. package/dist/presentation/presentation.test.js +0 -126
  137. package/dist/presentation/presentationPersonas.test.d.ts +0 -2
  138. package/dist/presentation/presentationPersonas.test.d.ts.map +0 -1
  139. package/dist/presentation/presentationPersonas.test.js +0 -164
  140. package/dist/presentation/surfaceParity.test.d.ts +0 -2
  141. package/dist/presentation/surfaceParity.test.d.ts.map +0 -1
  142. package/dist/presentation/surfaceParity.test.js +0 -156
  143. package/dist/presentation/verificationChannelParity.test.d.ts +0 -2
  144. package/dist/presentation/verificationChannelParity.test.d.ts.map +0 -1
  145. package/dist/presentation/verificationChannelParity.test.js +0 -57
  146. package/dist/productMessaging.test.d.ts +0 -2
  147. package/dist/productMessaging.test.d.ts.map +0 -1
  148. package/dist/productMessaging.test.js +0 -97
  149. package/dist/repoIntelligenceSchema.contract.test.d.ts +0 -2
  150. package/dist/repoIntelligenceSchema.contract.test.d.ts.map +0 -1
  151. package/dist/repoIntelligenceSchema.contract.test.js +0 -51
  152. package/dist/repoIntelligenceSemantics.test.d.ts +0 -2
  153. package/dist/repoIntelligenceSemantics.test.d.ts.map +0 -1
  154. package/dist/repoIntelligenceSemantics.test.js +0 -63
  155. package/dist/repoIntelligenceValidation.persist.test.d.ts +0 -2
  156. package/dist/repoIntelligenceValidation.persist.test.d.ts.map +0 -1
  157. package/dist/repoIntelligenceValidation.persist.test.js +0 -44
  158. package/dist/riskSignals.test.d.ts +0 -2
  159. package/dist/riskSignals.test.d.ts.map +0 -1
  160. package/dist/riskSignals.test.js +0 -32
  161. package/dist/riskVocabulary.test.d.ts +0 -2
  162. package/dist/riskVocabulary.test.d.ts.map +0 -1
  163. package/dist/riskVocabulary.test.js +0 -14
  164. package/dist/scanPresentationBundle.golden.test.d.ts +0 -2
  165. package/dist/scanPresentationBundle.golden.test.d.ts.map +0 -1
  166. package/dist/scanPresentationBundle.golden.test.js +0 -78
  167. package/dist/scanResultSchema.test.d.ts +0 -2
  168. package/dist/scanResultSchema.test.d.ts.map +0 -1
  169. package/dist/scanResultSchema.test.js +0 -162
  170. package/dist/scanSurfaceCopy.test.d.ts +0 -2
  171. package/dist/scanSurfaceCopy.test.d.ts.map +0 -1
  172. package/dist/scanSurfaceCopy.test.js +0 -14
  173. package/dist/selectTopAffectedAreas.test.d.ts +0 -2
  174. package/dist/selectTopAffectedAreas.test.d.ts.map +0 -1
  175. package/dist/selectTopAffectedAreas.test.js +0 -179
  176. package/dist/trustedScanGuards.test.d.ts +0 -2
  177. package/dist/trustedScanGuards.test.d.ts.map +0 -1
  178. package/dist/trustedScanGuards.test.js +0 -151
@@ -1,151 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach } from "vitest";
2
- import { assertTrustedActionsSummaryAllowed, assertTrustedScanResult, auditTrustedActionsOutput, isStubMethodologyVersion, trustedActionsSummaryDenylistPhrases, validateTrustedEngineScanResult, } from "./trustedScanGuards.js";
3
- import { assessmentStub } from "./fixtures/assessmentFixtures.js";
4
- import { withAbi4EngineScores } from "./fixtures/engineAbi4Fixtures.js";
5
- import { scanSurfaceCopy } from "./scanSurfaceCopy.js";
6
- const baseResult = withAbi4EngineScores({
7
- totalScore: 10,
8
- layerScores: {
9
- security: 10,
10
- maintainability: 10,
11
- ecosystem: 10,
12
- upgradeImpact: 10,
13
- },
14
- findings: [],
15
- recommendations: [],
16
- generatedAt: "2026-01-01T00:00:00.000Z",
17
- methodologyVersion: "engine-stub/v2",
18
- assessment: assessmentStub,
19
- decision: {
20
- recommendation: "needs_review",
21
- confidence: "low",
22
- reasoning: ["Stub engine cannot perform real analysis"],
23
- },
24
- });
25
- describe("trustedScanGuards", () => {
26
- it("detects stub methodology", () => {
27
- expect(isStubMethodologyVersion("engine-stub/v2")).toBe(true);
28
- expect(isStubMethodologyVersion("Engine-Stub/v1")).toBe(true);
29
- expect(isStubMethodologyVersion("acme-engine/v1")).toBe(false);
30
- expect(isStubMethodologyVersion(undefined)).toBe(false);
31
- });
32
- it("denylist includes demo copy", () => {
33
- const d = trustedActionsSummaryDenylistPhrases();
34
- expect(d).toContain(scanSurfaceCopy.actions.demoSummaryTitle);
35
- expect(d).toContain(scanSurfaceCopy.actions.demoSummaryBanner);
36
- });
37
- it("assertTrustedActionsSummaryAllowed throws for trusted + stub", () => {
38
- expect(() => assertTrustedActionsSummaryAllowed("trusted", "engine-stub/v2")).toThrow(/verification requirements/);
39
- });
40
- it("assertTrustedActionsSummaryAllowed allows trusted + real methodology", () => {
41
- expect(() => assertTrustedActionsSummaryAllowed("trusted", "acme-prod/v3")).not.toThrow();
42
- });
43
- it("assertTrustedActionsSummaryAllowed ignores non-trusted profile", () => {
44
- expect(() => assertTrustedActionsSummaryAllowed("development", "engine-stub/v2")).not.toThrow();
45
- });
46
- describe("assertTrustedScanResult", () => {
47
- const originalEnv = process.env;
48
- beforeEach(() => {
49
- process.env = { ...originalEnv };
50
- delete process.env.MERGESIGNAL_TRUSTED_METHODOLOGY_PREFIX;
51
- });
52
- afterEach(() => {
53
- process.env = originalEnv;
54
- });
55
- it("rejects stub methodology", () => {
56
- expect(() => assertTrustedScanResult(baseResult)).toThrow(/verification requirements/);
57
- });
58
- it("accepts non-stub methodology", () => {
59
- expect(() => assertTrustedScanResult({
60
- ...baseResult,
61
- methodologyVersion: "engine-test-fixture/v1",
62
- })).not.toThrow();
63
- });
64
- it("enforces methodology prefix when env set", () => {
65
- process.env.MERGESIGNAL_TRUSTED_METHODOLOGY_PREFIX =
66
- "engine-test-fixture/";
67
- expect(() => assertTrustedScanResult({
68
- ...baseResult,
69
- methodologyVersion: "engine-test-fixture/v1",
70
- })).not.toThrow();
71
- expect(() => assertTrustedScanResult({
72
- ...baseResult,
73
- methodologyVersion: "other/v1",
74
- })).toThrow(/methodology output did not match/);
75
- });
76
- });
77
- describe("validateTrustedEngineScanResult", () => {
78
- const originalEnv = process.env;
79
- beforeEach(() => {
80
- process.env = { ...originalEnv };
81
- delete process.env.MERGESIGNAL_TRUSTED_METHODOLOGY_PREFIX;
82
- });
83
- afterEach(() => {
84
- process.env = originalEnv;
85
- });
86
- it("rejects structurally valid relaxed payload without methodologyVersion", () => {
87
- expect(() => validateTrustedEngineScanResult({
88
- totalScore: 10,
89
- layerScores: {
90
- security: 10,
91
- maintainability: 10,
92
- ecosystem: 10,
93
- upgradeImpact: 10,
94
- },
95
- findings: [],
96
- generatedAt: "2026-01-01T00:00:00.000Z",
97
- })).toThrow(/^validation:/);
98
- });
99
- it("returns result when strict schema and trusted policy pass", () => {
100
- const r = validateTrustedEngineScanResult({
101
- ...baseResult,
102
- methodologyVersion: "acme-prod/v2",
103
- });
104
- expect(r.methodologyVersion).toBe("acme-prod/v2");
105
- });
106
- });
107
- describe("auditTrustedActionsOutput", () => {
108
- it("fails when summary contains demo title", () => {
109
- const r = auditTrustedActionsOutput({
110
- summaryText: `Hello ${scanSurfaceCopy.actions.demoSummaryTitle} world`,
111
- scanResult: {
112
- ...baseResult,
113
- methodologyVersion: "acme/v1",
114
- },
115
- });
116
- expect(r.ok).toBe(false);
117
- if (!r.ok)
118
- expect(r.errors.length).toBeGreaterThan(0);
119
- });
120
- it("passes for clean summary and valid methodology", () => {
121
- const r = auditTrustedActionsOutput({
122
- summaryText: "# MergeSignal\n\nLow risk posture.",
123
- scanResult: {
124
- ...baseResult,
125
- methodologyVersion: "acme-prod/v2",
126
- },
127
- });
128
- expect(r).toEqual({ ok: true });
129
- });
130
- it("fails when scan JSON omits methodology (strict engine contract)", () => {
131
- const r = auditTrustedActionsOutput({
132
- summaryText: "# MergeSignal\n\nLow risk posture.",
133
- scanResult: {
134
- totalScore: 10,
135
- layerScores: {
136
- security: 10,
137
- maintainability: 10,
138
- ecosystem: 10,
139
- upgradeImpact: 10,
140
- },
141
- findings: [],
142
- generatedAt: "2026-01-01T00:00:00.000Z",
143
- },
144
- });
145
- expect(r.ok).toBe(false);
146
- if (!r.ok) {
147
- expect(r.errors.some((e) => e.startsWith("validation:"))).toBe(true);
148
- }
149
- });
150
- });
151
- });