@gate-forge/core 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.
- package/LICENSE +202 -0
- package/dist/baselines/adoption.d.ts +76 -0
- package/dist/baselines/adoption.d.ts.map +1 -0
- package/dist/baselines/adoption.js +163 -0
- package/dist/baselines/adoption.js.map +1 -0
- package/dist/baselines/index.d.ts +102 -0
- package/dist/baselines/index.d.ts.map +1 -0
- package/dist/baselines/index.js +186 -0
- package/dist/baselines/index.js.map +1 -0
- package/dist/canonical-json.d.ts +51 -0
- package/dist/canonical-json.d.ts.map +1 -0
- package/dist/canonical-json.js +112 -0
- package/dist/canonical-json.js.map +1 -0
- package/dist/classifier/bind.d.ts +64 -0
- package/dist/classifier/bind.d.ts.map +1 -0
- package/dist/classifier/bind.js +188 -0
- package/dist/classifier/bind.js.map +1 -0
- package/dist/classifier/classify.d.ts +154 -0
- package/dist/classifier/classify.d.ts.map +1 -0
- package/dist/classifier/classify.js +1207 -0
- package/dist/classifier/classify.js.map +1 -0
- package/dist/classifier/glob.d.ts +48 -0
- package/dist/classifier/glob.d.ts.map +1 -0
- package/dist/classifier/glob.js +104 -0
- package/dist/classifier/glob.js.map +1 -0
- package/dist/classifier/index.d.ts +10 -0
- package/dist/classifier/index.d.ts.map +1 -0
- package/dist/classifier/index.js +21 -0
- package/dist/classifier/index.js.map +1 -0
- package/dist/classifier/schema.d.ts +150 -0
- package/dist/classifier/schema.d.ts.map +1 -0
- package/dist/classifier/schema.js +139 -0
- package/dist/classifier/schema.js.map +1 -0
- package/dist/config/index.d.ts +259 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +523 -0
- package/dist/config/index.js.map +1 -0
- package/dist/fingerprints.d.ts +56 -0
- package/dist/fingerprints.d.ts.map +1 -0
- package/dist/fingerprints.js +59 -0
- package/dist/fingerprints.js.map +1 -0
- package/dist/graph/build.d.ts +16 -0
- package/dist/graph/build.d.ts.map +1 -0
- package/dist/graph/build.js +423 -0
- package/dist/graph/build.js.map +1 -0
- package/dist/graph/index.d.ts +12 -0
- package/dist/graph/index.d.ts.map +1 -0
- package/dist/graph/index.js +10 -0
- package/dist/graph/index.js.map +1 -0
- package/dist/graph/schema.d.ts +448 -0
- package/dist/graph/schema.d.ts.map +1 -0
- package/dist/graph/schema.js +237 -0
- package/dist/graph/schema.js.map +1 -0
- package/dist/graph/symbols.d.ts +129 -0
- package/dist/graph/symbols.d.ts.map +1 -0
- package/dist/graph/symbols.js +177 -0
- package/dist/graph/symbols.js.map +1 -0
- package/dist/graph/util.d.ts +40 -0
- package/dist/graph/util.d.ts.map +1 -0
- package/dist/graph/util.js +41 -0
- package/dist/graph/util.js.map +1 -0
- package/dist/index.d.ts +683 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +563 -0
- package/dist/index.js.map +1 -0
- package/dist/mapping/resolve.d.ts +177 -0
- package/dist/mapping/resolve.d.ts.map +1 -0
- package/dist/mapping/resolve.js +523 -0
- package/dist/mapping/resolve.js.map +1 -0
- package/dist/policy/coverage.d.ts +79 -0
- package/dist/policy/coverage.d.ts.map +1 -0
- package/dist/policy/coverage.js +119 -0
- package/dist/policy/coverage.js.map +1 -0
- package/dist/policy/evaluate.d.ts +275 -0
- package/dist/policy/evaluate.d.ts.map +1 -0
- package/dist/policy/evaluate.js +382 -0
- package/dist/policy/evaluate.js.map +1 -0
- package/dist/policy/index.d.ts +15 -0
- package/dist/policy/index.d.ts.map +1 -0
- package/dist/policy/index.js +14 -0
- package/dist/policy/index.js.map +1 -0
- package/dist/policy/trusted.d.ts +59 -0
- package/dist/policy/trusted.d.ts.map +1 -0
- package/dist/policy/trusted.js +96 -0
- package/dist/policy/trusted.js.map +1 -0
- package/dist/provenance.d.ts +170 -0
- package/dist/provenance.d.ts.map +1 -0
- package/dist/provenance.js +306 -0
- package/dist/provenance.js.map +1 -0
- package/dist/receipt/index.d.ts +74 -0
- package/dist/receipt/index.d.ts.map +1 -0
- package/dist/receipt/index.js +154 -0
- package/dist/receipt/index.js.map +1 -0
- package/dist/report/index.d.ts +100 -0
- package/dist/report/index.d.ts.map +1 -0
- package/dist/report/index.js +355 -0
- package/dist/report/index.js.map +1 -0
- package/dist/schemas/adoption.d.ts +40 -0
- package/dist/schemas/adoption.d.ts.map +1 -0
- package/dist/schemas/adoption.js +87 -0
- package/dist/schemas/adoption.js.map +1 -0
- package/dist/schemas/baseline.d.ts +19 -0
- package/dist/schemas/baseline.d.ts.map +1 -0
- package/dist/schemas/baseline.js +45 -0
- package/dist/schemas/baseline.js.map +1 -0
- package/dist/schemas/claim.d.ts +32 -0
- package/dist/schemas/claim.d.ts.map +1 -0
- package/dist/schemas/claim.js +34 -0
- package/dist/schemas/claim.js.map +1 -0
- package/dist/schemas/classification-policy.d.ts +84 -0
- package/dist/schemas/classification-policy.d.ts.map +1 -0
- package/dist/schemas/classification-policy.js +130 -0
- package/dist/schemas/classification-policy.js.map +1 -0
- package/dist/schemas/classification-signal.d.ts +125 -0
- package/dist/schemas/classification-signal.d.ts.map +1 -0
- package/dist/schemas/classification-signal.js +126 -0
- package/dist/schemas/classification-signal.js.map +1 -0
- package/dist/schemas/classification.d.ts +120 -0
- package/dist/schemas/classification.d.ts.map +1 -0
- package/dist/schemas/classification.js +154 -0
- package/dist/schemas/classification.js.map +1 -0
- package/dist/schemas/common.d.ts +73 -0
- package/dist/schemas/common.d.ts.map +1 -0
- package/dist/schemas/common.js +60 -0
- package/dist/schemas/common.js.map +1 -0
- package/dist/schemas/coverage-policy.d.ts +89 -0
- package/dist/schemas/coverage-policy.d.ts.map +1 -0
- package/dist/schemas/coverage-policy.js +81 -0
- package/dist/schemas/coverage-policy.js.map +1 -0
- package/dist/schemas/evidence.d.ts +65 -0
- package/dist/schemas/evidence.d.ts.map +1 -0
- package/dist/schemas/evidence.js +64 -0
- package/dist/schemas/evidence.js.map +1 -0
- package/dist/schemas/execution-result.d.ts +214 -0
- package/dist/schemas/execution-result.d.ts.map +1 -0
- package/dist/schemas/execution-result.js +240 -0
- package/dist/schemas/execution-result.js.map +1 -0
- package/dist/schemas/gate-receipt.d.ts +86 -0
- package/dist/schemas/gate-receipt.d.ts.map +1 -0
- package/dist/schemas/gate-receipt.js +193 -0
- package/dist/schemas/gate-receipt.js.map +1 -0
- package/dist/schemas/index.d.ts +22 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +22 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/obligation.d.ts +37 -0
- package/dist/schemas/obligation.d.ts.map +1 -0
- package/dist/schemas/obligation.js +46 -0
- package/dist/schemas/obligation.js.map +1 -0
- package/dist/schemas/plugin.d.ts +19 -0
- package/dist/schemas/plugin.d.ts.map +1 -0
- package/dist/schemas/plugin.js +20 -0
- package/dist/schemas/plugin.js.map +1 -0
- package/dist/schemas/policy.d.ts +73 -0
- package/dist/schemas/policy.d.ts.map +1 -0
- package/dist/schemas/policy.js +46 -0
- package/dist/schemas/policy.js.map +1 -0
- package/dist/schemas/resource.d.ts +26 -0
- package/dist/schemas/resource.d.ts.map +1 -0
- package/dist/schemas/resource.js +29 -0
- package/dist/schemas/resource.js.map +1 -0
- package/dist/schemas/run-manifest.d.ts +72 -0
- package/dist/schemas/run-manifest.d.ts.map +1 -0
- package/dist/schemas/run-manifest.js +125 -0
- package/dist/schemas/run-manifest.js.map +1 -0
- package/dist/schemas/runner-adapter.d.ts +169 -0
- package/dist/schemas/runner-adapter.d.ts.map +1 -0
- package/dist/schemas/runner-adapter.js +2 -0
- package/dist/schemas/runner-adapter.js.map +1 -0
- package/dist/schemas/test-catalog.d.ts +472 -0
- package/dist/schemas/test-catalog.d.ts.map +1 -0
- package/dist/schemas/test-catalog.js +311 -0
- package/dist/schemas/test-catalog.js.map +1 -0
- package/dist/schemas/test-map.d.ts +99 -0
- package/dist/schemas/test-map.d.ts.map +1 -0
- package/dist/schemas/test-map.js +103 -0
- package/dist/schemas/test-map.js.map +1 -0
- package/dist/schemas/verdict.d.ts +73 -0
- package/dist/schemas/verdict.d.ts.map +1 -0
- package/dist/schemas/verdict.js +92 -0
- package/dist/schemas/verdict.js.map +1 -0
- package/dist/schemas/waiver.d.ts +36 -0
- package/dist/schemas/waiver.d.ts.map +1 -0
- package/dist/schemas/waiver.js +42 -0
- package/dist/schemas/waiver.js.map +1 -0
- package/dist/supervision/index.d.ts +170 -0
- package/dist/supervision/index.d.ts.map +1 -0
- package/dist/supervision/index.js +354 -0
- package/dist/supervision/index.js.map +1 -0
- package/dist/testing/clock.d.ts +50 -0
- package/dist/testing/clock.d.ts.map +1 -0
- package/dist/testing/clock.js +75 -0
- package/dist/testing/clock.js.map +1 -0
- package/dist/testing/env.d.ts +66 -0
- package/dist/testing/env.d.ts.map +1 -0
- package/dist/testing/env.js +106 -0
- package/dist/testing/env.js.map +1 -0
- package/dist/testing/gate-runner.d.ts +141 -0
- package/dist/testing/gate-runner.d.ts.map +1 -0
- package/dist/testing/gate-runner.js +173 -0
- package/dist/testing/gate-runner.js.map +1 -0
- package/dist/testing/gf19.d.ts +106 -0
- package/dist/testing/gf19.d.ts.map +1 -0
- package/dist/testing/gf19.js +282 -0
- package/dist/testing/gf19.js.map +1 -0
- package/dist/testing/index.d.ts +20 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +14 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/red-probe.d.ts +138 -0
- package/dist/testing/red-probe.d.ts.map +1 -0
- package/dist/testing/red-probe.js +251 -0
- package/dist/testing/red-probe.js.map +1 -0
- package/dist/testing/temp-repo.d.ts +126 -0
- package/dist/testing/temp-repo.d.ts.map +1 -0
- package/dist/testing/temp-repo.js +214 -0
- package/dist/testing/temp-repo.js.map +1 -0
- package/dist/verdict/cause.d.ts +99 -0
- package/dist/verdict/cause.d.ts.map +1 -0
- package/dist/verdict/cause.js +206 -0
- package/dist/verdict/cause.js.map +1 -0
- package/dist/verdict/evaluate.d.ts +135 -0
- package/dist/verdict/evaluate.d.ts.map +1 -0
- package/dist/verdict/evaluate.js +1513 -0
- package/dist/verdict/evaluate.js.map +1 -0
- package/dist/verdict/index.d.ts +21 -0
- package/dist/verdict/index.d.ts.map +1 -0
- package/dist/verdict/index.js +20 -0
- package/dist/verdict/index.js.map +1 -0
- package/dist/verdict/pack-verifiers.d.ts +97 -0
- package/dist/verdict/pack-verifiers.d.ts.map +1 -0
- package/dist/verdict/pack-verifiers.js +763 -0
- package/dist/verdict/pack-verifiers.js.map +1 -0
- package/dist/verdict/registry.d.ts +180 -0
- package/dist/verdict/registry.d.ts.map +1 -0
- package/dist/verdict/registry.js +67 -0
- package/dist/verdict/registry.js.map +1 -0
- package/dist/waivers/index.d.ts +103 -0
- package/dist/waivers/index.d.ts.map +1 -0
- package/dist/waivers/index.js +192 -0
- package/dist/waivers/index.js.map +1 -0
- package/package.json +40 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type ResourceGraph, type ResourceGraphInput } from './schema.js';
|
|
2
|
+
/** Detector id stamped onto every graph-issued finding/entry. */
|
|
3
|
+
export declare const GRAPH_DETECTOR_ID = "gateforge.graph";
|
|
4
|
+
/**
|
|
5
|
+
* Builds the resource graph. See the module doc for the normalization
|
|
6
|
+
* rules; see `ResourceGraphSchema` for the output shape.
|
|
7
|
+
*
|
|
8
|
+
* Args:
|
|
9
|
+
* input: detector contributions and the claim/adapter/waiver
|
|
10
|
+
* populations to watch for staleness.
|
|
11
|
+
*
|
|
12
|
+
* Returns:
|
|
13
|
+
* ResourceGraph: normalized, sorted, byte-for-byte deterministic.
|
|
14
|
+
*/
|
|
15
|
+
export declare function buildResourceGraph(input: ResourceGraphInput): ResourceGraph;
|
|
16
|
+
//# sourceMappingURL=build.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/graph/build.ts"],"names":[],"mappings":"AA2BA,OAAO,EAAiI,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAuB,MAAM,aAAa,CAAC;AAI9N,iEAAiE;AACjE,eAAO,MAAM,iBAAiB,oBAAoB,CAAC;AAKnD;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,GAAG,aAAa,CA2B3E"}
|
|
@@ -0,0 +1,423 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resource-graph construction (Phase 1 "resource graph construction",
|
|
3
|
+
* plan §11). Pure function: detector contributions + classifications +
|
|
4
|
+
* watched artifact populations → normalized, deterministically ordered
|
|
5
|
+
* {@link ResourceGraph}.
|
|
6
|
+
*
|
|
7
|
+
* Determinism contract: same inputs → identical graph, byte-for-byte
|
|
8
|
+
* under `canonicalJson`. All output arrays carry a total order; all
|
|
9
|
+
* lookups iterate in sorted order; no clock, randomness, network, or
|
|
10
|
+
* filesystem access happens here.
|
|
11
|
+
*
|
|
12
|
+
* Normalization rules (ADR 0001):
|
|
13
|
+
* - D5.3: resource id = plane-qualified `plane.name`; `source` paths
|
|
14
|
+
* are repo-root-relative (posix, no `./`, no escape).
|
|
15
|
+
* - Plane resolution per resource: a valid `attributes.plane` from the
|
|
16
|
+
* detector. Resources with none stay id-less here; the deterministic
|
|
17
|
+
* classifier (`runClassification`, plan phase 5) resolves planes from
|
|
18
|
+
* classification signals and binds the effective classification —
|
|
19
|
+
* the manual classifications document no longer exists (ADR 0003 D5).
|
|
20
|
+
* - Invariant 9 / GF-06: claims, adapter files, and waivers pointing at
|
|
21
|
+
* removed/renamed resources surface as typed `stale` entries.
|
|
22
|
+
*/
|
|
23
|
+
import { z } from 'zod';
|
|
24
|
+
import { ClaimSchema } from '../schemas/claim.js';
|
|
25
|
+
import { LocationSchema } from '../schemas/common.js';
|
|
26
|
+
import { ResourceSchema } from '../schemas/resource.js';
|
|
27
|
+
import { WaiverSchema } from '../schemas/waiver.js';
|
|
28
|
+
import { isEvidenceOnlyKind, RESOURCE_NAME_ATTRIBUTE } from './schema.js';
|
|
29
|
+
import { buildSymbolTable, locationIndex, resolveInheritedName, sortUnresolved } from './symbols.js';
|
|
30
|
+
import { compareStrings, compareLocations } from './util.js';
|
|
31
|
+
/** Detector id stamped onto every graph-issued finding/entry. */
|
|
32
|
+
export const GRAPH_DETECTOR_ID = 'gateforge.graph';
|
|
33
|
+
/** Names must not break the `<plane>.<name>` id or `<id>:<contract>` grammar. */
|
|
34
|
+
const RESOURCE_NAME_PATTERN = /^[^.]+$/;
|
|
35
|
+
/**
|
|
36
|
+
* Builds the resource graph. See the module doc for the normalization
|
|
37
|
+
* rules; see `ResourceGraphSchema` for the output shape.
|
|
38
|
+
*
|
|
39
|
+
* Args:
|
|
40
|
+
* input: detector contributions and the claim/adapter/waiver
|
|
41
|
+
* populations to watch for staleness.
|
|
42
|
+
*
|
|
43
|
+
* Returns:
|
|
44
|
+
* ResourceGraph: normalized, sorted, byte-for-byte deterministic.
|
|
45
|
+
*/
|
|
46
|
+
export function buildResourceGraph(input) {
|
|
47
|
+
const findings = [];
|
|
48
|
+
const symbolTable = buildSymbolTable(input.detectors, findings);
|
|
49
|
+
const resources = [];
|
|
50
|
+
const unresolved = [];
|
|
51
|
+
const declaredNames = new Set();
|
|
52
|
+
for (const detector of input.detectors) {
|
|
53
|
+
ingestDetector(detector, symbolTable, resources, unresolved, declaredNames, findings);
|
|
54
|
+
}
|
|
55
|
+
const stale = collectStaleReferences(input, resources, declaredNames, idLessNames(resources, declaredNames), findings);
|
|
56
|
+
return {
|
|
57
|
+
schemaVersion: 1,
|
|
58
|
+
resources: sortResources(resources),
|
|
59
|
+
unresolved: sortUnresolved(unresolved),
|
|
60
|
+
findings: sortFindings([...findings, ...detectDuplicateIds(resources)]),
|
|
61
|
+
stale: sortStale(stale),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Declared names whose entry carries NO plane-qualified id — either
|
|
66
|
+
* the entry is id-less (unclassified) or it was excluded while
|
|
67
|
+
* malformed (bad path/name). References to such a resource bind by
|
|
68
|
+
* name so they stay visible but never read as stale.
|
|
69
|
+
*/
|
|
70
|
+
function idLessNames(resources, declaredNames) {
|
|
71
|
+
const idNames = new Set();
|
|
72
|
+
for (const resource of resources) {
|
|
73
|
+
if (resource.id !== null)
|
|
74
|
+
idNames.add(resource.name);
|
|
75
|
+
}
|
|
76
|
+
const idLess = new Set();
|
|
77
|
+
for (const name of declaredNames) {
|
|
78
|
+
if (!idNames.has(name))
|
|
79
|
+
idLess.add(name);
|
|
80
|
+
}
|
|
81
|
+
return idLess;
|
|
82
|
+
}
|
|
83
|
+
function ingestDetector(detector, symbolTable, resources, unresolved, declaredNames, findings) {
|
|
84
|
+
const symbols = symbolsOf(symbolTable, detector.detectorId);
|
|
85
|
+
const symbolAt = locationIndex(symbols);
|
|
86
|
+
// Inheritance resolution first: symbols the table can resolve emit
|
|
87
|
+
// concrete resources; `resolvedQnames` drives which of this
|
|
88
|
+
// detector's unresolved entries are retired this run.
|
|
89
|
+
const resolvedQnames = new Set();
|
|
90
|
+
for (const symbol of symbols) {
|
|
91
|
+
if (symbol.tableName !== null)
|
|
92
|
+
continue;
|
|
93
|
+
const resolution = resolveInheritedName(symbol, symbolTable);
|
|
94
|
+
if (!resolution.ok) {
|
|
95
|
+
if (symbol.tablenameUnresolved) {
|
|
96
|
+
unresolved.push({
|
|
97
|
+
reason: {
|
|
98
|
+
code: 'inherited_tablename_unresolved',
|
|
99
|
+
detail: `class '${symbol.qname}' inherits its tablename but the symbol table could not resolve it statically: ${resolution.cause}`,
|
|
100
|
+
location: symbol.location,
|
|
101
|
+
},
|
|
102
|
+
detectorId: GRAPH_DETECTOR_ID,
|
|
103
|
+
detectorVersion: null,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
resolvedQnames.add(symbol.qname);
|
|
109
|
+
emitEntry({
|
|
110
|
+
name: resolution.name,
|
|
111
|
+
kind: symbol.resourceKind,
|
|
112
|
+
source: symbol.source,
|
|
113
|
+
location: symbol.location,
|
|
114
|
+
attributes: {
|
|
115
|
+
[RESOURCE_NAME_ATTRIBUTE]: resolution.name,
|
|
116
|
+
classQname: symbol.qname,
|
|
117
|
+
provenance: `inherited-from-abstract:${resolution.baseQname}`,
|
|
118
|
+
},
|
|
119
|
+
}, detector, declaredNames, resources, unresolved, findings);
|
|
120
|
+
}
|
|
121
|
+
for (const rawResource of detector.resources) {
|
|
122
|
+
if (isEvidenceOnlyKind(rawResource.kind))
|
|
123
|
+
continue; // symbol-table / endpoint-compiler input, not a business resource
|
|
124
|
+
const parsed = ResourceSchema.safeParse(rawResource);
|
|
125
|
+
if (!parsed.success) {
|
|
126
|
+
findings.push({
|
|
127
|
+
code: 'INVALID_RESOURCE',
|
|
128
|
+
detail: `resource from ${detector.detectorId} failed schema validation: ${parsed.error.issues[0]?.message ?? 'unknown issue'}`,
|
|
129
|
+
locations: [validLocationOrUnknown(rawResource)],
|
|
130
|
+
detectorId: detector.detectorId,
|
|
131
|
+
});
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
const resource = parsed.data;
|
|
135
|
+
const name = resource.attributes[RESOURCE_NAME_ATTRIBUTE];
|
|
136
|
+
if (typeof name !== 'string' || name === '') {
|
|
137
|
+
unresolved.push({
|
|
138
|
+
reason: {
|
|
139
|
+
code: 'no_resource_name',
|
|
140
|
+
detail: `resource kind '${resource.kind}' at ${resource.location.file}:${resource.location.line} carries no '${RESOURCE_NAME_ATTRIBUTE}' attribute; identity cannot be normalized`,
|
|
141
|
+
location: resource.location,
|
|
142
|
+
},
|
|
143
|
+
detectorId: detector.detectorId,
|
|
144
|
+
detectorVersion: detector.detectorVersion,
|
|
145
|
+
});
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
emitEntry({
|
|
149
|
+
name,
|
|
150
|
+
kind: resource.kind,
|
|
151
|
+
source: resource.source,
|
|
152
|
+
location: resource.location,
|
|
153
|
+
attributes: resource.attributes,
|
|
154
|
+
}, detector, declaredNames, resources, unresolved, findings);
|
|
155
|
+
}
|
|
156
|
+
for (const detectorFinding of detector.findings) {
|
|
157
|
+
findings.push({
|
|
158
|
+
...detectorFinding,
|
|
159
|
+
locations: [...detectorFinding.locations].sort(compareLocations),
|
|
160
|
+
detectorId: detector.detectorId,
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
for (const reason of detector.unresolved) {
|
|
164
|
+
const symbol = symbolAt.get(locationKey(reason.location));
|
|
165
|
+
if (symbol !== undefined && resolvedQnames.has(symbol.qname))
|
|
166
|
+
continue;
|
|
167
|
+
unresolved.push({
|
|
168
|
+
reason,
|
|
169
|
+
detectorId: detector.detectorId,
|
|
170
|
+
detectorVersion: detector.detectorVersion,
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Normalizes one named declaration into a graph resource and appends
|
|
176
|
+
* it (or its typed diagnostic) to the accumulators. Failures produce
|
|
177
|
+
* findings/unresolved entries — never silent drops. The declared name
|
|
178
|
+
* is recorded even when the entry is excluded, so references to it do
|
|
179
|
+
* not read as stale while the resource is merely malformed.
|
|
180
|
+
*/
|
|
181
|
+
function emitEntry(seed, detector, declaredNames, resources, unresolved, findings) {
|
|
182
|
+
declaredNames.add(seed.name);
|
|
183
|
+
const path = normalizeSourcePath(seed.source);
|
|
184
|
+
if (!path.ok) {
|
|
185
|
+
findings.push({
|
|
186
|
+
code: 'NON_REPO_RELATIVE_PATH',
|
|
187
|
+
detail: `resource '${seed.name}' source '${seed.source}' is not repo-root-relative: ${path.error}`,
|
|
188
|
+
locations: [seed.location],
|
|
189
|
+
detectorId: detector.detectorId,
|
|
190
|
+
});
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
if (!RESOURCE_NAME_PATTERN.test(seed.name)) {
|
|
194
|
+
findings.push({
|
|
195
|
+
code: 'INVALID_RESOURCE_NAME',
|
|
196
|
+
detail: `resource name '${seed.name}' must not contain '.' or ':' (breaks the plane.name / id:contract grammars)`,
|
|
197
|
+
locations: [seed.location],
|
|
198
|
+
detectorId: detector.detectorId,
|
|
199
|
+
});
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
// Business meaning is bound ONLY by the deterministic classifier
|
|
203
|
+
// (`runClassification`, ADR 0003 D5) over detector signals. Here the
|
|
204
|
+
// graph binds detector plane evidence alone: a lone valid
|
|
205
|
+
// `attributes.plane` qualifies the identity; resources without any
|
|
206
|
+
// plane evidence stay id-less until the classifier resolves one
|
|
207
|
+
// (never guessed across tenant/master/global).
|
|
208
|
+
const attributePlane = seed.attributes['plane'];
|
|
209
|
+
const attributePlaneValid = attributePlane === 'tenant' || attributePlane === 'master' || attributePlane === 'global';
|
|
210
|
+
resources.push({
|
|
211
|
+
schemaVersion: 1,
|
|
212
|
+
id: attributePlaneValid ? `${String(attributePlane)}.${seed.name}` : null,
|
|
213
|
+
name: seed.name,
|
|
214
|
+
plane: attributePlaneValid ? attributePlane : null,
|
|
215
|
+
kind: seed.kind,
|
|
216
|
+
source: path.path,
|
|
217
|
+
location: seed.location,
|
|
218
|
+
exposure: null,
|
|
219
|
+
classification: null,
|
|
220
|
+
// The classifier stamps this sibling field when it decides; the
|
|
221
|
+
// graph itself never asserts business meaning.
|
|
222
|
+
classificationTrace: null,
|
|
223
|
+
detector: { id: detector.detectorId, version: detector.detectorVersion },
|
|
224
|
+
attributes: seed.attributes,
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Normalizes a detector-supplied source path to repo-root-relative
|
|
229
|
+
* posix form: backslashes become slashes, leading `./` is stripped.
|
|
230
|
+
* Absolute, drive-qualified, and `..`-escaping paths are rejected with
|
|
231
|
+
* a single-cause error.
|
|
232
|
+
*/
|
|
233
|
+
function normalizeSourcePath(raw) {
|
|
234
|
+
let path = raw.replaceAll('\\', '/');
|
|
235
|
+
while (path.startsWith('./'))
|
|
236
|
+
path = path.slice(2);
|
|
237
|
+
if (path === '')
|
|
238
|
+
return { ok: false, error: 'path is empty' };
|
|
239
|
+
if (path.startsWith('/'))
|
|
240
|
+
return { ok: false, error: 'absolute paths are not repo-root-relative' };
|
|
241
|
+
if (/^[A-Za-z]:/.test(path))
|
|
242
|
+
return { ok: false, error: 'drive-qualified paths are not repo-root-relative' };
|
|
243
|
+
if (path === '..' || path.startsWith('../') || path.includes('/../') || path.endsWith('/..')) {
|
|
244
|
+
return { ok: false, error: "paths escaping the repo root ('..') are not repo-root-relative" };
|
|
245
|
+
}
|
|
246
|
+
return { ok: true, path };
|
|
247
|
+
}
|
|
248
|
+
function symbolsOf(table, detectorId) {
|
|
249
|
+
const symbols = [];
|
|
250
|
+
for (const symbol of table.byQname.values()) {
|
|
251
|
+
if (symbol.detectorId === detectorId)
|
|
252
|
+
symbols.push(symbol);
|
|
253
|
+
}
|
|
254
|
+
symbols.sort((a, b) => compareStrings(a.source, b.source) || compareLocations(a.location, b.location));
|
|
255
|
+
return symbols;
|
|
256
|
+
}
|
|
257
|
+
function locationKey(location) {
|
|
258
|
+
return `${location.file}:${location.line}`;
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Best-effort location from a resource that FAILED schema validation:
|
|
262
|
+
* the raw value is untrusted, so anything that does not itself parse
|
|
263
|
+
* as a Location degrades to a synthetic `<unknown>` location.
|
|
264
|
+
*/
|
|
265
|
+
function validLocationOrUnknown(resource) {
|
|
266
|
+
const parsed = LocationSchema.safeParse(resource.location);
|
|
267
|
+
return parsed.success
|
|
268
|
+
? parsed.data
|
|
269
|
+
: { file: '<unknown>', line: 1, col: 0 };
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Duplicate-table-name detection (GF-20 groundwork): group normalized
|
|
273
|
+
* entries by id (`plane.name`). Any id declared by more than one entry
|
|
274
|
+
* — across files or within one file — yields one finding listing every
|
|
275
|
+
* declaration location. The same name on different planes is
|
|
276
|
+
* legitimate (plane qualification exists precisely to disambiguate it)
|
|
277
|
+
* and is not flagged.
|
|
278
|
+
*/
|
|
279
|
+
function detectDuplicateIds(resources) {
|
|
280
|
+
const byId = new Map();
|
|
281
|
+
for (const resource of resources) {
|
|
282
|
+
if (resource.id === null)
|
|
283
|
+
continue;
|
|
284
|
+
const bucket = byId.get(resource.id);
|
|
285
|
+
if (bucket === undefined)
|
|
286
|
+
byId.set(resource.id, [resource]);
|
|
287
|
+
else
|
|
288
|
+
bucket.push(resource);
|
|
289
|
+
}
|
|
290
|
+
const findings = [];
|
|
291
|
+
for (const id of [...byId.keys()].sort(compareStrings)) {
|
|
292
|
+
const bucket = byId.get(id);
|
|
293
|
+
if (bucket === undefined || bucket.length < 2)
|
|
294
|
+
continue;
|
|
295
|
+
const first = bucket[0];
|
|
296
|
+
if (first === undefined)
|
|
297
|
+
continue;
|
|
298
|
+
const locations = bucket.map((r) => r.location).sort(compareLocations);
|
|
299
|
+
const files = [...new Set(bucket.map((r) => r.source))].sort(compareStrings);
|
|
300
|
+
findings.push({
|
|
301
|
+
code: 'DUPLICATE_TABLE_NAME',
|
|
302
|
+
detail: `table name '${first.name}' declared ${bucket.length} time(s) across ${files.length} file(s) in plane '${String(first.plane)}' (files: ${files.join(', ')}); declarations collapse onto one identity — review required`,
|
|
303
|
+
locations,
|
|
304
|
+
detectorId: GRAPH_DETECTOR_ID,
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
return findings;
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Stale-reference validation (invariant 9 / GF-06): every watched
|
|
311
|
+
* artifact still pointing at a removed/renamed resource is reported.
|
|
312
|
+
* Matching rules:
|
|
313
|
+
* - claims, adapters, and waivers reference FINAL plane-qualified ids
|
|
314
|
+
* and match strictly — a plane change or rename is exactly the
|
|
315
|
+
* rename invariant 9 exists to catch. A reference also binds when
|
|
316
|
+
* its resource NAME was declared but currently carries no id
|
|
317
|
+
* (unclassified, or excluded while malformed): the resource exists,
|
|
318
|
+
* so references must not rot while the blocking entry is being fixed.
|
|
319
|
+
*/
|
|
320
|
+
function collectStaleReferences(input, resources, declaredNames, idLessNames, findings) {
|
|
321
|
+
const stale = [];
|
|
322
|
+
const knownIds = new Set();
|
|
323
|
+
for (const resource of resources) {
|
|
324
|
+
if (resource.id !== null)
|
|
325
|
+
knownIds.add(resource.id);
|
|
326
|
+
}
|
|
327
|
+
const bindsResource = (referenceId) => {
|
|
328
|
+
if (knownIds.has(referenceId))
|
|
329
|
+
return true;
|
|
330
|
+
for (const name of idLessNames) {
|
|
331
|
+
if (referenceId === name || referenceId.endsWith(`.${name}`))
|
|
332
|
+
return true;
|
|
333
|
+
}
|
|
334
|
+
return false;
|
|
335
|
+
};
|
|
336
|
+
if (input.claims !== undefined) {
|
|
337
|
+
for (const raw of input.claims) {
|
|
338
|
+
const parsed = ClaimSchema.safeParse(raw);
|
|
339
|
+
if (!parsed.success) {
|
|
340
|
+
findings.push(invalidArtifactFinding('INVALID_CLAIM', 'claim', parsed.error));
|
|
341
|
+
continue;
|
|
342
|
+
}
|
|
343
|
+
const claim = parsed.data;
|
|
344
|
+
const resourceId = claim.obligationId.slice(0, claim.obligationId.indexOf(':'));
|
|
345
|
+
if (!bindsResource(resourceId)) {
|
|
346
|
+
stale.push({
|
|
347
|
+
kind: 'claim',
|
|
348
|
+
reference: claim.obligationId,
|
|
349
|
+
detail: `claim by test '${claim.testId}' references resource '${resourceId}' which no longer exists`,
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
if (input.adapters !== undefined) {
|
|
355
|
+
for (const adapter of input.adapters) {
|
|
356
|
+
const name = adapterName(adapter);
|
|
357
|
+
if (!bindsResource(name)) {
|
|
358
|
+
stale.push({
|
|
359
|
+
kind: 'adapter',
|
|
360
|
+
reference: name,
|
|
361
|
+
detail: `adapter file '${adapter}' references resource '${name}' which no longer exists`,
|
|
362
|
+
});
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
if (input.waivers !== undefined) {
|
|
367
|
+
for (const raw of input.waivers) {
|
|
368
|
+
const parsed = WaiverSchema.safeParse(raw);
|
|
369
|
+
if (!parsed.success) {
|
|
370
|
+
findings.push(invalidArtifactFinding('INVALID_WAIVER', 'waiver', parsed.error));
|
|
371
|
+
continue;
|
|
372
|
+
}
|
|
373
|
+
const waiver = parsed.data;
|
|
374
|
+
if (!bindsResource(waiver.scope.resourceId)) {
|
|
375
|
+
stale.push({
|
|
376
|
+
kind: 'waiver',
|
|
377
|
+
reference: waiver.scope.resourceId,
|
|
378
|
+
detail: `waiver owned by '${waiver.owner}' is scoped to resource '${waiver.scope.resourceId}' which no longer exists`,
|
|
379
|
+
});
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
return stale;
|
|
384
|
+
}
|
|
385
|
+
function invalidArtifactFinding(code, what, error) {
|
|
386
|
+
return {
|
|
387
|
+
code,
|
|
388
|
+
detail: `watched ${what} failed schema validation: ${error.issues[0]?.message ?? 'unknown issue'}`,
|
|
389
|
+
locations: [],
|
|
390
|
+
detectorId: GRAPH_DETECTOR_ID,
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
/** Strips adapter paths/extensions: `.gateforge/adapters/<id>.mjs` → `<id>`. */
|
|
394
|
+
function adapterName(adapter) {
|
|
395
|
+
const base = adapter.replaceAll('\\', '/').split('/').at(-1) ?? adapter;
|
|
396
|
+
return base.replace(/\.mjs$/, '');
|
|
397
|
+
}
|
|
398
|
+
function sortResources(resources) {
|
|
399
|
+
return [...resources].sort((a, b) => {
|
|
400
|
+
if (a.id !== null && b.id !== null) {
|
|
401
|
+
const byId = compareStrings(a.id, b.id);
|
|
402
|
+
if (byId !== 0)
|
|
403
|
+
return byId;
|
|
404
|
+
}
|
|
405
|
+
if (a.id !== null)
|
|
406
|
+
return -1; // id-bearing entries sort before id-less ones
|
|
407
|
+
if (b.id !== null)
|
|
408
|
+
return 1;
|
|
409
|
+
return (compareStrings(a.name, b.name) ||
|
|
410
|
+
compareStrings(a.source, b.source) ||
|
|
411
|
+
compareLocations(a.location, b.location));
|
|
412
|
+
});
|
|
413
|
+
}
|
|
414
|
+
function sortFindings(findings) {
|
|
415
|
+
return [...findings].sort((a, b) => compareStrings(a.code, b.code) ||
|
|
416
|
+
compareStrings(a.detail, b.detail) ||
|
|
417
|
+
compareStrings(a.detectorId, b.detectorId) ||
|
|
418
|
+
compareLocations(a.locations[0] ?? { file: '', line: 0, col: 0 }, b.locations[0] ?? { file: '', line: 0, col: 0 }));
|
|
419
|
+
}
|
|
420
|
+
function sortStale(stale) {
|
|
421
|
+
return [...stale].sort((a, b) => compareStrings(a.kind, b.kind) || compareStrings(a.reference, b.reference));
|
|
422
|
+
}
|
|
423
|
+
//# sourceMappingURL=build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/graph/build.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resource graph (G2): detector-output ingestion, id/path
|
|
3
|
+
* normalization, symbol-table inheritance resolution, duplicate-table
|
|
4
|
+
* detection, and stale-reference validation (invariant 9 / GF-06).
|
|
5
|
+
*/
|
|
6
|
+
export { CLASS_SYMBOL_KIND, EVIDENCE_ONLY_RESOURCE_KINDS, HTTP_ENDPOINT_RESOURCE_KIND, isEvidenceOnlyKind, RESOURCE_NAME_ATTRIBUTE, ClassSymbolAttributesSchema, DetectorOutputSchema, FindingSchema, GraphFindingSchema, GraphResourceSchema, GraphUnresolvedSchema, ResourceGraphSchema, StaleReferenceKindSchema, StaleReferenceSchema, } from './schema.js';
|
|
7
|
+
export type { ClassSymbolAttributes, DetectorOutput, Finding, GraphFinding, GraphResource, GraphUnresolved, ResourceGraph, ResourceGraphInput, StaleReference, StaleReferenceKind, } from './schema.js';
|
|
8
|
+
export { buildResourceGraph, GRAPH_DETECTOR_ID } from './build.js';
|
|
9
|
+
export { buildSymbolTable, locationIndex, resolveInheritedName, sortUnresolved, } from './symbols.js';
|
|
10
|
+
export type { ClassSymbol, InheritanceResolution, SymbolTable } from './symbols.js';
|
|
11
|
+
export { compareLocations, compareStrings } from './util.js';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/graph/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EACL,iBAAiB,EACjB,4BAA4B,EAC5B,2BAA2B,EAC3B,kBAAkB,EAClB,uBAAuB,EACvB,2BAA2B,EAC3B,oBAAoB,EACpB,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,qBAAqB,EACrB,cAAc,EACd,OAAO,EACP,YAAY,EACZ,aAAa,EACb,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,oBAAoB,EACpB,cAAc,GACf,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,WAAW,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resource graph (G2): detector-output ingestion, id/path
|
|
3
|
+
* normalization, symbol-table inheritance resolution, duplicate-table
|
|
4
|
+
* detection, and stale-reference validation (invariant 9 / GF-06).
|
|
5
|
+
*/
|
|
6
|
+
export { CLASS_SYMBOL_KIND, EVIDENCE_ONLY_RESOURCE_KINDS, HTTP_ENDPOINT_RESOURCE_KIND, isEvidenceOnlyKind, RESOURCE_NAME_ATTRIBUTE, ClassSymbolAttributesSchema, DetectorOutputSchema, FindingSchema, GraphFindingSchema, GraphResourceSchema, GraphUnresolvedSchema, ResourceGraphSchema, StaleReferenceKindSchema, StaleReferenceSchema, } from './schema.js';
|
|
7
|
+
export { buildResourceGraph, GRAPH_DETECTOR_ID } from './build.js';
|
|
8
|
+
export { buildSymbolTable, locationIndex, resolveInheritedName, sortUnresolved, } from './symbols.js';
|
|
9
|
+
export { compareLocations, compareStrings } from './util.js';
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/graph/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EACL,iBAAiB,EACjB,4BAA4B,EAC5B,2BAA2B,EAC3B,kBAAkB,EAClB,uBAAuB,EACvB,2BAA2B,EAC3B,oBAAoB,EACpB,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAarB,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,oBAAoB,EACpB,cAAc,GACf,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC"}
|