@mergesignal/shared 0.4.0 → 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 (76) hide show
  1. package/dist/deriveScanNarrative.d.ts.map +1 -1
  2. package/dist/deriveScanNarrative.js +52 -2
  3. package/dist/deriveScanNarrative.test.js +10 -3
  4. package/dist/fixtures/repoIntelligenceFixtures.d.ts.map +1 -1
  5. package/dist/fixtures/repoIntelligenceFixtures.js +21 -1
  6. package/dist/index.d.ts +1 -0
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +1 -0
  9. package/dist/narrativePresentation.d.ts.map +1 -1
  10. package/dist/narrativePresentation.js +6 -3
  11. package/dist/presentation/compose/narrativeCompose.d.ts.map +1 -1
  12. package/dist/presentation/compose/narrativeCompose.js +15 -101
  13. package/dist/presentation/dto/scanCardPresentation.d.ts +2 -0
  14. package/dist/presentation/dto/scanCardPresentation.d.ts.map +1 -1
  15. package/dist/presentation/dto/scanDetailsPresentation.d.ts +2 -0
  16. package/dist/presentation/dto/scanDetailsPresentation.d.ts.map +1 -1
  17. package/dist/presentation/fixtures/presentationPersonaFixtures.d.ts +11 -0
  18. package/dist/presentation/fixtures/presentationPersonaFixtures.d.ts.map +1 -0
  19. package/dist/presentation/fixtures/presentationPersonaFixtures.js +197 -0
  20. package/dist/presentation/index.d.ts +2 -0
  21. package/dist/presentation/index.d.ts.map +1 -1
  22. package/dist/presentation/index.js +1 -0
  23. package/dist/presentation/intent/applyPostureVocabularyGuard.d.ts +5 -0
  24. package/dist/presentation/intent/applyPostureVocabularyGuard.d.ts.map +1 -0
  25. package/dist/presentation/intent/applyPostureVocabularyGuard.js +44 -0
  26. package/dist/presentation/intent/derivePresentationInterpretation.d.ts +4 -0
  27. package/dist/presentation/intent/derivePresentationInterpretation.d.ts.map +1 -0
  28. package/dist/presentation/intent/derivePresentationInterpretation.js +202 -0
  29. package/dist/presentation/intent/formatPresentationCopy.d.ts +7 -0
  30. package/dist/presentation/intent/formatPresentationCopy.d.ts.map +1 -0
  31. package/dist/presentation/intent/formatPresentationCopy.js +153 -0
  32. package/dist/presentation/intent/packageDisplayName.d.ts +4 -0
  33. package/dist/presentation/intent/packageDisplayName.d.ts.map +1 -0
  34. package/dist/presentation/intent/packageDisplayName.js +17 -0
  35. package/dist/presentation/intent/postureVocabularyGuard.test.d.ts +2 -0
  36. package/dist/presentation/intent/postureVocabularyGuard.test.d.ts.map +1 -0
  37. package/dist/presentation/intent/postureVocabularyGuard.test.js +23 -0
  38. package/dist/presentation/intent/presentationIntent.d.ts +14 -0
  39. package/dist/presentation/intent/presentationIntent.d.ts.map +1 -0
  40. package/dist/presentation/intent/presentationIntent.js +1 -0
  41. package/dist/presentation/intent/presentationIntent.test.d.ts +2 -0
  42. package/dist/presentation/intent/presentationIntent.test.d.ts.map +1 -0
  43. package/dist/presentation/intent/presentationIntent.test.js +29 -0
  44. package/dist/presentation/intent/verificationFocusLabels.d.ts +2 -0
  45. package/dist/presentation/intent/verificationFocusLabels.d.ts.map +1 -0
  46. package/dist/presentation/intent/verificationFocusLabels.js +45 -0
  47. package/dist/presentation/presentation.test.js +3 -0
  48. package/dist/presentation/presentationPersonas.test.d.ts +2 -0
  49. package/dist/presentation/presentationPersonas.test.d.ts.map +1 -0
  50. package/dist/presentation/presentationPersonas.test.js +166 -0
  51. package/dist/presentation/presenters/presentScanCard.d.ts.map +1 -1
  52. package/dist/presentation/presenters/presentScanCard.js +1 -0
  53. package/dist/presentation/presenters/presentScanDetails.d.ts.map +1 -1
  54. package/dist/presentation/presenters/presentScanDetails.js +7 -1
  55. package/dist/presentation/profile/derivePresentationProfile.d.ts.map +1 -1
  56. package/dist/presentation/profile/derivePresentationProfile.js +18 -19
  57. package/dist/presentation/profile/presentationProfile.d.ts +2 -0
  58. package/dist/presentation/profile/presentationProfile.d.ts.map +1 -1
  59. package/dist/repoIntelligenceMappers.d.ts.map +1 -1
  60. package/dist/repoIntelligenceMappers.js +8 -1
  61. package/dist/repoIntelligenceSchema.d.ts +75 -1
  62. package/dist/repoIntelligenceSchema.d.ts.map +1 -1
  63. package/dist/repoIntelligenceSchema.js +74 -1
  64. package/dist/repoIntelligenceSemantics.d.ts +29 -0
  65. package/dist/repoIntelligenceSemantics.d.ts.map +1 -0
  66. package/dist/repoIntelligenceSemantics.js +146 -0
  67. package/dist/repoIntelligenceSemantics.test.d.ts +2 -0
  68. package/dist/repoIntelligenceSemantics.test.d.ts.map +1 -0
  69. package/dist/repoIntelligenceSemantics.test.js +63 -0
  70. package/dist/scanNarrativeFacts.d.ts +31 -0
  71. package/dist/scanNarrativeFacts.d.ts.map +1 -1
  72. package/dist/scanNarrativeFacts.js +2 -0
  73. package/dist/scanSurfaceCopy.d.ts +8 -0
  74. package/dist/scanSurfaceCopy.d.ts.map +1 -1
  75. package/dist/scanSurfaceCopy.js +8 -0
  76. package/package.json +1 -1
@@ -7,7 +7,7 @@
7
7
  */
8
8
  import { z } from "zod";
9
9
  /** Bump when wire schema changes incompatibly. */
10
- export const REPO_INTELLIGENCE_ABI = "1";
10
+ export const REPO_INTELLIGENCE_ABI = "2";
11
11
  const surfaceKindSchema = z.enum(["runtime", "build", "test", "unknown"]);
12
12
  const reachabilityKindSchema = z.enum([
13
13
  "on_runtime_paths",
@@ -24,11 +24,83 @@ const packageUsageWireSchema = z.object({
24
24
  criticalPaths: z.array(z.string()).optional(),
25
25
  areas: z.array(z.string()).optional(),
26
26
  });
27
+ const dependencyClassSchema = z.enum([
28
+ "runtime",
29
+ "tooling",
30
+ "test",
31
+ "lint",
32
+ "format",
33
+ "build",
34
+ "ci",
35
+ "unknown",
36
+ ]);
37
+ const packageRoleSchema = z.enum([
38
+ "typechecker",
39
+ "compiler",
40
+ "bundler",
41
+ "linter",
42
+ "formatter",
43
+ "test_runner",
44
+ "http_framework",
45
+ "auth",
46
+ "queue",
47
+ "orm",
48
+ "unknown",
49
+ ]);
50
+ const lockfileKindSchema = z.enum([
51
+ "production",
52
+ "development",
53
+ "optional",
54
+ "unknown",
55
+ ]);
56
+ const runtimeImpactSchema = z.enum([
57
+ "none",
58
+ "possible",
59
+ "confirmed",
60
+ "unknown",
61
+ ]);
62
+ const expectedImpactSchema = z.enum([
63
+ "runtime",
64
+ "build_time",
65
+ "typecheck",
66
+ "test_time",
67
+ "development_only",
68
+ "unknown",
69
+ ]);
70
+ const evidenceStrengthSchema = z.enum(["high", "medium", "low"]);
71
+ const classificationProvenanceSchema = z.object({
72
+ dependencyClass: z.enum([
73
+ "registry",
74
+ "graph",
75
+ "lockfile",
76
+ "heuristic",
77
+ "unknown",
78
+ ]),
79
+ packageRole: z.enum(["registry", "graph", "heuristic", "unknown"]),
80
+ registryEntryId: z.string().optional(),
81
+ });
82
+ const semanticDiagnosticSchema = z.object({
83
+ packageName: z.string().min(1),
84
+ ruleId: z.string().min(1),
85
+ before: z.record(z.string(), z.unknown()),
86
+ after: z.record(z.string(), z.unknown()),
87
+ reason: z.string().min(1),
88
+ });
27
89
  const packageIntelWireSchema = z.object({
28
90
  runtimeSurface: surfaceKindSchema,
29
91
  reachability: reachabilityKindSchema,
30
92
  usage: packageUsageWireSchema,
31
93
  areas: z.array(z.string()).optional(),
94
+ dependencyClass: dependencyClassSchema.optional(),
95
+ packageRole: packageRoleSchema.optional(),
96
+ lockfileKind: lockfileKindSchema.optional(),
97
+ runtimeImpact: runtimeImpactSchema.optional(),
98
+ expectedImpact: expectedImpactSchema.optional(),
99
+ evidenceStrength: evidenceStrengthSchema.optional(),
100
+ confidenceReason: z.string().optional(),
101
+ verificationFocus: z.array(z.string()).optional(),
102
+ suppressRuntimeNarrative: z.boolean().optional(),
103
+ classificationProvenance: classificationProvenanceSchema.optional(),
32
104
  });
33
105
  const areaSchema = z.object({
34
106
  id: z.string().min(1),
@@ -54,6 +126,7 @@ export const repoIntelligenceWireSchema = z.object({
54
126
  affectedAreas: z.array(areaSchema).optional(),
55
127
  hotspots: z.array(hotspotWireSchema).optional(),
56
128
  frameworks: z.array(z.string().min(1)).optional(),
129
+ semanticDiagnostics: z.array(semanticDiagnosticSchema).optional(),
57
130
  });
58
131
  function formatZodIssues(error) {
59
132
  return error.issues.map((i) => `${i.path.join(".") || "(root)"}: ${i.message}`);
@@ -0,0 +1,29 @@
1
+ import type { RepoIntelligence } from "./repoIntelligenceSchema.js";
2
+ export type DependencyClass = "runtime" | "tooling" | "test" | "lint" | "format" | "build" | "ci" | "unknown";
3
+ export type PackageRole = "typechecker" | "compiler" | "bundler" | "linter" | "formatter" | "test_runner" | "http_framework" | "auth" | "queue" | "orm" | "unknown";
4
+ export type LockfileKind = "production" | "development" | "optional" | "unknown";
5
+ export type RuntimeImpact = "none" | "possible" | "confirmed" | "unknown";
6
+ export type ExpectedImpact = "runtime" | "build_time" | "typecheck" | "test_time" | "development_only" | "unknown";
7
+ export type EvidenceStrength = "high" | "medium" | "low";
8
+ export type ClassificationSource = "registry" | "graph" | "lockfile" | "heuristic" | "unknown";
9
+ export type SemanticDiagnostic = {
10
+ packageName: string;
11
+ ruleId: string;
12
+ before: Record<string, unknown>;
13
+ after: Record<string, unknown>;
14
+ reason: string;
15
+ };
16
+ export type SanitizeRepoIntelligenceResult = {
17
+ wire: RepoIntelligence;
18
+ diagnostics: SemanticDiagnostic[];
19
+ degradedPackages: string[];
20
+ };
21
+ type PackageRow = RepoIntelligence["packages"][string];
22
+ /**
23
+ * Hard gate: normalize contradictory package intelligence before wire emit.
24
+ */
25
+ export declare function sanitizeRepoIntelligenceSemantics(draft: RepoIntelligence): SanitizeRepoIntelligenceResult;
26
+ /** Returns true when wire is safe for runtime narrative tier1. */
27
+ export declare function isRuntimeNarrativeSafe(row: PackageRow | undefined): boolean;
28
+ export {};
29
+ //# sourceMappingURL=repoIntelligenceSemantics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repoIntelligenceSemantics.d.ts","sourceRoot":"","sources":["../src/repoIntelligenceSemantics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAEpE,MAAM,MAAM,eAAe,GACvB,SAAS,GACT,SAAS,GACT,MAAM,GACN,MAAM,GACN,QAAQ,GACR,OAAO,GACP,IAAI,GACJ,SAAS,CAAC;AAEd,MAAM,MAAM,WAAW,GACnB,aAAa,GACb,UAAU,GACV,SAAS,GACT,QAAQ,GACR,WAAW,GACX,aAAa,GACb,gBAAgB,GAChB,MAAM,GACN,OAAO,GACP,KAAK,GACL,SAAS,CAAC;AAEd,MAAM,MAAM,YAAY,GACpB,YAAY,GACZ,aAAa,GACb,UAAU,GACV,SAAS,CAAC;AAEd,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;AAE1E,MAAM,MAAM,cAAc,GACtB,SAAS,GACT,YAAY,GACZ,WAAW,GACX,WAAW,GACX,kBAAkB,GAClB,SAAS,CAAC;AAEd,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEzD,MAAM,MAAM,oBAAoB,GAC5B,UAAU,GACV,OAAO,GACP,UAAU,GACV,WAAW,GACX,SAAS,CAAC;AAEd,MAAM,MAAM,kBAAkB,GAAG;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IAC3C,IAAI,EAAE,gBAAgB,CAAC;IACvB,WAAW,EAAE,kBAAkB,EAAE,CAAC;IAClC,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B,CAAC;AAyBF,KAAK,UAAU,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AA+IvD;;GAEG;AACH,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,gBAAgB,GACtB,8BAA8B,CAoBhC;AAED,kEAAkE;AAClE,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,UAAU,GAAG,SAAS,GAAG,OAAO,CAa3E"}
@@ -0,0 +1,146 @@
1
+ const TOOLING_CLASSES = new Set([
2
+ "tooling",
3
+ "test",
4
+ "lint",
5
+ "format",
6
+ "build",
7
+ "ci",
8
+ ]);
9
+ const RUNTIME_VERIFICATION = new Set([
10
+ "auth_flow",
11
+ "route_handlers",
12
+ "routes",
13
+ "handlers",
14
+ "serialization",
15
+ "hooks",
16
+ "plugins",
17
+ "session",
18
+ "auth",
19
+ "queue",
20
+ "workers",
21
+ ]);
22
+ function cloneWire(wire) {
23
+ return structuredClone(wire);
24
+ }
25
+ function isToolingClass(dc) {
26
+ return dc != null && TOOLING_CLASSES.has(dc);
27
+ }
28
+ function stripRuntimeVerification(focus) {
29
+ if (!focus?.length)
30
+ return [];
31
+ return focus.filter((f) => !RUNTIME_VERIFICATION.has(f));
32
+ }
33
+ function applyS1(row) {
34
+ return row.runtimeSurface === "runtime" && row.reachability === "unreachable";
35
+ }
36
+ function applyS2(row) {
37
+ return (row.runtimeImpact === "none" && row.reachability === "on_runtime_paths");
38
+ }
39
+ function applyS3(row) {
40
+ return (isToolingClass(row.dependencyClass) && row.runtimeImpact === "confirmed");
41
+ }
42
+ function applyS4(row) {
43
+ return (row.runtimeImpact === "confirmed" && (row.usage?.files?.length ?? 0) === 0);
44
+ }
45
+ function applyS5(row) {
46
+ if (!row.suppressRuntimeNarrative)
47
+ return false;
48
+ const focus = row.verificationFocus ?? [];
49
+ return focus.some((f) => RUNTIME_VERIFICATION.has(f));
50
+ }
51
+ function sanitizePackageRow(packageName, row) {
52
+ const diagnostics = [];
53
+ let degraded = false;
54
+ const next = { ...row };
55
+ const record = (ruleId, before, after, reason) => {
56
+ diagnostics.push({ packageName, ruleId, before, after, reason });
57
+ degraded = true;
58
+ };
59
+ if (applyS1(next)) {
60
+ const before = {
61
+ runtimeSurface: next.runtimeSurface,
62
+ reachability: next.reachability,
63
+ };
64
+ next.runtimeSurface = "build";
65
+ next.reachability = "build_only";
66
+ next.runtimeImpact = next.runtimeImpact ?? "none";
67
+ next.suppressRuntimeNarrative = true;
68
+ record("S1", before, { runtimeSurface: next.runtimeSurface, reachability: next.reachability }, "runtime_surface_unreachable");
69
+ }
70
+ if (applyS3(next)) {
71
+ const before = { runtimeImpact: next.runtimeImpact };
72
+ next.runtimeImpact = "none";
73
+ next.suppressRuntimeNarrative = true;
74
+ record("S3", before, { runtimeImpact: next.runtimeImpact }, "tooling_confirmed_without_proof");
75
+ }
76
+ if (applyS4(next)) {
77
+ const before = { runtimeImpact: next.runtimeImpact };
78
+ next.runtimeImpact = "none";
79
+ next.evidenceStrength = "low";
80
+ next.suppressRuntimeNarrative = true;
81
+ record("S4", before, { runtimeImpact: next.runtimeImpact }, "confirmed_without_imports");
82
+ }
83
+ if (applyS2(next)) {
84
+ const before = { reachability: next.reachability };
85
+ next.reachability = "unknown";
86
+ record("S2", before, { reachability: next.reachability }, "none_but_on_runtime_paths");
87
+ }
88
+ if (applyS5(next)) {
89
+ const before = { verificationFocus: next.verificationFocus };
90
+ next.verificationFocus = stripRuntimeVerification(next.verificationFocus);
91
+ record("S5", before, { verificationFocus: next.verificationFocus }, "runtime_focus_while_suppressed");
92
+ }
93
+ if (next.runtimeSurface === "runtime" &&
94
+ next.reachability === "unreachable") {
95
+ next.runtimeSurface = "unknown";
96
+ next.reachability = "unknown";
97
+ next.suppressRuntimeNarrative = true;
98
+ degraded = true;
99
+ }
100
+ if (next.suppressRuntimeNarrative && next.runtimeImpact === "confirmed") {
101
+ next.runtimeImpact = "unknown";
102
+ degraded = true;
103
+ }
104
+ return { row: next, diagnostics, degraded };
105
+ }
106
+ /**
107
+ * Hard gate: normalize contradictory package intelligence before wire emit.
108
+ */
109
+ export function sanitizeRepoIntelligenceSemantics(draft) {
110
+ const wire = cloneWire(draft);
111
+ const diagnostics = [];
112
+ const degradedPackages = [];
113
+ for (const [packageName, row] of Object.entries(wire.packages)) {
114
+ const result = sanitizePackageRow(packageName, row);
115
+ wire.packages[packageName] = result.row;
116
+ diagnostics.push(...result.diagnostics);
117
+ if (result.degraded)
118
+ degradedPackages.push(packageName);
119
+ }
120
+ if (diagnostics.length > 0) {
121
+ wire.semanticDiagnostics = [
122
+ ...(wire.semanticDiagnostics ?? []),
123
+ ...diagnostics,
124
+ ];
125
+ }
126
+ return { wire, diagnostics, degradedPackages };
127
+ }
128
+ /** Returns true when wire is safe for runtime narrative tier1. */
129
+ export function isRuntimeNarrativeSafe(row) {
130
+ if (!row)
131
+ return false;
132
+ if (row.suppressRuntimeNarrative === true)
133
+ return false;
134
+ if (row.runtimeImpact === "none")
135
+ return false;
136
+ if (row.runtimeSurface === "runtime" && row.reachability === "unreachable") {
137
+ return false;
138
+ }
139
+ if (row.runtimeImpact === "confirmed" || row.runtimeImpact === "possible") {
140
+ return true;
141
+ }
142
+ if (row.runtimeImpact === "unknown")
143
+ return false;
144
+ // ABI 1 wire without semantic fields: allow non-contradictory surface/reach pairs.
145
+ return row.runtimeSurface != null && row.reachability != null;
146
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=repoIntelligenceSemantics.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repoIntelligenceSemantics.test.d.ts","sourceRoot":"","sources":["../src/repoIntelligenceSemantics.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,63 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { isRuntimeNarrativeSafe, sanitizeRepoIntelligenceSemantics, } from "./repoIntelligenceSemantics.js";
3
+ function basePkg(overrides = {}) {
4
+ return {
5
+ runtimeSurface: "runtime",
6
+ reachability: "unreachable",
7
+ usage: { packageName: "typescript", files: [] },
8
+ ...overrides,
9
+ };
10
+ }
11
+ describe("sanitizeRepoIntelligenceSemantics", () => {
12
+ it("S1: neutralizes runtime + unreachable", () => {
13
+ const draft = {
14
+ packages: {
15
+ typescript: basePkg({
16
+ runtimeImpact: "unknown",
17
+ }),
18
+ },
19
+ };
20
+ const { wire, diagnostics } = sanitizeRepoIntelligenceSemantics(draft);
21
+ expect(wire.packages.typescript?.runtimeSurface).not.toBe("runtime");
22
+ expect(wire.packages.typescript?.reachability).not.toBe("unreachable");
23
+ expect(wire.packages.typescript?.suppressRuntimeNarrative).toBe(true);
24
+ expect(diagnostics.some((d) => d.ruleId === "S1")).toBe(true);
25
+ });
26
+ it("S3: tooling class cannot stay confirmed", () => {
27
+ const draft = {
28
+ packages: {
29
+ typescript: basePkg({
30
+ dependencyClass: "tooling",
31
+ runtimeImpact: "confirmed",
32
+ runtimeSurface: "build",
33
+ reachability: "build_only",
34
+ }),
35
+ },
36
+ };
37
+ const { wire } = sanitizeRepoIntelligenceSemantics(draft);
38
+ expect(wire.packages.typescript?.runtimeImpact).toBe("none");
39
+ });
40
+ it("S4: confirmed without imports downgrades", () => {
41
+ const draft = {
42
+ packages: {
43
+ fastify: basePkg({
44
+ runtimeImpact: "confirmed",
45
+ usage: { packageName: "fastify", files: [] },
46
+ }),
47
+ },
48
+ };
49
+ const { wire } = sanitizeRepoIntelligenceSemantics(draft);
50
+ expect(wire.packages.fastify?.runtimeImpact).toBe("none");
51
+ });
52
+ });
53
+ describe("isRuntimeNarrativeSafe", () => {
54
+ it("returns false for suppressed runtime narrative", () => {
55
+ expect(isRuntimeNarrativeSafe({
56
+ runtimeSurface: "runtime",
57
+ reachability: "on_runtime_paths",
58
+ usage: { packageName: "x", files: ["src/a.ts"] },
59
+ suppressRuntimeNarrative: true,
60
+ runtimeImpact: "none",
61
+ })).toBe(false);
62
+ });
63
+ });
@@ -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,6 +74,10 @@ export type ScanNarrativeFacts = {
47
74
  frameworks: string[];
48
75
  };
49
76
  } | 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[];
50
81
  blastRadius: {
51
82
  level: BlastRadiusLevel;
52
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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"}
@@ -10,6 +10,8 @@ export const EMPTY_SCAN_NARRATIVE_FACTS = {
10
10
  frameworks: [],
11
11
  runtimeSurface: null,
12
12
  reachability: null,
13
+ packageSemantics: null,
14
+ changedPackageSemantics: [],
13
15
  blastRadius: null,
14
16
  affectedAreas: [],
15
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.0",
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",