@opensip-cli/graph 0.1.11 → 0.1.12
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.
- package/README.md +2 -2
- package/dist/__tests__/cache/engine-version.test.js +4 -4
- package/dist/__tests__/cache/engine-version.test.js.map +1 -1
- package/dist/__tests__/public-api.test.js +10 -0
- package/dist/__tests__/public-api.test.js.map +1 -1
- package/dist/__tests__/rules/registry.test.js +1 -0
- package/dist/__tests__/rules/registry.test.js.map +1 -1
- package/dist/cache/engine-version.d.ts.map +1 -1
- package/dist/cache/engine-version.js +5 -1
- package/dist/cache/engine-version.js.map +1 -1
- package/dist/cli/__tests__/equivalence-diagnostic.test.d.ts +7 -0
- package/dist/cli/__tests__/equivalence-diagnostic.test.d.ts.map +1 -0
- package/dist/cli/__tests__/equivalence-diagnostic.test.js +136 -0
- package/dist/cli/__tests__/equivalence-diagnostic.test.js.map +1 -0
- package/dist/cli/equivalence-check-command.d.ts.map +1 -1
- package/dist/cli/equivalence-check-command.js +35 -2
- package/dist/cli/equivalence-check-command.js.map +1 -1
- package/dist/cli/equivalence-diagnostic.d.ts +100 -0
- package/dist/cli/equivalence-diagnostic.d.ts.map +1 -0
- package/dist/cli/equivalence-diagnostic.js +138 -0
- package/dist/cli/equivalence-diagnostic.js.map +1 -0
- package/dist/cli/graph/graph-command-spec.d.ts.map +1 -1
- package/dist/cli/graph/graph-command-spec.js +3 -0
- package/dist/cli/graph/graph-command-spec.js.map +1 -1
- package/dist/cli/graph-config-schema.d.ts +3 -0
- package/dist/cli/graph-config-schema.d.ts.map +1 -1
- package/dist/cli/graph-config-schema.js +11 -0
- package/dist/cli/graph-config-schema.js.map +1 -1
- package/dist/cli/graph-config.d.ts.map +1 -1
- package/dist/cli/graph-config.js +5 -9
- package/dist/cli/graph-config.js.map +1 -1
- package/dist/cli/graph-envelope-view.d.ts.map +1 -1
- package/dist/cli/graph-envelope-view.js +1 -0
- package/dist/cli/graph-envelope-view.js.map +1 -1
- package/dist/cli/graph-modes.d.ts.map +1 -1
- package/dist/cli/graph-modes.js +6 -3
- package/dist/cli/graph-modes.js.map +1 -1
- package/dist/cli/orchestrate/__tests__/cross-shard-resolve.test.js +76 -0
- package/dist/cli/orchestrate/__tests__/cross-shard-resolve.test.js.map +1 -1
- package/dist/cli/orchestrate/catalog-stats.d.ts.map +1 -1
- package/dist/cli/orchestrate/catalog-stats.js +0 -1
- package/dist/cli/orchestrate/catalog-stats.js.map +1 -1
- package/dist/cli/orchestrate/cross-shard-resolve.d.ts.map +1 -1
- package/dist/cli/orchestrate/cross-shard-resolve.js +77 -2
- package/dist/cli/orchestrate/cross-shard-resolve.js.map +1 -1
- package/dist/cli/orchestrate/flat-monorepo-strategy.d.ts.map +1 -1
- package/dist/cli/orchestrate/flat-monorepo-strategy.js +0 -1
- package/dist/cli/orchestrate/flat-monorepo-strategy.js.map +1 -1
- package/dist/cli/pressure-monitor.d.ts +2 -0
- package/dist/cli/pressure-monitor.d.ts.map +1 -1
- package/dist/cli/pressure-monitor.js +15 -0
- package/dist/cli/pressure-monitor.js.map +1 -1
- package/dist/cli/report-data.d.ts.map +1 -1
- package/dist/cli/report-data.js +0 -1
- package/dist/cli/report-data.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/lang-adapter/__tests__/language-of-file.test.d.ts +2 -0
- package/dist/lang-adapter/__tests__/language-of-file.test.d.ts.map +1 -0
- package/dist/lang-adapter/__tests__/language-of-file.test.js +36 -0
- package/dist/lang-adapter/__tests__/language-of-file.test.js.map +1 -0
- package/dist/lang-adapter/__tests__/near-duplicate-signature.test.d.ts +2 -0
- package/dist/lang-adapter/__tests__/near-duplicate-signature.test.d.ts.map +1 -0
- package/dist/lang-adapter/__tests__/near-duplicate-signature.test.js +78 -0
- package/dist/lang-adapter/__tests__/near-duplicate-signature.test.js.map +1 -0
- package/dist/lang-adapter/body-digest.d.ts +9 -41
- package/dist/lang-adapter/body-digest.d.ts.map +1 -1
- package/dist/lang-adapter/body-digest.js +9 -44
- package/dist/lang-adapter/body-digest.js.map +1 -1
- package/dist/lang-adapter/language-of-file.d.ts +15 -0
- package/dist/lang-adapter/language-of-file.d.ts.map +1 -0
- package/dist/lang-adapter/language-of-file.js +43 -0
- package/dist/lang-adapter/language-of-file.js.map +1 -0
- package/dist/lang-adapter/near-duplicate-signature.d.ts +12 -0
- package/dist/lang-adapter/near-duplicate-signature.d.ts.map +1 -0
- package/dist/lang-adapter/near-duplicate-signature.js +12 -0
- package/dist/lang-adapter/near-duplicate-signature.js.map +1 -0
- package/dist/lang-adapter/read-source.d.ts.map +1 -1
- package/dist/lang-adapter/read-source.js +0 -1
- package/dist/lang-adapter/read-source.js.map +1 -1
- package/dist/lang-adapter/registry.d.ts.map +1 -1
- package/dist/lang-adapter/registry.js +0 -1
- package/dist/lang-adapter/registry.js.map +1 -1
- package/dist/persistence/catalog-repo.d.ts.map +1 -1
- package/dist/persistence/catalog-repo.js +1 -0
- package/dist/persistence/catalog-repo.js.map +1 -1
- package/dist/persistence/session-payload.d.ts.map +1 -1
- package/dist/persistence/session-payload.js +0 -1
- package/dist/persistence/session-payload.js.map +1 -1
- package/dist/persistence/session-replay.d.ts.map +1 -1
- package/dist/persistence/session-replay.js +10 -25
- package/dist/persistence/session-replay.js.map +1 -1
- package/dist/pipeline/feature-deps.d.ts.map +1 -1
- package/dist/pipeline/feature-deps.js +0 -1
- package/dist/pipeline/feature-deps.js.map +1 -1
- package/dist/pipeline/features.d.ts.map +1 -1
- package/dist/pipeline/features.js +0 -1
- package/dist/pipeline/features.js.map +1 -1
- package/dist/pipeline/indexes.d.ts.map +1 -1
- package/dist/pipeline/indexes.js +0 -1
- package/dist/pipeline/indexes.js.map +1 -1
- package/dist/render/rule-id-mapping.d.ts.map +1 -1
- package/dist/render/rule-id-mapping.js +1 -0
- package/dist/render/rule-id-mapping.js.map +1 -1
- package/dist/rules/__tests__/near-duplicate-function-body.test.d.ts +2 -0
- package/dist/rules/__tests__/near-duplicate-function-body.test.d.ts.map +1 -0
- package/dist/rules/__tests__/near-duplicate-function-body.test.js +142 -0
- package/dist/rules/__tests__/near-duplicate-function-body.test.js.map +1 -0
- package/dist/rules/_entry-points.d.ts.map +1 -1
- package/dist/rules/_entry-points.js +0 -1
- package/dist/rules/_entry-points.js.map +1 -1
- package/dist/rules/duplicated-function-body.d.ts +12 -34
- package/dist/rules/duplicated-function-body.d.ts.map +1 -1
- package/dist/rules/duplicated-function-body.js +83 -233
- package/dist/rules/duplicated-function-body.js.map +1 -1
- package/dist/rules/near-duplicate-function-body.d.ts +11 -0
- package/dist/rules/near-duplicate-function-body.d.ts.map +1 -0
- package/dist/rules/near-duplicate-function-body.js +74 -0
- package/dist/rules/near-duplicate-function-body.js.map +1 -0
- package/dist/rules/registry.d.ts.map +1 -1
- package/dist/rules/registry.js +2 -1
- package/dist/rules/registry.js.map +1 -1
- package/dist/types.d.ts +20 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +10 -9
package/README.md
CHANGED
|
@@ -25,8 +25,8 @@ This package is published for the CLI and advanced plugin authors; most users sh
|
|
|
25
25
|
## Documentation
|
|
26
26
|
|
|
27
27
|
- 📚 Project docs: https://opensip.ai/docs/opensip-cli/
|
|
28
|
-
- 🧭 Package catalog (what every package does): https://github.com/opensip-ai/opensip-cli/blob/v0.1.
|
|
29
|
-
- 📦 Source: https://github.com/opensip-ai/opensip-cli/tree/v0.1.
|
|
28
|
+
- 🧭 Package catalog (what every package does): https://github.com/opensip-ai/opensip-cli/blob/v0.1.12/docs/public/70-reference/02-package-catalog.md
|
|
29
|
+
- 📦 Source: https://github.com/opensip-ai/opensip-cli/tree/v0.1.12/packages/graph/engine
|
|
30
30
|
|
|
31
31
|
## License
|
|
32
32
|
|
|
@@ -13,7 +13,7 @@ import { ENGINE_VERSION, stampEngineVersion } from '../../cache/engine-version.j
|
|
|
13
13
|
import { classifyCatalog, computeFilesFingerprint } from '../../cache/invalidate.js';
|
|
14
14
|
describe('stampEngineVersion', () => {
|
|
15
15
|
it('prefixes the adapter cacheKey with the running engine version and the default exact mode', () => {
|
|
16
|
-
expect(stampEngineVersion('ts-6.0.3-exact-abc')).toBe(`eng=${ENGINE_VERSION}|mode=exact|ts-6.0.3-exact-abc`);
|
|
16
|
+
expect(stampEngineVersion('ts-6.0.3-exact-abc')).toBe(`eng=${ENGINE_VERSION}|mode=exact|sig=128.2|ts-6.0.3-exact-abc`);
|
|
17
17
|
});
|
|
18
18
|
it('reads a real version (not the 0.0.0 not-found sentinel)', () => {
|
|
19
19
|
// Resolves @opensip-cli/graph's package.json; a 0.0.0 here would mean
|
|
@@ -23,7 +23,7 @@ describe('stampEngineVersion', () => {
|
|
|
23
23
|
});
|
|
24
24
|
it('is polyglot — wraps every adapter prefix identically', () => {
|
|
25
25
|
for (const adapterKey of ['ts-6-x', 'go-abc', 'java-abc', 'rs-abc', 'py-abc']) {
|
|
26
|
-
expect(stampEngineVersion(adapterKey)).toBe(`eng=${ENGINE_VERSION}|mode=exact|${adapterKey}`);
|
|
26
|
+
expect(stampEngineVersion(adapterKey)).toBe(`eng=${ENGINE_VERSION}|mode=exact|sig=128.2|${adapterKey}`);
|
|
27
27
|
}
|
|
28
28
|
});
|
|
29
29
|
it('folds the engine MODE so exact and sharded keys never collide (ADR-0032)', () => {
|
|
@@ -35,8 +35,8 @@ describe('stampEngineVersion', () => {
|
|
|
35
35
|
// mode ⇒ different cacheKey.
|
|
36
36
|
const exact = stampEngineVersion('ts-6.0.3-exact-abc', 'exact');
|
|
37
37
|
const sharded = stampEngineVersion('ts-6.0.3-exact-abc', 'sharded');
|
|
38
|
-
expect(exact).toBe(`eng=${ENGINE_VERSION}|mode=exact|ts-6.0.3-exact-abc`);
|
|
39
|
-
expect(sharded).toBe(`eng=${ENGINE_VERSION}|mode=sharded|ts-6.0.3-exact-abc`);
|
|
38
|
+
expect(exact).toBe(`eng=${ENGINE_VERSION}|mode=exact|sig=128.2|ts-6.0.3-exact-abc`);
|
|
39
|
+
expect(sharded).toBe(`eng=${ENGINE_VERSION}|mode=sharded|sig=128.2|ts-6.0.3-exact-abc`);
|
|
40
40
|
expect(exact).not.toBe(sharded);
|
|
41
41
|
});
|
|
42
42
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine-version.test.js","sourceRoot":"","sources":["../../../src/__tests__/cache/engine-version.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAIrF,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,0FAA0F,EAAE,GAAG,EAAE;QAClG,MAAM,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CACnD,OAAO,cAAc,
|
|
1
|
+
{"version":3,"file":"engine-version.test.js","sourceRoot":"","sources":["../../../src/__tests__/cache/engine-version.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAIrF,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,0FAA0F,EAAE,GAAG,EAAE;QAClG,MAAM,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CACnD,OAAO,cAAc,0CAA0C,CAChE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,sEAAsE;QACtE,2EAA2E;QAC3E,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,KAAK,MAAM,UAAU,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;YAC9E,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CACzC,OAAO,cAAc,yBAAyB,UAAU,EAAE,CAC3D,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,GAAG,EAAE;QAClF,+DAA+D;QAC/D,sEAAsE;QACtE,4CAA4C;QAC5C,qEAAqE;QACrE,0EAA0E;QAC1E,6BAA6B;QAC7B,MAAM,KAAK,GAAG,kBAAkB,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;QAChE,MAAM,OAAO,GAAG,kBAAkB,CAAC,oBAAoB,EAAE,SAAS,CAAC,CAAC;QACpE,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,cAAc,0CAA0C,CAAC,CAAC;QACpF,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,cAAc,4CAA4C,CAAC,CAAC;QACxF,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;IACpD,6EAA6E;IAC7E,iEAAiE;IACjE,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,EAAE,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,CAAC,QAAgB,EAAW,EAAE,CAAC,CAAC;QAClD,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,YAAY;QACtB,OAAO,EAAE,0BAA0B;QACnC,QAAQ;QACR,gBAAgB,EAAE,gBAAgB;QAClC,SAAS,EAAE,EAAE;KACd,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,yEAAyE;QACzE,gEAAgE;QAChE,MAAM,cAAc,GAAG,kCAAkC,CAAC;QAC1D,MAAM,UAAU,GAAG,kBAAkB,CAAC,oBAAoB,CAAC,CAAC;QAC5D,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE5C,MAAM,OAAO,GAAG,eAAe,CAAC,WAAW,CAAC,cAAc,CAAC,EAAE;YAC3D,eAAe,EAAE,YAAY;YAC7B,eAAe,EAAE,UAAU;YAC3B,YAAY,EAAE,EAAE;SACjB,CAAC,CAAC;QACH,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iFAAiF,EAAE,GAAG,EAAE;QACzF,MAAM,GAAG,GAAG,kBAAkB,CAAC,oBAAoB,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,eAAe,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE;YAChD,eAAe,EAAE,YAAY;YAC7B,eAAe,EAAE,GAAG;YACpB,YAAY,EAAE,EAAE;SACjB,CAAC,CAAC;QACH,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -29,6 +29,7 @@ const EXPECTED_VALUE_EXPORTS = [
|
|
|
29
29
|
'GraphAdapterSelector',
|
|
30
30
|
'GraphRecipeRegistry',
|
|
31
31
|
'appendEdge',
|
|
32
|
+
'bodySignature',
|
|
32
33
|
'builtInGraphRecipes',
|
|
33
34
|
'builtInGraphRecipesByName',
|
|
34
35
|
// Cross-package resolution primitives — the (import specifier + callee name) →
|
|
@@ -47,11 +48,19 @@ const EXPECTED_VALUE_EXPORTS = [
|
|
|
47
48
|
'defaultGraphRecipe',
|
|
48
49
|
'defineGraphRecipe',
|
|
49
50
|
'defineRule',
|
|
51
|
+
'digestCanonicalBody',
|
|
52
|
+
'estimateJaccard',
|
|
50
53
|
'graphTool',
|
|
51
54
|
'GRAPH_CONTRACT_VERSION',
|
|
52
55
|
'hashBody',
|
|
53
56
|
'isBuiltInGraphRecipe',
|
|
57
|
+
'isTestFilePath',
|
|
58
|
+
'languageOfFile',
|
|
54
59
|
'linkExported',
|
|
60
|
+
'lshBandHashes',
|
|
61
|
+
'NEAR_DUP_LSH_BANDS',
|
|
62
|
+
'NEAR_DUP_LSH_ROWS',
|
|
63
|
+
'NEAR_DUP_SIGNATURE_K',
|
|
55
64
|
'normalizeWhitespace',
|
|
56
65
|
'ownerEdgeKey',
|
|
57
66
|
'pickAdapter',
|
|
@@ -59,6 +68,7 @@ const EXPECTED_VALUE_EXPORTS = [
|
|
|
59
68
|
'resolveCrossPackageCall',
|
|
60
69
|
'resolveRecipeToRules',
|
|
61
70
|
'resolveSpecifierToPackage',
|
|
71
|
+
'shingle',
|
|
62
72
|
'tool',
|
|
63
73
|
'truncateForCallEdge',
|
|
64
74
|
// Per-file source size guard shared by adapter parse steps (10 MB cap, shared
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public-api.test.js","sourceRoot":"","sources":["../../src/__tests__/public-api.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAEtC,8EAA8E;AAC9E,MAAM,sBAAsB,GAAG;IAC7B,oBAAoB;IACpB,sBAAsB;IACtB,wBAAwB;IACxB,+EAA+E;IAC/E,iCAAiC;IACjC,iBAAiB;IACjB,sBAAsB;IACtB,sBAAsB;IACtB,qBAAqB;IACrB,YAAY;IACZ,qBAAqB;IACrB,2BAA2B;IAC3B,+EAA+E;IAC/E,+EAA+E;IAC/E,wEAAwE;IACxE,iEAAiE;IACjE,kBAAkB;IAClB,2BAA2B;IAC3B,oCAAoC;IACpC,uBAAuB;IACvB,oBAAoB;IACpB,sBAAsB;IACtB,wBAAwB;IACxB,qBAAqB;IACrB,qBAAqB;IACrB,oBAAoB;IACpB,mBAAmB;IACnB,YAAY;IACZ,WAAW;IACX,wBAAwB;IACxB,UAAU;IACV,sBAAsB;IACtB,cAAc;IACd,qBAAqB;IACrB,cAAc;IACd,aAAa;IACb,kBAAkB;IAClB,yBAAyB;IACzB,sBAAsB;IACtB,2BAA2B;IAC3B,MAAM;IACN,qBAAqB;IACrB,8EAA8E;IAC9E,kDAAkD;IAClD,uBAAuB;IACvB,uBAAuB;CACxB,CAAC,IAAI,EAAE,CAAC;AAET,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;IAChD,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;aAC/B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAwB,CAAC,KAAK,SAAS,CAAC;aAC7D,IAAI,EAAE,CAAC;QACV,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QAClF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,uEAAuE;QACvE,0DAA0D;QAC1D,KAAK,MAAM,IAAI,IAAI;YACjB,aAAa;YACb,UAAU;YACV,cAAc;YACd,cAAc;YACd,yBAAyB;YACzB,mBAAmB;YACnB,4BAA4B;YAC5B,qBAAqB;YACrB,cAAc;SACf,EAAE,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"public-api.test.js","sourceRoot":"","sources":["../../src/__tests__/public-api.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAEtC,8EAA8E;AAC9E,MAAM,sBAAsB,GAAG;IAC7B,oBAAoB;IACpB,sBAAsB;IACtB,wBAAwB;IACxB,+EAA+E;IAC/E,iCAAiC;IACjC,iBAAiB;IACjB,sBAAsB;IACtB,sBAAsB;IACtB,qBAAqB;IACrB,YAAY;IACZ,eAAe;IACf,qBAAqB;IACrB,2BAA2B;IAC3B,+EAA+E;IAC/E,+EAA+E;IAC/E,wEAAwE;IACxE,iEAAiE;IACjE,kBAAkB;IAClB,2BAA2B;IAC3B,oCAAoC;IACpC,uBAAuB;IACvB,oBAAoB;IACpB,sBAAsB;IACtB,wBAAwB;IACxB,qBAAqB;IACrB,qBAAqB;IACrB,oBAAoB;IACpB,mBAAmB;IACnB,YAAY;IACZ,qBAAqB;IACrB,iBAAiB;IACjB,WAAW;IACX,wBAAwB;IACxB,UAAU;IACV,sBAAsB;IACtB,gBAAgB;IAChB,gBAAgB;IAChB,cAAc;IACd,eAAe;IACf,oBAAoB;IACpB,mBAAmB;IACnB,sBAAsB;IACtB,qBAAqB;IACrB,cAAc;IACd,aAAa;IACb,kBAAkB;IAClB,yBAAyB;IACzB,sBAAsB;IACtB,2BAA2B;IAC3B,SAAS;IACT,MAAM;IACN,qBAAqB;IACrB,8EAA8E;IAC9E,kDAAkD;IAClD,uBAAuB;IACvB,uBAAuB;CACxB,CAAC,IAAI,EAAE,CAAC;AAET,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;IAChD,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;aAC/B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAwB,CAAC,KAAK,SAAS,CAAC;aAC7D,IAAI,EAAE,CAAC;QACV,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QAClF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,uEAAuE;QACvE,0DAA0D;QAC1D,KAAK,MAAM,IAAI,IAAI;YACjB,aAAa;YACb,UAAU;YACV,cAAc;YACd,cAAc;YACd,yBAAyB;YACzB,mBAAmB;YACnB,4BAA4B;YAC5B,qBAAqB;YACrB,cAAc;SACf,EAAE,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -42,6 +42,7 @@ describe('rules registry conformance', () => {
|
|
|
42
42
|
const slugs = rules.map((r) => r.slug);
|
|
43
43
|
expect(slugs).toContain('graph:orphan-subtree');
|
|
44
44
|
expect(slugs).toContain('graph:duplicated-function-body');
|
|
45
|
+
expect(slugs).toContain('graph:near-duplicate-function-body');
|
|
45
46
|
expect(slugs).toContain('graph:no-side-effect-path');
|
|
46
47
|
expect(slugs).toContain('graph:test-only-reachable');
|
|
47
48
|
expect(slugs).toContain('graph:always-throws-branch');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.test.js","sourceRoot":"","sources":["../../../src/__tests__/rules/registry.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAI1C,IAAI,KAAsB,CAAC;AAE3B,UAAU,CAAC,GAAG,EAAE;IACd,MAAM,KAAK,GAAG,IAAI,QAAQ,EAAE,CAAC;IAC7B,wBAAwB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC3C,UAAU,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,GAAG,YAAY,EAAE,CAAC;AACzB,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAC/B,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACzD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QAChD,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC;QAC1D,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;QACrD,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;QACrD,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"registry.test.js","sourceRoot":"","sources":["../../../src/__tests__/rules/registry.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAI1C,IAAI,KAAsB,CAAC;AAE3B,UAAU,CAAC,GAAG,EAAE;IACd,MAAM,KAAK,GAAG,IAAI,QAAQ,EAAE,CAAC;IAC7B,wBAAwB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC3C,UAAU,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,GAAG,YAAY,EAAE,CAAC;AACzB,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAC/B,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACzD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QAChD,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC;QAC1D,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,oCAAoC,CAAC,CAAC;QAC9D,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;QACrD,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;QACrD,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine-version.d.ts","sourceRoot":"","sources":["../../src/cache/engine-version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;
|
|
1
|
+
{"version":3,"file":"engine-version.d.ts","sourceRoot":"","sources":["../../src/cache/engine-version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AASH;;;;GAIG;AACH,eAAO,MAAM,cAAc,QAAsC,CAAC;AAKlE;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,SAAS,CAAC;AAQ7C;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,kBAAkB,CAAC,eAAe,EAAE,MAAM,EAAE,IAAI,GAAE,UAAoB,GAAG,MAAM,CAG9F"}
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
* catalog simply mismatches the new prefix and rebuilds once.
|
|
26
26
|
*/
|
|
27
27
|
import { readPackageVersion } from '@opensip-cli/core';
|
|
28
|
+
import { NEAR_DUP_SIGNATURE_K, NEAR_DUP_SIGNATURE_VERSION, } from '../lang-adapter/near-duplicate-signature.js';
|
|
28
29
|
/**
|
|
29
30
|
* The running `@opensip-cli/graph` package version, resolved once from
|
|
30
31
|
* the nearest `package.json`. In a published install this is the version
|
|
@@ -35,6 +36,8 @@ export const ENGINE_VERSION = readPackageVersion(import.meta.url);
|
|
|
35
36
|
const ENGINE_VERSION_PREFIX = 'eng=';
|
|
36
37
|
/** Cache-key segment carrying the build engine mode. */
|
|
37
38
|
const ENGINE_MODE_PREFIX = 'mode=';
|
|
39
|
+
/** Cache-key segment carrying the near-duplicate signature schema version. */
|
|
40
|
+
const SIGNATURE_VERSION_PREFIX = 'sig=';
|
|
38
41
|
/**
|
|
39
42
|
* Prefix an adapter's `cacheKey` with the running engine version AND the
|
|
40
43
|
* build engine mode so (a) a tool upgrade invalidates persisted
|
|
@@ -55,6 +58,7 @@ const ENGINE_MODE_PREFIX = 'mode=';
|
|
|
55
58
|
* rebuild is diagnosable.
|
|
56
59
|
*/
|
|
57
60
|
export function stampEngineVersion(adapterCacheKey, mode = 'exact') {
|
|
58
|
-
|
|
61
|
+
const sig = `${String(NEAR_DUP_SIGNATURE_K)}.${String(NEAR_DUP_SIGNATURE_VERSION)}`;
|
|
62
|
+
return `${ENGINE_VERSION_PREFIX}${ENGINE_VERSION}|${ENGINE_MODE_PREFIX}${mode}|${SIGNATURE_VERSION_PREFIX}${sig}|${adapterCacheKey}`;
|
|
59
63
|
}
|
|
60
64
|
//# sourceMappingURL=engine-version.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine-version.js","sourceRoot":"","sources":["../../src/cache/engine-version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAElE,oDAAoD;AACpD,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAmBrC,wDAAwD;AACxD,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAEnC;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,kBAAkB,CAAC,eAAuB,EAAE,OAAmB,OAAO;IACpF,OAAO,GAAG,qBAAqB,GAAG,cAAc,IAAI,kBAAkB,GAAG,IAAI,IAAI,eAAe,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"engine-version.js","sourceRoot":"","sources":["../../src/cache/engine-version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EACL,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,6CAA6C,CAAC;AAErD;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAElE,oDAAoD;AACpD,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAmBrC,wDAAwD;AACxD,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAEnC,8EAA8E;AAC9E,MAAM,wBAAwB,GAAG,MAAM,CAAC;AAExC;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,kBAAkB,CAAC,eAAuB,EAAE,OAAmB,OAAO;IACpF,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,oBAAoB,CAAC,IAAI,MAAM,CAAC,0BAA0B,CAAC,EAAE,CAAC;IACpF,OAAO,GAAG,qBAAqB,GAAG,cAAc,IAAI,kBAAkB,GAAG,IAAI,IAAI,wBAAwB,GAAG,GAAG,IAAI,eAAe,EAAE,CAAC;AACvI,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for the PURE equivalence-diagnostic builder. No fs / env / clock —
|
|
3
|
+
* the host command owns those effects; here we assert the analysis maps a
|
|
4
|
+
* decline/phantom divergence to a symmetric per-engine description.
|
|
5
|
+
*/
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=equivalence-diagnostic.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"equivalence-diagnostic.test.d.ts","sourceRoot":"","sources":["../../../src/cli/__tests__/equivalence-diagnostic.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for the PURE equivalence-diagnostic builder. No fs / env / clock —
|
|
3
|
+
* the host command owns those effects; here we assert the analysis maps a
|
|
4
|
+
* decline/phantom divergence to a symmetric per-engine description.
|
|
5
|
+
*/
|
|
6
|
+
import { describe, expect, it } from 'vitest';
|
|
7
|
+
import { buildEquivalenceDiagnostic } from '../equivalence-diagnostic.js';
|
|
8
|
+
function occ(simpleName, filePath, bodyHash, calls = []) {
|
|
9
|
+
return {
|
|
10
|
+
bodyHash,
|
|
11
|
+
simpleName,
|
|
12
|
+
qualifiedName: `${filePath}.${simpleName}`,
|
|
13
|
+
filePath,
|
|
14
|
+
line: 1,
|
|
15
|
+
column: 0,
|
|
16
|
+
endLine: 1,
|
|
17
|
+
kind: 'function-declaration',
|
|
18
|
+
params: [],
|
|
19
|
+
returnType: null,
|
|
20
|
+
enclosingClass: null,
|
|
21
|
+
decorators: [],
|
|
22
|
+
visibility: 'exported',
|
|
23
|
+
inTestFile: false,
|
|
24
|
+
definedInGenerated: false,
|
|
25
|
+
calls,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function fragment(...occs) {
|
|
29
|
+
const functions = {};
|
|
30
|
+
for (const o of occs) {
|
|
31
|
+
const bucket = functions[o.simpleName];
|
|
32
|
+
if (bucket)
|
|
33
|
+
bucket.push(o);
|
|
34
|
+
else
|
|
35
|
+
functions[o.simpleName] = [o];
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
version: '3.0',
|
|
39
|
+
tool: 'graph',
|
|
40
|
+
language: 'typescript',
|
|
41
|
+
builtAt: 'x',
|
|
42
|
+
cacheKey: 'key',
|
|
43
|
+
resolutionMode: 'exact',
|
|
44
|
+
functions,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
const edge = (over) => ({
|
|
48
|
+
line: 5,
|
|
49
|
+
column: 9,
|
|
50
|
+
resolution: 'semantic',
|
|
51
|
+
confidence: 'high',
|
|
52
|
+
text: 'target()',
|
|
53
|
+
...over,
|
|
54
|
+
});
|
|
55
|
+
function diff(over) {
|
|
56
|
+
return {
|
|
57
|
+
key: 'OWNER@caller',
|
|
58
|
+
ownerFilePath: 'packages/a/src/caller.ts',
|
|
59
|
+
line: 5,
|
|
60
|
+
column: 9,
|
|
61
|
+
toA: '',
|
|
62
|
+
toB: '',
|
|
63
|
+
cross: true,
|
|
64
|
+
...over,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
const SHARDS = [{ id: 'pkg:a', rootDir: '/repo/packages/a', files: ['f1.ts', 'f2.ts'] }];
|
|
68
|
+
describe('buildEquivalenceDiagnostic', () => {
|
|
69
|
+
it('describes a decline (exact resolved, sharded declined) symmetrically', () => {
|
|
70
|
+
const exactEdge = edge({ to: ['TGT'], resolution: 'semantic', crossShard: true });
|
|
71
|
+
const shardedEdge = edge({ to: [], resolution: 'unknown', confidence: 'low' });
|
|
72
|
+
const exact = fragment(occ('caller', 'packages/a/src/caller.ts', 'OWNER', [exactEdge]), occ('target', 'packages/b/src/target.ts', 'TGT'));
|
|
73
|
+
const sharded = fragment(occ('caller', 'packages/a/src/caller.ts', 'OWNER', [shardedEdge]), occ('target', 'packages/b/src/target.ts', 'TGT'));
|
|
74
|
+
const out = buildEquivalenceDiagnostic({
|
|
75
|
+
report: { productionDecline: [diff({ toA: 'TGT', toB: '' })], productionPhantom: [] },
|
|
76
|
+
exact,
|
|
77
|
+
sharded,
|
|
78
|
+
shards: SHARDS,
|
|
79
|
+
});
|
|
80
|
+
expect(out.counts).toEqual({ productionDecline: 1, productionPhantom: 0 });
|
|
81
|
+
expect(out.shards).toEqual([{ id: 'pkg:a', rootDir: '/repo/packages/a', fileCount: 2 }]);
|
|
82
|
+
const d = out.decline[0];
|
|
83
|
+
expect(d.owner.hash).toBe('OWNER');
|
|
84
|
+
expect(d.owner.exact?.simpleName).toBe('caller');
|
|
85
|
+
expect(d.owner.sharded?.simpleName).toBe('caller');
|
|
86
|
+
expect(d.exactEdge?.to).toEqual(['TGT']);
|
|
87
|
+
expect(d.exactEdge?.resolution).toBe('semantic');
|
|
88
|
+
expect(d.exactEdge?.crossShard).toBe(true);
|
|
89
|
+
expect(d.shardedEdge?.to).toEqual([]);
|
|
90
|
+
expect(d.shardedEdge?.resolution).toBe('unknown');
|
|
91
|
+
expect(d.exactTo).toEqual([
|
|
92
|
+
{ hash: 'TGT', occurrences: [expect.objectContaining({ simpleName: 'target' })] },
|
|
93
|
+
]);
|
|
94
|
+
expect(d.shardedTo).toEqual([]);
|
|
95
|
+
// Histogram keys on `<resolution>:<crossShard>` of the exact edge.
|
|
96
|
+
expect(out.declineByExactResolution).toEqual({ 'semantic:true': 1 });
|
|
97
|
+
});
|
|
98
|
+
it('describes a phantom (sharded resolved, exact declined) and histograms it', () => {
|
|
99
|
+
const exact = fragment(occ('caller', 'packages/a/src/caller.ts', 'OWNER', [edge({ to: [] })]));
|
|
100
|
+
const sharded = fragment(occ('caller', 'packages/a/src/caller.ts', 'OWNER', [
|
|
101
|
+
edge({ to: ['TGT'], resolution: 'semantic', crossShard: true }),
|
|
102
|
+
]), occ('target', 'packages/b/src/target.ts', 'TGT'));
|
|
103
|
+
const out = buildEquivalenceDiagnostic({
|
|
104
|
+
report: { productionDecline: [], productionPhantom: [diff({ toA: '', toB: 'TGT' })] },
|
|
105
|
+
exact,
|
|
106
|
+
sharded,
|
|
107
|
+
shards: SHARDS,
|
|
108
|
+
});
|
|
109
|
+
expect(out.counts).toEqual({ productionDecline: 0, productionPhantom: 1 });
|
|
110
|
+
const p = out.phantom[0];
|
|
111
|
+
expect(p.shardedEdge?.to).toEqual(['TGT']);
|
|
112
|
+
expect(p.shardedTo).toEqual([
|
|
113
|
+
{ hash: 'TGT', occurrences: [expect.objectContaining({ simpleName: 'target' })] },
|
|
114
|
+
]);
|
|
115
|
+
expect(p.exactTo).toEqual([]);
|
|
116
|
+
expect(out.phantomByShardedResolution).toEqual({ 'semantic:true': 1 });
|
|
117
|
+
});
|
|
118
|
+
it('emits null edge/owner summaries when the occurrence is absent from a catalog', () => {
|
|
119
|
+
// sharded never saw the owner at all → its owner + same-site edge are null.
|
|
120
|
+
const exact = fragment(occ('caller', 'packages/a/src/caller.ts', 'OWNER', [edge({ to: ['TGT'] })]), occ('target', 'packages/b/src/target.ts', 'TGT'));
|
|
121
|
+
const sharded = fragment(occ('unrelated', 'packages/c/src/x.ts', 'OTHER'));
|
|
122
|
+
const out = buildEquivalenceDiagnostic({
|
|
123
|
+
report: { productionDecline: [diff({ toA: 'TGT', toB: '' })], productionPhantom: [] },
|
|
124
|
+
exact,
|
|
125
|
+
sharded,
|
|
126
|
+
shards: SHARDS,
|
|
127
|
+
});
|
|
128
|
+
const d = out.decline[0];
|
|
129
|
+
expect(d.owner.exact?.simpleName).toBe('caller');
|
|
130
|
+
expect(d.owner.sharded).toBeNull();
|
|
131
|
+
expect(d.shardedEdge).toBeNull();
|
|
132
|
+
expect(d.shardedSameSite).toBeNull();
|
|
133
|
+
expect(d.exactSameSite?.to).toEqual(['TGT']);
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
//# sourceMappingURL=equivalence-diagnostic.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"equivalence-diagnostic.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/equivalence-diagnostic.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"equivalence-check-command.d.ts","sourceRoot":"","sources":["../../src/cli/equivalence-check-command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;
|
|
1
|
+
{"version":3,"file":"equivalence-check-command.d.ts","sourceRoot":"","sources":["../../src/cli/equivalence-check-command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAwBH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAOxD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,mEAAmE;IACnE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,2EAA2E;IAC3E,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;CACjC;AAwFD;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,uBAAuB,EAC7B,GAAG,EAAE,cAAc,GAClB,OAAO,CAAC,IAAI,CAAC,CA8Ef"}
|
|
@@ -31,9 +31,11 @@ import { dirname, resolve } from 'node:path';
|
|
|
31
31
|
import { EXIT_CODES } from '@opensip-cli/contracts';
|
|
32
32
|
import { logger } from '@opensip-cli/core';
|
|
33
33
|
import { pickAdapter } from '../lang-adapter/registry.js';
|
|
34
|
+
import { buildEquivalenceDiagnostic } from './equivalence-diagnostic.js';
|
|
34
35
|
import { resolveShardsForCwd } from './graph.js';
|
|
35
36
|
import { buildEquivalenceReport, judgeEquivalence, } from './orchestrate/equivalence-check.js';
|
|
36
37
|
import { runGraph, runShardedGraph } from './orchestrate.js';
|
|
38
|
+
import { readGraphEnv } from './pressure-monitor.js';
|
|
37
39
|
const MODULE = 'graph:cli';
|
|
38
40
|
/** Default committed budget path, relative to the target repo root. */
|
|
39
41
|
const DEFAULT_BUDGET_REL = '.config/graph-equivalence-budget.json';
|
|
@@ -131,13 +133,27 @@ export async function executeEquivalenceCheck(opts, cli) {
|
|
|
131
133
|
'The comparison requires a multi-package (shardable) repo so the sharded and ' +
|
|
132
134
|
'exact engines actually diverge through real dist/*.d.ts resolution.');
|
|
133
135
|
}
|
|
136
|
+
// Transparent passthrough wrappers: capture both catalogs ONLY to feed the
|
|
137
|
+
// optional GRAPH_EQUIV_DIAG dump. Behaviourally identical to passing the
|
|
138
|
+
// builders directly when the diagnostic is not requested.
|
|
139
|
+
let exactCatalog = null;
|
|
140
|
+
let shardedCatalog = null;
|
|
134
141
|
const report = await buildEquivalenceReport({
|
|
135
142
|
cwd,
|
|
136
143
|
shards,
|
|
137
144
|
cliScript,
|
|
138
|
-
buildExact:
|
|
139
|
-
|
|
145
|
+
buildExact: async (root) => {
|
|
146
|
+
const c = await buildExactCatalog(root);
|
|
147
|
+
exactCatalog = c;
|
|
148
|
+
return c;
|
|
149
|
+
},
|
|
150
|
+
buildSharded: async (input) => {
|
|
151
|
+
const c = await buildShardedCatalog(input);
|
|
152
|
+
shardedCatalog = c;
|
|
153
|
+
return c;
|
|
154
|
+
},
|
|
140
155
|
});
|
|
156
|
+
maybeWriteEquivalenceDiagnostic(report, exactCatalog, shardedCatalog, shards);
|
|
141
157
|
const seedMissing = opts.updateBudget === true && !existsSync(budgetPath);
|
|
142
158
|
const budget = seedMissing
|
|
143
159
|
? {
|
|
@@ -172,6 +188,23 @@ export async function executeEquivalenceCheck(opts, cli) {
|
|
|
172
188
|
cli.setExitCode(EXIT_CODES.RUNTIME_ERROR);
|
|
173
189
|
}
|
|
174
190
|
}
|
|
191
|
+
/**
|
|
192
|
+
* Write the structured equivalence diagnostic to the path named by the
|
|
193
|
+
* `GRAPH_EQUIV_DIAG` env var (read through the governed {@link GRAPH_ENV}
|
|
194
|
+
* registry), if set and both catalogs were captured. Inert otherwise. Effectful
|
|
195
|
+
* seam (env gate + file + stdout) — the analysis itself is the pure
|
|
196
|
+
* {@link buildEquivalenceDiagnostic}. Mirrors {@link writeBudget}'s direct file
|
|
197
|
+
* write; this is a host CI/diagnostic command, not a tool action body.
|
|
198
|
+
*/
|
|
199
|
+
function maybeWriteEquivalenceDiagnostic(report, exact, sharded, shards) {
|
|
200
|
+
const outPath = readGraphEnv('GRAPH_EQUIV_DIAG');
|
|
201
|
+
if (outPath === undefined || outPath.length === 0 || exact === null || sharded === null)
|
|
202
|
+
return;
|
|
203
|
+
const diagnostic = buildEquivalenceDiagnostic({ report, exact, sharded, shards });
|
|
204
|
+
const payload = { generatedAt: new Date().toISOString(), ...diagnostic };
|
|
205
|
+
writeFileSync(outPath, `${JSON.stringify(payload, null, 2)}\n`, 'utf8');
|
|
206
|
+
process.stdout.write(`Wrote graph equivalence diagnostic to ${outPath}\n`);
|
|
207
|
+
}
|
|
175
208
|
function logEnd(report, verdict, failed) {
|
|
176
209
|
logger.info({
|
|
177
210
|
evt: 'graph.cli.equivalence_check.complete',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"equivalence-check-command.js","sourceRoot":"","sources":["../../src/cli/equivalence-check-command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EACL,sBAAsB,EACtB,gBAAgB,
|
|
1
|
+
{"version":3,"file":"equivalence-check-command.js","sourceRoot":"","sources":["../../src/cli/equivalence-check-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Equivalence-divergence diagnostic builder (pure).
|
|
3
|
+
*
|
|
4
|
+
* When `graph-equivalence-check` reports production decline/phantom divergences,
|
|
5
|
+
* this turns each divergence into a fully-described record — owner occurrence,
|
|
6
|
+
* resolved target occurrences, and the actual call edge on BOTH engines (plus the
|
|
7
|
+
* same-call-site edge whatever its resolution) — so a maintainer can see exactly
|
|
8
|
+
* how exact and sharded disagreed at a call site, not just the bodyHash deltas.
|
|
9
|
+
*
|
|
10
|
+
* It is the structured form of the throwaway instrumentation that originally
|
|
11
|
+
* root-caused the 118-decline asymmetry (exact resolves workspace deps via
|
|
12
|
+
* symlinked `packages/X/dist`, sharded via pnpm's injected `.pnpm/...@file+...`).
|
|
13
|
+
* Keeping it as a maintained, env-gated artifact makes the NEXT equivalence
|
|
14
|
+
* regression debuggable in minutes instead of hours.
|
|
15
|
+
*
|
|
16
|
+
* This module is PURE — no `fs`, no `process`, no `Date`. The host command
|
|
17
|
+
* (`equivalence-check-command.ts`) owns the env gate + file/stdout effects, so
|
|
18
|
+
* the analysis is unit-testable in isolation.
|
|
19
|
+
*/
|
|
20
|
+
import type { Catalog, CallEdge, FunctionOccurrence } from '../types.js';
|
|
21
|
+
import type { EdgeDifference } from './orchestrate/cross-shard-resolve.js';
|
|
22
|
+
/** Compact occurrence projection for the diagnostic JSON. */
|
|
23
|
+
export interface OccurrenceSummary {
|
|
24
|
+
readonly simpleName: string;
|
|
25
|
+
readonly qualifiedName: string;
|
|
26
|
+
readonly filePath: string;
|
|
27
|
+
readonly line: number;
|
|
28
|
+
readonly column: number;
|
|
29
|
+
readonly kind: FunctionOccurrence['kind'];
|
|
30
|
+
readonly visibility: FunctionOccurrence['visibility'];
|
|
31
|
+
readonly package: string | undefined;
|
|
32
|
+
}
|
|
33
|
+
/** Compact call-edge projection for the diagnostic JSON. */
|
|
34
|
+
export interface EdgeSummary {
|
|
35
|
+
readonly to: readonly string[];
|
|
36
|
+
readonly line: number;
|
|
37
|
+
readonly column: number;
|
|
38
|
+
readonly resolution: CallEdge['resolution'];
|
|
39
|
+
readonly confidence: CallEdge['confidence'];
|
|
40
|
+
readonly text: string;
|
|
41
|
+
readonly crossShard: boolean;
|
|
42
|
+
readonly discarded: boolean;
|
|
43
|
+
}
|
|
44
|
+
/** One resolved target bodyHash and every occurrence that shares it. */
|
|
45
|
+
export interface TargetSummary {
|
|
46
|
+
readonly hash: string;
|
|
47
|
+
readonly occurrences: readonly OccurrenceSummary[];
|
|
48
|
+
}
|
|
49
|
+
/** A single divergence, described symmetrically across both engines. */
|
|
50
|
+
export interface DiffDiagnostic {
|
|
51
|
+
readonly owner: {
|
|
52
|
+
readonly hash: string;
|
|
53
|
+
readonly filePath: string;
|
|
54
|
+
readonly line: number;
|
|
55
|
+
readonly column: number;
|
|
56
|
+
readonly exact: OccurrenceSummary | null;
|
|
57
|
+
readonly sharded: OccurrenceSummary | null;
|
|
58
|
+
};
|
|
59
|
+
readonly exactTo: readonly TargetSummary[];
|
|
60
|
+
readonly shardedTo: readonly TargetSummary[];
|
|
61
|
+
/** The edge whose target set exactly matches this divergence's recorded `to`. */
|
|
62
|
+
readonly exactEdge: EdgeSummary | null;
|
|
63
|
+
readonly shardedEdge: EdgeSummary | null;
|
|
64
|
+
/** The edge at the same call site regardless of its resolved target set. */
|
|
65
|
+
readonly exactSameSite: EdgeSummary | null;
|
|
66
|
+
readonly shardedSameSite: EdgeSummary | null;
|
|
67
|
+
}
|
|
68
|
+
export interface EquivalenceDiagnostic {
|
|
69
|
+
readonly counts: {
|
|
70
|
+
readonly productionDecline: number;
|
|
71
|
+
readonly productionPhantom: number;
|
|
72
|
+
};
|
|
73
|
+
readonly shards: readonly {
|
|
74
|
+
readonly id: string;
|
|
75
|
+
readonly rootDir: string;
|
|
76
|
+
readonly fileCount: number;
|
|
77
|
+
}[];
|
|
78
|
+
/** Histogram: `<resolution>:<crossShard>` of the exact edge for each decline. */
|
|
79
|
+
readonly declineByExactResolution: Record<string, number>;
|
|
80
|
+
/** Histogram: `<resolution>:<crossShard>` of the sharded edge for each phantom. */
|
|
81
|
+
readonly phantomByShardedResolution: Record<string, number>;
|
|
82
|
+
readonly decline: readonly DiffDiagnostic[];
|
|
83
|
+
readonly phantom: readonly DiffDiagnostic[];
|
|
84
|
+
}
|
|
85
|
+
export interface BuildEquivalenceDiagnosticInput {
|
|
86
|
+
readonly report: {
|
|
87
|
+
readonly productionDecline: readonly EdgeDifference[];
|
|
88
|
+
readonly productionPhantom: readonly EdgeDifference[];
|
|
89
|
+
};
|
|
90
|
+
readonly exact: Catalog;
|
|
91
|
+
readonly sharded: Catalog;
|
|
92
|
+
readonly shards: readonly {
|
|
93
|
+
readonly id: string;
|
|
94
|
+
readonly rootDir: string;
|
|
95
|
+
readonly files: readonly string[];
|
|
96
|
+
}[];
|
|
97
|
+
}
|
|
98
|
+
/** Build the structured equivalence diagnostic. Pure: no I/O, no clock. */
|
|
99
|
+
export declare function buildEquivalenceDiagnostic(input: BuildEquivalenceDiagnosticInput): EquivalenceDiagnostic;
|
|
100
|
+
//# sourceMappingURL=equivalence-diagnostic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"equivalence-diagnostic.d.ts","sourceRoot":"","sources":["../../src/cli/equivalence-diagnostic.ts"],"names":[],"mappings":"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"}
|