@skastr0/pulsar-shared-signals 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @skastr0/pulsar-shared-signals — language-agnostic shared pack.
3
+ */
4
+ export declare const SHARED_SIGNALS_VERSION: "0.1.0";
5
+ export { compareRootFirstPackageNames, ROOT_PACKAGE_NAME, sortRootFirstPackages, type NamedPackage, } from "./package-order.js";
6
+ export { Shared02BusFactor, Shared02BusFactorConfig, Shared03ChurnRate, Shared03ChurnRateConfig, SharedChurn01, SharedChurn01Config, } from "@skastr0/pulsar-core/shared-signals";
7
+ export type { BusFactorInfo, Shared02BusFactorOutput, Shared03FileRate, Shared03ChurnRateOutput, SharedChurn01Output, } from "@skastr0/pulsar-core/shared-signals";
8
+ export { SHARED_SIGNALS } from "./pack.js";
9
+ export { Shared05Suppression, Shared05SuppressionConfig, type Shared05SuppressionOutput, } from "./shared-05-suppression.js";
10
+ export { Shared06PrDepDelta, Shared06PrDepDeltaConfig, type Shared06PrDepDeltaOutput, } from "./shared-06-pr-dep-delta.js";
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,sBAAsB,EAAG,OAAgB,CAAA;AAEtD,OAAO,EACL,4BAA4B,EAC5B,iBAAiB,EACjB,qBAAqB,EACrB,KAAK,YAAY,GAClB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,EACjB,uBAAuB,EACvB,aAAa,EACb,mBAAmB,GACpB,MAAM,qCAAqC,CAAA;AAC5C,YAAY,EACV,aAAa,EACb,uBAAuB,EACvB,gBAAgB,EAChB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,qCAAqC,CAAA;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,KAAK,yBAAyB,GAC/B,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,KAAK,wBAAwB,GAC9B,MAAM,6BAA6B,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @skastr0/pulsar-shared-signals — language-agnostic shared pack.
3
+ */
4
+ export const SHARED_SIGNALS_VERSION = "0.1.0";
5
+ export { compareRootFirstPackageNames, ROOT_PACKAGE_NAME, sortRootFirstPackages, } from "./package-order.js";
6
+ export { Shared02BusFactor, Shared02BusFactorConfig, Shared03ChurnRate, Shared03ChurnRateConfig, SharedChurn01, SharedChurn01Config, } from "@skastr0/pulsar-core/shared-signals";
7
+ export { SHARED_SIGNALS } from "./pack.js";
8
+ export { Shared05Suppression, Shared05SuppressionConfig, } from "./shared-05-suppression.js";
9
+ export { Shared06PrDepDelta, Shared06PrDepDeltaConfig, } from "./shared-06-pr-dep-delta.js";
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG,OAAgB,CAAA;AAEtD,OAAO,EACL,4BAA4B,EAC5B,iBAAiB,EACjB,qBAAqB,GAEtB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,EACjB,uBAAuB,EACvB,aAAa,EACb,mBAAmB,GACpB,MAAM,qCAAqC,CAAA;AAQ5C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,EACL,mBAAmB,EACnB,yBAAyB,GAE1B,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,kBAAkB,EAClB,wBAAwB,GAEzB,MAAM,6BAA6B,CAAA"}
package/dist/pack.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ import { type AnySignal } from "@skastr0/pulsar-core/signal";
2
+ export declare const SHARED_SIGNALS: ReadonlyArray<AnySignal>;
3
+ //# sourceMappingURL=pack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack.d.ts","sourceRoot":"","sources":["../src/pack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAqB5D,eAAO,MAAM,cAAc,EAAE,aAAa,CAAC,SAAS,CAOtB,CAAA"}
package/dist/pack.js ADDED
@@ -0,0 +1,20 @@
1
+ import { Shared02BusFactor, Shared03ChurnRate, SharedChurn01, } from "@skastr0/pulsar-core/shared-signals";
2
+ import { withConfigFactorLedger } from "@skastr0/pulsar-core/factors";
3
+ import { Shared05Suppression } from "./shared-05-suppression.js";
4
+ import { Shared06PrDepDelta } from "./shared-06-pr-dep-delta.js";
5
+ const SHARED_PACK_CACHE_VERSION = "shared-pack-2026-05-06-applicability-1";
6
+ const withSharedPackCacheVersion = (signal) => ({
7
+ ...signal,
8
+ cacheVersion: signal.cacheVersion === undefined
9
+ ? SHARED_PACK_CACHE_VERSION
10
+ : `${SHARED_PACK_CACHE_VERSION}:${signal.cacheVersion}`,
11
+ });
12
+ export const SHARED_SIGNALS = [
13
+ SharedChurn01,
14
+ Shared02BusFactor,
15
+ Shared03ChurnRate,
16
+ Shared05Suppression,
17
+ Shared06PrDepDelta,
18
+ ].map(withSharedPackCacheVersion)
19
+ .map(withConfigFactorLedger);
20
+ //# sourceMappingURL=pack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack.js","sourceRoot":"","sources":["../src/pack.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,GACd,MAAM,qCAAqC,CAAA;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAEhE,MAAM,yBAAyB,GAC7B,wCAAwC,CAAA;AAE1C,MAAM,0BAA0B,GAAG,CAAsB,MAAS,EAAK,EAAE,CAAC,CAAC;IACzE,GAAG,MAAM;IACT,YAAY,EACV,MAAM,CAAC,YAAY,KAAK,SAAS;QAC/B,CAAC,CAAC,yBAAyB;QAC3B,CAAC,CAAC,GAAG,yBAAyB,IAAI,MAAM,CAAC,YAAY,EAAE;CAC5D,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,cAAc,GAA6B;IACtD,aAAa;IACb,iBAAiB;IACjB,iBAAiB;IACjB,mBAAmB;IACnB,kBAAkB;CACnB,CAAC,GAAG,CAAC,0BAA0B,CAAC;KAC9B,GAAG,CAAC,sBAAsB,CAAC,CAAA"}
@@ -0,0 +1,7 @@
1
+ export declare const ROOT_PACKAGE_NAME: "(root)";
2
+ export interface NamedPackage {
3
+ readonly name: string;
4
+ }
5
+ export declare const compareRootFirstPackageNames: (left: string, right: string) => number;
6
+ export declare const sortRootFirstPackages: <T extends NamedPackage>(packages: ReadonlyArray<T>) => ReadonlyArray<T>;
7
+ //# sourceMappingURL=package-order.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-order.d.ts","sourceRoot":"","sources":["../src/package-order.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,EAAG,QAAiB,CAAA;AAElD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED,eAAO,MAAM,4BAA4B,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,KAAG,MAI1E,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,CAAC,SAAS,YAAY,EAC1D,UAAU,aAAa,CAAC,CAAC,CAAC,KACzB,aAAa,CAAC,CAAC,CACwE,CAAA"}
@@ -0,0 +1,10 @@
1
+ export const ROOT_PACKAGE_NAME = "(root)";
2
+ export const compareRootFirstPackageNames = (left, right) => {
3
+ if (left === ROOT_PACKAGE_NAME)
4
+ return -1;
5
+ if (right === ROOT_PACKAGE_NAME)
6
+ return 1;
7
+ return left.localeCompare(right);
8
+ };
9
+ export const sortRootFirstPackages = (packages) => [...packages].sort((left, right) => compareRootFirstPackageNames(left.name, right.name));
10
+ //# sourceMappingURL=package-order.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-order.js","sourceRoot":"","sources":["../src/package-order.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAiB,CAAA;AAMlD,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,IAAY,EAAE,KAAa,EAAU,EAAE;IAClF,IAAI,IAAI,KAAK,iBAAiB;QAAE,OAAO,CAAC,CAAC,CAAA;IACzC,IAAI,KAAK,KAAK,iBAAiB;QAAE,OAAO,CAAC,CAAA;IACzC,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;AAClC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,QAA0B,EACR,EAAE,CACpB,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,4BAA4B,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA"}
@@ -0,0 +1,25 @@
1
+ import { type Signal } from "@skastr0/pulsar-core/signal";
2
+ import { Schema } from "effect";
3
+ export declare const Shared05SuppressionConfig: Schema.Struct<{
4
+ top_n_diagnostics: typeof Schema.Number;
5
+ }>;
6
+ export type Shared05SuppressionConfig = typeof Shared05SuppressionConfig.Type;
7
+ export interface Shared05SuppressionOutput {
8
+ readonly totalSuppressions: number;
9
+ readonly languageCount: number;
10
+ readonly unjustifiedCount: number;
11
+ readonly missingJustificationCount: number;
12
+ readonly expiredJustificationCount: number;
13
+ readonly byLanguage: {
14
+ readonly typescript?: {
15
+ readonly totalSuppressions: number;
16
+ readonly unjustifiedCount: number;
17
+ };
18
+ readonly rust?: {
19
+ readonly totalSuppressions: number;
20
+ readonly unjustifiedCount: number;
21
+ };
22
+ };
23
+ }
24
+ export declare const Shared05Suppression: Signal<Shared05SuppressionConfig, Shared05SuppressionOutput>;
25
+ //# sourceMappingURL=shared-05-suppression.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-05-suppression.d.ts","sourceRoot":"","sources":["../src/shared-05-suppression.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,MAAM,EACZ,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAEL,MAAM,EACP,MAAM,QAAQ,CAAA;AAEf,eAAO,MAAM,yBAAyB;;EAEpC,CAAA;AACF,MAAM,MAAM,yBAAyB,GAAG,OAAO,yBAAyB,CAAC,IAAI,CAAA;AAe7E,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAA;IAClC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,yBAAyB,EAAE,MAAM,CAAA;IAC1C,QAAQ,CAAC,yBAAyB,EAAE,MAAM,CAAA;IAC1C,QAAQ,CAAC,UAAU,EAAE;QACnB,QAAQ,CAAC,UAAU,CAAC,EAAE;YACpB,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAA;YAClC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;SAClC,CAAA;QACD,QAAQ,CAAC,IAAI,CAAC,EAAE;YACd,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAA;YAClC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;SAClC,CAAA;KACF,CAAA;CACF;AAED,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,yBAAyB,EAAE,yBAAyB,CAoG5F,CAAA"}
@@ -0,0 +1,99 @@
1
+ import { Effect, Schema, } from "effect";
2
+ export const Shared05SuppressionConfig = Schema.Struct({
3
+ top_n_diagnostics: Schema.Number,
4
+ });
5
+ export const Shared05Suppression = {
6
+ id: "SHARED-05-suppression-governance",
7
+ title: "Suppression governance",
8
+ aliases: ["SHARED-05"],
9
+ tier: 1.5,
10
+ category: "generated-slop",
11
+ kind: "compound",
12
+ cacheVersion: "single-language-applicability-v1",
13
+ configSchema: Shared05SuppressionConfig,
14
+ defaultConfig: {
15
+ top_n_diagnostics: 10,
16
+ },
17
+ inputs: [
18
+ { id: "TS-SL-03-suppressions", optional: true },
19
+ { id: "RS-SL-02-suppressions", optional: true },
20
+ ],
21
+ compute: (_config, inputs) => Effect.sync(() => {
22
+ const ts = (inputs.get("TS-SL-03-suppressions") ??
23
+ inputs.get("TS-SL-03"));
24
+ const rs = (inputs.get("RS-SL-02-suppressions") ??
25
+ inputs.get("RS-SL-02"));
26
+ const rustUnjustified = (rs?.missingJustificationCount ?? 0) + (rs?.expiredJustificationCount ?? 0);
27
+ const languageCount = [
28
+ ts !== undefined && ts.suppressions.length > 0,
29
+ rs !== undefined && rs.suppressions.length > 0,
30
+ ].filter(Boolean).length;
31
+ return {
32
+ totalSuppressions: (ts?.suppressions.length ?? 0) + (rs?.suppressions.length ?? 0),
33
+ languageCount,
34
+ unjustifiedCount: (ts?.unjustifiedCount ?? 0) + rustUnjustified,
35
+ missingJustificationCount: (ts?.missingJustificationCount ?? 0) + (rs?.missingJustificationCount ?? 0),
36
+ expiredJustificationCount: (ts?.expiredCount ?? 0) + (rs?.expiredJustificationCount ?? 0),
37
+ byLanguage: {
38
+ ...(ts !== undefined
39
+ ? {
40
+ typescript: {
41
+ totalSuppressions: ts.suppressions.length,
42
+ unjustifiedCount: ts.unjustifiedCount,
43
+ },
44
+ }
45
+ : {}),
46
+ ...(rs !== undefined
47
+ ? {
48
+ rust: {
49
+ totalSuppressions: rs.suppressions.length,
50
+ unjustifiedCount: rustUnjustified,
51
+ },
52
+ }
53
+ : {}),
54
+ },
55
+ };
56
+ }),
57
+ score: (out) => {
58
+ if (out.languageCount < 2)
59
+ return 1;
60
+ if (out.totalSuppressions === 0)
61
+ return 1;
62
+ const penalty = out.expiredJustificationCount * 4 +
63
+ out.missingJustificationCount +
64
+ Math.max(0, out.totalSuppressions - out.unjustifiedCount) * 0.25;
65
+ return Math.max(0, 1 - penalty / 100);
66
+ },
67
+ outputMetadata: (out) => out.languageCount < 2
68
+ ? { applicability: "not_applicable" }
69
+ : undefined,
70
+ diagnose: (out) => {
71
+ const diagnostics = [
72
+ {
73
+ severity: out.languageCount >= 2 && out.unjustifiedCount > 0 ? "warn" : "info",
74
+ message: `Suppression governance: ${out.unjustifiedCount} unjustified suppressions across ${out.totalSuppressions} total suppressions`,
75
+ data: {
76
+ totalSuppressions: out.totalSuppressions,
77
+ languageCount: out.languageCount,
78
+ unjustifiedCount: out.unjustifiedCount,
79
+ missingJustificationCount: out.missingJustificationCount,
80
+ expiredJustificationCount: out.expiredJustificationCount,
81
+ },
82
+ },
83
+ ];
84
+ if (out.byLanguage.typescript !== undefined) {
85
+ diagnostics.push({
86
+ severity: out.byLanguage.typescript.unjustifiedCount > 0 ? "warn" : "info",
87
+ message: `TypeScript suppressions: ${out.byLanguage.typescript.unjustifiedCount} unjustified / ${out.byLanguage.typescript.totalSuppressions} total`,
88
+ });
89
+ }
90
+ if (out.byLanguage.rust !== undefined) {
91
+ diagnostics.push({
92
+ severity: out.byLanguage.rust.unjustifiedCount > 0 ? "warn" : "info",
93
+ message: `Rust suppressions: ${out.byLanguage.rust.unjustifiedCount} unjustified / ${out.byLanguage.rust.totalSuppressions} total`,
94
+ });
95
+ }
96
+ return diagnostics;
97
+ },
98
+ };
99
+ //# sourceMappingURL=shared-05-suppression.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-05-suppression.js","sourceRoot":"","sources":["../src/shared-05-suppression.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { type Signal } from "@skastr0/pulsar-core/signal";
2
+ import { Schema } from "effect";
3
+ export declare const Shared06PrDepDeltaConfig: Schema.Struct<{
4
+ top_n_diagnostics: typeof Schema.Number;
5
+ }>;
6
+ export type Shared06PrDepDeltaConfig = typeof Shared06PrDepDeltaConfig.Type;
7
+ export interface Shared06PrDepDeltaOutput {
8
+ readonly totalNewDependencyEdges: number;
9
+ readonly crossBoundaryEdges: number;
10
+ readonly crossPackageEdges: number;
11
+ readonly crossCrateEdges: number;
12
+ readonly linesAdded: number;
13
+ readonly linesDeleted: number;
14
+ readonly byLanguage: {
15
+ readonly typescript?: {
16
+ readonly newDependencyEdges: number;
17
+ readonly linesAdded: number;
18
+ readonly linesDeleted: number;
19
+ };
20
+ readonly rust?: {
21
+ readonly newDependencyEdges: number;
22
+ readonly linesAdded: number;
23
+ readonly linesDeleted: number;
24
+ };
25
+ };
26
+ }
27
+ export declare const Shared06PrDepDelta: Signal<Shared06PrDepDeltaConfig, Shared06PrDepDeltaOutput>;
28
+ //# sourceMappingURL=shared-06-pr-dep-delta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-06-pr-dep-delta.d.ts","sourceRoot":"","sources":["../src/shared-06-pr-dep-delta.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,MAAM,EACZ,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAEL,MAAM,EACP,MAAM,QAAQ,CAAA;AAEf,eAAO,MAAM,wBAAwB;;EAEnC,CAAA;AACF,MAAM,MAAM,wBAAwB,GAAG,OAAO,wBAAwB,CAAC,IAAI,CAAA;AAe3E,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAA;IACxC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;IACnC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAA;IAClC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,UAAU,EAAE;QACnB,QAAQ,CAAC,UAAU,CAAC,EAAE;YACpB,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;YACnC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;YAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;SAC9B,CAAA;QACD,QAAQ,CAAC,IAAI,CAAC,EAAE;YACd,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;YACnC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;YAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;SAC9B,CAAA;KACF,CAAA;CACF;AAED,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,wBAAwB,EAAE,wBAAwB,CA6EzF,CAAA"}
@@ -0,0 +1,79 @@
1
+ import { Effect, Schema, } from "effect";
2
+ export const Shared06PrDepDeltaConfig = Schema.Struct({
3
+ top_n_diagnostics: Schema.Number,
4
+ });
5
+ export const Shared06PrDepDelta = {
6
+ id: "SHARED-06-pr-dependency-delta",
7
+ title: "PR dependency delta",
8
+ aliases: ["SHARED-06"],
9
+ tier: 1.5,
10
+ category: "review-pain",
11
+ kind: "compound",
12
+ cacheVersion: "empty-diff-applicability-v1",
13
+ configSchema: Shared06PrDepDeltaConfig,
14
+ defaultConfig: {
15
+ top_n_diagnostics: 10,
16
+ },
17
+ inputs: [
18
+ { id: "TS-RP-02-pr-size", optional: true },
19
+ { id: "RS-RP-03-pr-size", optional: true },
20
+ ],
21
+ compute: (_config, inputs) => Effect.sync(() => {
22
+ const ts = (inputs.get("TS-RP-02-pr-size") ??
23
+ inputs.get("TS-RP-02"));
24
+ const rs = (inputs.get("RS-RP-03-pr-size") ??
25
+ inputs.get("RS-RP-03"));
26
+ const tsDependencyEdges = (ts?.newCrossPackageEdges.length ?? 0) + (ts?.newCrossBoundaryEdges.length ?? 0);
27
+ const rsDependencyEdges = rs?.newCrossCrateEdges.length ?? 0;
28
+ return {
29
+ totalNewDependencyEdges: tsDependencyEdges + rsDependencyEdges,
30
+ crossBoundaryEdges: ts?.newCrossBoundaryEdges.length ?? 0,
31
+ crossPackageEdges: ts?.newCrossPackageEdges.length ?? 0,
32
+ crossCrateEdges: rs?.newCrossCrateEdges.length ?? 0,
33
+ linesAdded: (ts?.linesAdded ?? 0) + (rs?.linesAdded ?? 0),
34
+ linesDeleted: (ts?.linesDeleted ?? 0) + (rs?.linesDeleted ?? 0),
35
+ byLanguage: {
36
+ ...(ts !== undefined
37
+ ? {
38
+ typescript: {
39
+ newDependencyEdges: tsDependencyEdges,
40
+ linesAdded: ts.linesAdded,
41
+ linesDeleted: ts.linesDeleted,
42
+ },
43
+ }
44
+ : {}),
45
+ ...(rs !== undefined
46
+ ? {
47
+ rust: {
48
+ newDependencyEdges: rsDependencyEdges,
49
+ linesAdded: rs.linesAdded,
50
+ linesDeleted: rs.linesDeleted,
51
+ },
52
+ }
53
+ : {}),
54
+ },
55
+ };
56
+ }),
57
+ score: (out) => {
58
+ if (out.totalNewDependencyEdges === 0)
59
+ return 1;
60
+ const edgePenalty = out.crossBoundaryEdges * 0.2 + out.crossPackageEdges * 0.1 + out.crossCrateEdges * 0.15;
61
+ return Math.max(0, 1 - edgePenalty);
62
+ },
63
+ outputMetadata: (out) => out.totalNewDependencyEdges === 0 && out.linesAdded === 0 && out.linesDeleted === 0
64
+ ? { applicability: "not_applicable" }
65
+ : undefined,
66
+ diagnose: (out) => [
67
+ {
68
+ severity: out.totalNewDependencyEdges > 0 ? "warn" : "info",
69
+ message: `Cross-language PR dependency delta: ${out.totalNewDependencyEdges} new dependency edges (+${out.linesAdded} / -${out.linesDeleted})`,
70
+ data: {
71
+ totalNewDependencyEdges: out.totalNewDependencyEdges,
72
+ crossBoundaryEdges: out.crossBoundaryEdges,
73
+ crossPackageEdges: out.crossPackageEdges,
74
+ crossCrateEdges: out.crossCrateEdges,
75
+ },
76
+ },
77
+ ],
78
+ };
79
+ //# sourceMappingURL=shared-06-pr-dep-delta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-06-pr-dep-delta.js","sourceRoot":"","sources":["../src/shared-06-pr-dep-delta.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "@skastr0/pulsar-shared-signals",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "description": "Language-agnostic shared signals for Pulsar",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/skastr0/pulsar.git",
10
+ "directory": "packages/shared-signals"
11
+ },
12
+ "homepage": "https://github.com/skastr0/pulsar#readme",
13
+ "bugs": {
14
+ "url": "https://github.com/skastr0/pulsar/issues"
15
+ },
16
+ "keywords": [
17
+ "pulsar",
18
+ "signals",
19
+ "repository-health",
20
+ "static-analysis"
21
+ ],
22
+ "publishConfig": {
23
+ "access": "public"
24
+ },
25
+ "main": "./dist/index.js",
26
+ "types": "./dist/index.d.ts",
27
+ "exports": {
28
+ ".": {
29
+ "types": "./dist/index.d.ts",
30
+ "default": "./dist/index.js"
31
+ }
32
+ },
33
+ "files": [
34
+ "dist",
35
+ "!dist/__tests__",
36
+ "!dist/__tests__/**"
37
+ ],
38
+ "scripts": {
39
+ "build": "tsc -b",
40
+ "typecheck": "tsc -b",
41
+ "test": "bun test ./src --pass-with-no-tests",
42
+ "clean": "rm -rf dist tsconfig.tsbuildinfo"
43
+ },
44
+ "dependencies": {
45
+ "@skastr0/pulsar-core": "0.1.0",
46
+ "effect": "^3.0.0"
47
+ },
48
+ "devDependencies": {
49
+ "typescript": "^5.8.0"
50
+ }
51
+ }