@descryy/runtime-evidence-correlation 0.3.0 → 0.4.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 ADDED
@@ -0,0 +1,6 @@
1
+ Copyright (c) Descry
2
+
3
+ All rights reserved. This software is proprietary and confidential.
4
+ No license, express or implied, to reproduce, distribute, modify, or
5
+ create derivative works is granted except as explicitly agreed in
6
+ writing.
@@ -1,10 +1,3 @@
1
- /**
2
- * `Evidence.collectorVersion`'s source for the `source: "harness"` rows this
3
- * package writes when the correlation pass itself breaks. Read from this
4
- * package's own `package.json` rather than hand-duplicated into a second
5
- * string that can drift from what actually shipped — the same rule
6
- * `packages/orchestrator/src/collector-version.ts` already states for the
7
- * orchestrator's own direct emissions.
8
- */
1
+ /** `Evidence.collectorVersion` for `source: "harness"` rows. Read from `package.json`, not hand-duplicated, so it can't drift from what shipped. */
9
2
  export declare const CORRELATOR_VERSION: string;
10
3
  //# sourceMappingURL=collector-version.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"collector-version.d.ts","sourceRoot":"","sources":["../src/collector-version.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,eAAO,MAAM,kBAAkB,EAAE,MAA6E,CAAC"}
1
+ {"version":3,"file":"collector-version.d.ts","sourceRoot":"","sources":["../src/collector-version.ts"],"names":[],"mappings":"AAAA,oJAAoJ;AAMpJ,eAAO,MAAM,kBAAkB,EAAE,MAA6E,CAAC"}
@@ -1,11 +1,4 @@
1
- /**
2
- * `Evidence.collectorVersion`'s source for the `source: "harness"` rows this
3
- * package writes when the correlation pass itself breaks. Read from this
4
- * package's own `package.json` rather than hand-duplicated into a second
5
- * string that can drift from what actually shipped — the same rule
6
- * `packages/orchestrator/src/collector-version.ts` already states for the
7
- * orchestrator's own direct emissions.
8
- */
1
+ /** `Evidence.collectorVersion` for `source: "harness"` rows. Read from `package.json`, not hand-duplicated, so it can't drift from what shipped. */
9
2
  import { createRequire } from "node:module";
10
3
  const require = createRequire(import.meta.url);
11
4
  export const CORRELATOR_VERSION = require("../package.json").version;
@@ -1 +1 @@
1
- {"version":3,"file":"collector-version.js","sourceRoot":"","sources":["../src/collector-version.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,MAAM,CAAC,MAAM,kBAAkB,GAAY,OAAO,CAAC,iBAAiB,CAAkC,CAAC,OAAO,CAAC"}
1
+ {"version":3,"file":"collector-version.js","sourceRoot":"","sources":["../src/collector-version.ts"],"names":[],"mappings":"AAAA,oJAAoJ;AAEpJ,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,MAAM,CAAC,MAAM,kBAAkB,GAAY,OAAO,CAAC,iBAAiB,CAAkC,CAAC,OAAO,CAAC"}
@@ -1,132 +1,66 @@
1
1
  /**
2
- * **The production correlation pass — the caller RT-230 found missing.**
3
- *
4
- * `graph-correlator` answers "which graph node is this evidence about" as
5
- * pure functions over a `SqlDriver`. `EvidenceStore.attribute()` makes an
6
- * answer durable. Between those two there was nothing: every real
7
- * `attribute()` call site in this repository lived inside a `test/` file,
8
- * and the three per-package wrappers
9
- * (`openapi-observation/endpoint-comparison.ts`,
10
- * `database-observation/graph-mapping.ts`, `test-runner/graph-mapping.ts`)
11
- * each say in their own doc comment that attribution needs an `evidenceId`
12
- * that only exists after `store.write()` returns — "outside this
13
- * collector's own reach. The caller that already holds both the store and
14
- * the graph `driver` attributes; this only resolves."
15
- *
16
- * **This module is that caller.** It is the one shipped thing that owns an
17
- * `EvidenceStore` and a graph `driver` together and performs
18
- * resolve-then-attribute, so a real Descry run produces evidence that is
19
- * *correlated* and not merely *correlatable*.
20
- *
21
- * ## Why it is a separate module and not part of `runInstrumentedExecution`
22
- *
23
- * `instrumented-execution.ts`'s own header states the boundary: it "does not
24
- * decide whether a finding exists, does not correlate to graph nodes, and
25
- * does not drive a browser. Those are separate stages with separate
26
- * contracts, and folding them in here would make the one place that
27
- * assembles the runtime also the place that judges it." That boundary is
28
- * kept. This is a **post-run pass**, run after an execution's evidence is in
29
- * the store, taking the graph as a parameter — the same way every other
30
- * production function in this repo takes a `SqlDriver` it does not open.
31
- * The stage order the architecture diagram (§3) already draws — collectors →
32
- * evidence store → graph correlator → runtime findings — is the order these
33
- * packages now depend in, with nothing inverted: this package depends on
34
- * `graph-correlator`, and `finding` depends on neither.
35
- *
36
- * ## What it does NOT do, deliberately
37
- *
38
- * It does not compose findings (RT-027 places that in the finding layer, and
39
- * `composeFinding` is where it lives). It does not open a graph, does not
40
- * walk one (`traceApi` is the caller's call, RT-026), and does not decide
41
- * confidence. It resolves and it attributes; that is the whole job.
42
- *
43
- * ## The OpenAPI family, wired (RT-232) — and how the earlier objection was met
44
- *
45
- * This header used to say the OpenAPI comparison family
46
- * (`openapi-observation`'s `compareObservedEndpoint` /
47
- * `compareObservedExchange`) was left out because "folding a conformance
48
- * verdict into an attribution pass would put two different claims in one
49
- * output." That objection was right about the risk and wrong about the
50
- * remedy: the two claims must not share **an output**, which is not the same
51
- * as not sharing **a pass**. So the family is wired, and the separation is
52
- * structural rather than by omission:
53
- *
54
- * - **One graph query, not two.** `compareObservedEndpoint` *calls*
55
- * `resolveEndpointNode` and returns the very same node under
56
- * `documented`. Running both would ask the graph the identical question
57
- * twice and let two families race for `Evidence.graphNodeId`. The HTTP
58
- * family therefore routes **through** the wrapper, which is strictly more
59
- * informative and resolves exactly once.
60
- * - **Identity keeps its own vocabulary.** `attributed` and `refusals` are
61
- * unchanged: a resolved endpoint is `family: "endpoint"`,
62
- * `method: "request-url"`; a miss is `not-found`, the same discriminant
63
- * `resolveEndpointNode` itself returns, carrying the wrapper's reason
64
- * verbatim. `undocumented` / `wrong-method` are contract words, and they
65
- * stay out of the identity channel.
66
- * - **Conformance is its own field** (`conformance`, `CorrelationConformance`),
67
- * never persisted, never written to the evidence stream, never an
68
- * `EvidenceAttribution`. A reader that only cares about identity can
69
- * ignore it entirely, which is what "not one output" has to mean to be
70
- * worth anything.
71
- *
72
- * **What the exchange half needs, and what supplies it.** `compareObservedExchange`
73
- * additionally consumes an observed **status** and, optionally, the request /
74
- * response **bodies** — all three come off evidence that already exists:
75
- * `InboundProxy` emits `{method, path, status}` on `NETWORK_RESPONSE` and
76
- * `HTTP_ERROR`, and `BrowserNetworkCollector`'s `HTTP_ERROR` adds the captured
77
- * response `body`. No declared OpenAPI *document* is read here or anywhere at
78
- * runtime: the contract is whatever `adapter-openapi` already wrote into the
79
- * graph (`API_ROUTE --SERVES_API--> API_ENDPOINT --`, `--USES_TYPE(roles)--> DTO`),
80
- * so nothing new has to be supplied by a run. Two honest limits follow, and are
81
- * reported rather than papered over:
82
- *
83
- * 1. A graph whose `API_ENDPOINT` nodes came from a **framework extractor**
84
- * rather than an OpenAPI document has no DTOs at all, and every declared
85
- * role reads empty — which `compareObservedExchange` correctly reports as
86
- * `statusSurprising: true`, meaning "this operation declares no shape for
87
- * an outcome like this one." Read alone that is indistinguishable from a
88
- * contract violation, so `contractSchemasDeclared` is reported beside it:
89
- * `false` means there was no contract to violate.
90
- * 2. A `NETWORK_REQUEST` carries a request body (`postData`) but no status, so
91
- * only the endpoint half runs for it — request-body conformance needs the
92
- * exchange, and a status is not invented to obtain one.
93
- *
94
- * Bodies are read **after** `EvidenceStore` redaction, which re-serializes a
95
- * JSON body with sensitive values replaced by a marker string. Field
96
- * *presence* survives that intact; a `type-mismatch` on a non-string-typed
97
- * field whose name matches a credential/PII pattern would be redaction's
98
- * artifact, not the app's bug.
99
- *
100
- * ## Families still not wired here, named rather than left implicit
101
- *
102
- * **`resolveObservedFrontendCaller`** is deliberately excluded, not
103
- * pending. It answers "which frontend function calls this endpoint", which
104
- * is a question about a *node*, not about an evidence item, and it falls
105
- * back to a structural answer when the observed stack does not resolve.
106
- * Attributing evidence to a structurally-derived caller would break the
107
- * rule the whole confirmed/strongly-supported gate rests on: a named node
108
- * must be named by the observation itself.
2
+ * The production correlation pass (RT-230): owns both an `EvidenceStore` and
3
+ * a graph `driver` and performs resolve-then-attribute. Before this, every
4
+ * real `attribute()` call site lived only in `test/` files — the per-package
5
+ * wrappers (`openapi-observation`, `database-observation`, `test-runner`)
6
+ * can't call it themselves since it needs an `evidenceId` that only exists
7
+ * after `store.write()` returns.
8
+ *
9
+ * Kept separate from `runInstrumentedExecution` per that module's own
10
+ * boundary (does not correlate to graph nodes). This is a post-run pass,
11
+ * taking the graph as a parameter like every other production function here.
12
+ * Stage order (architecture §3): collectors → evidence store → graph
13
+ * correlator → runtime findings — this package depends on `graph-correlator`;
14
+ * `finding` depends on neither.
15
+ *
16
+ * Does NOT: compose findings (RT-027, that's `finding`'s job), open or walk
17
+ * the graph itself (`traceApi` is the caller's call, RT-026), or decide
18
+ * confidence. Resolves and attributes, nothing else.
19
+ *
20
+ * ## OpenAPI family (RT-232)
21
+ *
22
+ * Routes through `openapi-observation`'s wrapper rather than calling
23
+ * `resolveEndpointNode` directly, so identity resolves once instead of two
24
+ * families racing for `Evidence.graphNodeId`. `conformance`
25
+ * (`CorrelationConformance`) is a separate field, never persisted and never
26
+ * written to the evidence stream — a contract verdict isn't an observation
27
+ * about the run.
28
+ *
29
+ * Exchange comparison needs an observed status plus bodies, all read off
30
+ * existing evidence. No OpenAPI document is read at runtime — the contract
31
+ * is whatever `adapter-openapi` already wrote into the graph. Two disclosed
32
+ * limits: (1) a framework-extractor `API_ENDPOINT` has no DTOs, so
33
+ * `statusSurprising: true` pairs with `contractSchemasDeclared: false` (no
34
+ * contract to violate, not a violation); (2) a request with `postData` but
35
+ * no status only runs the endpoint half — a status is never invented.
36
+ *
37
+ * Bodies are read after `EvidenceStore` redaction; field *presence*
38
+ * survives, so a `type-mismatch` on a credential/PII-named field may be
39
+ * redaction's artifact, not the app's bug.
40
+ *
41
+ * `resolveObservedFrontendCaller` is deliberately excluded, not pending: it
42
+ * answers a question about a *node*, falling back to a structural guess when
43
+ * the stack doesn't resolve — attributing to that would break the rule the
44
+ * confirmed/strongly-supported gate rests on: a named node must be named by
45
+ * the observation itself.
109
46
  *
110
47
  * ## Refusals stay refusals (RT-229)
111
48
  *
112
49
  * `not-found` / `ambiguous` / `line-mismatch` / `producer-emitted-none` /
113
- * `no-table` / `no-location` are correctly-typed **honest refusals**, and
50
+ * `no-table` / `no-location` are honest refusals, carried through verbatim —
114
51
  * RT-229 ruled that writing `COLLECTOR_ERROR` for one would be a false
115
- * failure signal. They are carried through into `refusals`, verbatim
116
- * outcome and reason, and nothing about them touches the evidence stream.
117
- * The only thing that becomes `COLLECTOR_ERROR` is a resolver or the store
118
- * genuinely **throwing** — see `harnessErrors` below.
52
+ * failure signal. Only a resolver or the store actually **throwing** becomes
53
+ * `COLLECTOR_ERROR` (see `harnessErrors` below).
119
54
  */
120
55
  import type { Evidence } from "@descryy/runtime-contracts";
121
56
  import type { EvidenceStore } from "@descryy/runtime-evidence-store";
122
57
  import type { SqlDriver } from "@descryy/core";
123
58
  import { type EndpointComparison, type StatusBucket } from "@descryy/runtime-openapi-observation";
124
59
  /**
125
- * Which resolver answered (or refused). Not a confidence ranking — the
126
- * families are disjoint by the evidence they read, except that
127
- * `log-text-endpoint` is a *second* naming a backend line can carry
128
- * alongside its own stack frame (RT-052's case: one observation, two real
129
- * graph entities).
60
+ * Which resolver answered (or refused). Not a confidence ranking — families
61
+ * are disjoint by evidence read, except `log-text-endpoint` is a *second*
62
+ * naming a backend line can carry alongside its own stack frame (RT-052:
63
+ * one observation, two real graph entities).
130
64
  */
131
65
  export type CorrelationFamily = "endpoint" | "symbol" | "database-table" | "test-case" | "log-text-endpoint";
132
66
  /**
@@ -134,13 +68,10 @@ export type CorrelationFamily = "endpoint" | "symbol" | "database-table" | "test
134
68
  * its symbols belong to, and the on-disk root its runtime paths are
135
69
  * absolute against.
136
70
  *
137
- * **Required, never defaulted.** `resolveSymbolNode` takes `repo` as a
138
- * required parameter precisely because there is no honest default, and a
139
- * pass that guessed one would resolve the wrong repository's identically
140
- * named file — RT-031's identity-proxy error at the correlation layer. A
141
- * service with no entry here has its symbol-family and test-family evidence
142
- * left alone and its name reported in `unscopedServices`; it is never
143
- * resolved against a repository nobody named.
71
+ * Required, never defaulted — a guessed repo could resolve the wrong
72
+ * repository's identically named file (RT-031). A service with no entry
73
+ * here has its symbol/test evidence left alone and named in
74
+ * `unscopedServices` rather than resolved against a guess.
144
75
  */
145
76
  export interface CorrelationScope {
146
77
  readonly repo: string;
@@ -150,52 +81,46 @@ export interface CorrelationScope {
150
81
  readonly cwd?: string;
151
82
  }
152
83
  export interface CorrelateExecutionInput {
153
- /** The store the execution's evidence was written to. Provided, never constructed, so the caller owns its lifetime — same rule `InstrumentedExecutionInput.store` states. */
84
+ /** Provided, never constructed — caller owns its lifetime. */
154
85
  readonly store: EvidenceStore;
155
- /** The `descry-core` graph this evidence is resolved against. Consumed, never modified. */
86
+ /** The `descry-core` graph evidence resolves against. Consumed, never modified. */
156
87
  readonly driver: SqlDriver;
157
88
  readonly executionId: string;
158
- /** Service name (`Evidence.service`) → the repository scope its symbols resolve in. */
89
+ /** Service name (`Evidence.service`) → repository scope its symbols resolve in. */
159
90
  readonly scopeByService?: Readonly<Record<string, CorrelationScope>>;
160
91
  }
161
92
  /**
162
93
  * One (evidence, node) association this pass made. Structurally an
163
- * `EvidenceAttribution` (`@descryy/runtime-finding`) — `evidenceId`,
164
- * `graphNodeId`, `method` — so `secondary` can be handed straight to
165
- * `composeFinding`'s fourth argument without a translation step. That
166
- * assignability is asserted by an executing test rather than by a
167
- * dependency, because this package must not depend on the governance layer
168
- * it feeds (RT-027: resolution has no opinion on confidence).
94
+ * `EvidenceAttribution` (`@descryy/runtime-finding`) so `secondary` can go
95
+ * straight into `composeFinding`'s fourth argument. Assignability is
96
+ * asserted by a test rather than a dependency — this package must not
97
+ * depend on the governance layer it feeds (RT-027).
169
98
  */
170
99
  export interface CorrelationAttribution {
171
100
  readonly evidenceId: string;
172
101
  readonly graphNodeId: string;
173
- /** How the association was made — `EvidenceAttribution.method`'s own vocabulary: `"request-url"`, `"stack-frame"`, `"query-table"`, `"test-location"`, `"log-text-endpoint"`. */
102
+ /** `EvidenceAttribution.method` vocabulary: `"request-url"`, `"stack-frame"`, `"query-table"`, `"test-location"`, `"log-text-endpoint"`. */
174
103
  readonly method: string;
175
104
  readonly family: CorrelationFamily;
176
- /** True when this is the naming persisted onto `Evidence.graphNodeId`; false when it is a second naming the store's single column cannot hold. */
105
+ /** True if persisted onto `Evidence.graphNodeId`; false if it's a second naming the store's one column can't hold. */
177
106
  readonly persisted: boolean;
178
107
  }
179
108
  /**
180
- * A resolver looked and could not answer. **Never an error.** The `outcome`
181
- * is the resolver's own discriminant, unchanged, and the `reason` is the
182
- * resolver's own sentence — this pass adds no interpretation of its own to
183
- * either.
109
+ * A resolver looked and could not answer — never an error. `outcome` and
110
+ * `reason` are the resolver's own, unchanged.
184
111
  */
185
112
  export interface CorrelationRefusal {
186
113
  readonly evidenceId: string;
187
114
  readonly family: CorrelationFamily;
188
- /** A resolver's own discriminant — `"not-found"`, `"ambiguous"`, `"line-mismatch"`, `"producer-emitted-none"`, `"no-table"`, `"no-location"` — or one of this pass's two input refusals, `"no-method"` and `"no-path"`, which say the observation itself did not name enough to look anything up. */
115
+ /** A resolver's discriminant (`"not-found"`, `"ambiguous"`, `"line-mismatch"`, `"producer-emitted-none"`, `"no-table"`, `"no-location"`), or this pass's own `"no-method"`/`"no-path"` when the observation didn't name enough to look up. */
189
116
  readonly outcome: string;
190
117
  readonly reason: string;
191
118
  }
192
119
  /**
193
- * A resolver or the store **threw** — not "looked and could not answer",
194
- * but the correlation machinery itself breaking. Each distinct failure is
195
- * also written into the evidence stream as `COLLECTOR_ERROR` /
196
- * `source: "harness"`, which is the whole point: RT-229 declined to add
197
- * this wrap because there was no production call site to put it at, and
198
- * this is that call site.
120
+ * A resolver or the store **threw** — the correlation machinery itself
121
+ * breaking, not a lookup miss. Each distinct failure is written into the
122
+ * evidence stream as `COLLECTOR_ERROR` / `source: "harness"` — RT-229
123
+ * declined this wrap for lack of a call site; this is that call site.
199
124
  */
200
125
  export interface CorrelationHarnessError {
201
126
  /** The `evidenceId` of the `COLLECTOR_ERROR` row written for this failure. */
@@ -205,15 +130,13 @@ export interface CorrelationHarnessError {
205
130
  readonly occurrences: number;
206
131
  }
207
132
  /**
208
- * What `openapi-observation` concluded about one observed HTTP item's
209
- * **contract**, as opposed to its identity. Every field is the comparison's
210
- * own discriminant or boolean, carried verbatim — this pass derives exactly
211
- * one value of its own, `contractSchemasDeclared`, and it is a read of
212
- * `ExchangeComparison.declaredRoles`, not a judgement.
133
+ * What `openapi-observation` concluded about one HTTP item's **contract**,
134
+ * as opposed to its identity. Every field is carried verbatim from the
135
+ * comparison except `contractSchemasDeclared`, a read of
136
+ * `ExchangeComparison.declaredRoles`.
213
137
  *
214
- * **Nothing here is ever persisted or written into the evidence stream.** A
215
- * contract verdict is a claim about the *contract*, not an observation about
216
- * the run, and the evidence stream holds observations.
138
+ * Never persisted or written to the evidence stream — a contract verdict
139
+ * isn't an observation about the run.
217
140
  */
218
141
  export interface CorrelationConformance {
219
142
  readonly evidenceId: string;
@@ -231,10 +154,9 @@ export interface CorrelationConformance {
231
154
  readonly requestSchema: string | null;
232
155
  readonly responseSchema: string | null;
233
156
  /**
234
- * Whether the resolved endpoint's serving routes declare **any** DTO, in any
235
- * role. `false` with `statusSurprising: true` means "no contract is indexed
236
- * for this endpoint", never "the contract was violated". `null` when no
237
- * exchange comparison ran.
157
+ * Whether the resolved endpoint declares **any** DTO, any role. `false`
158
+ * with `statusSurprising: true` means "no contract indexed", never "the
159
+ * contract was violated". `null` when no exchange comparison ran.
238
160
  */
239
161
  readonly contractSchemasDeclared: boolean | null;
240
162
  }
@@ -1 +1 @@
1
- {"version":3,"file":"correlate-execution.d.ts","sourceRoot":"","sources":["../src/correlate-execution.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"correlate-execution.d.ts","sourceRoot":"","sources":["../src/correlate-execution.ts"],"names":[],"mappings":"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"}
@@ -1,121 +1,56 @@
1
1
  /**
2
- * **The production correlation pass — the caller RT-230 found missing.**
2
+ * The production correlation pass (RT-230): owns both an `EvidenceStore` and
3
+ * a graph `driver` and performs resolve-then-attribute. Before this, every
4
+ * real `attribute()` call site lived only in `test/` files — the per-package
5
+ * wrappers (`openapi-observation`, `database-observation`, `test-runner`)
6
+ * can't call it themselves since it needs an `evidenceId` that only exists
7
+ * after `store.write()` returns.
3
8
  *
4
- * `graph-correlator` answers "which graph node is this evidence about" as
5
- * pure functions over a `SqlDriver`. `EvidenceStore.attribute()` makes an
6
- * answer durable. Between those two there was nothing: every real
7
- * `attribute()` call site in this repository lived inside a `test/` file,
8
- * and the three per-package wrappers
9
- * (`openapi-observation/endpoint-comparison.ts`,
10
- * `database-observation/graph-mapping.ts`, `test-runner/graph-mapping.ts`)
11
- * each say in their own doc comment that attribution needs an `evidenceId`
12
- * that only exists after `store.write()` returns — "outside this
13
- * collector's own reach. The caller that already holds both the store and
14
- * the graph `driver` attributes; this only resolves."
9
+ * Kept separate from `runInstrumentedExecution` per that module's own
10
+ * boundary (does not correlate to graph nodes). This is a post-run pass,
11
+ * taking the graph as a parameter like every other production function here.
12
+ * Stage order (architecture §3): collectors → evidence store → graph
13
+ * correlator → runtime findings — this package depends on `graph-correlator`;
14
+ * `finding` depends on neither.
15
15
  *
16
- * **This module is that caller.** It is the one shipped thing that owns an
17
- * `EvidenceStore` and a graph `driver` together and performs
18
- * resolve-then-attribute, so a real Descry run produces evidence that is
19
- * *correlated* and not merely *correlatable*.
16
+ * Does NOT: compose findings (RT-027, that's `finding`'s job), open or walk
17
+ * the graph itself (`traceApi` is the caller's call, RT-026), or decide
18
+ * confidence. Resolves and attributes, nothing else.
20
19
  *
21
- * ## Why it is a separate module and not part of `runInstrumentedExecution`
20
+ * ## OpenAPI family (RT-232)
22
21
  *
23
- * `instrumented-execution.ts`'s own header states the boundary: it "does not
24
- * decide whether a finding exists, does not correlate to graph nodes, and
25
- * does not drive a browser. Those are separate stages with separate
26
- * contracts, and folding them in here would make the one place that
27
- * assembles the runtime also the place that judges it." That boundary is
28
- * kept. This is a **post-run pass**, run after an execution's evidence is in
29
- * the store, taking the graph as a parameter — the same way every other
30
- * production function in this repo takes a `SqlDriver` it does not open.
31
- * The stage order the architecture diagram (§3) already draws — collectors →
32
- * evidence store → graph correlator → runtime findings — is the order these
33
- * packages now depend in, with nothing inverted: this package depends on
34
- * `graph-correlator`, and `finding` depends on neither.
22
+ * Routes through `openapi-observation`'s wrapper rather than calling
23
+ * `resolveEndpointNode` directly, so identity resolves once instead of two
24
+ * families racing for `Evidence.graphNodeId`. `conformance`
25
+ * (`CorrelationConformance`) is a separate field, never persisted and never
26
+ * written to the evidence stream — a contract verdict isn't an observation
27
+ * about the run.
35
28
  *
36
- * ## What it does NOT do, deliberately
29
+ * Exchange comparison needs an observed status plus bodies, all read off
30
+ * existing evidence. No OpenAPI document is read at runtime — the contract
31
+ * is whatever `adapter-openapi` already wrote into the graph. Two disclosed
32
+ * limits: (1) a framework-extractor `API_ENDPOINT` has no DTOs, so
33
+ * `statusSurprising: true` pairs with `contractSchemasDeclared: false` (no
34
+ * contract to violate, not a violation); (2) a request with `postData` but
35
+ * no status only runs the endpoint half — a status is never invented.
37
36
  *
38
- * It does not compose findings (RT-027 places that in the finding layer, and
39
- * `composeFinding` is where it lives). It does not open a graph, does not
40
- * walk one (`traceApi` is the caller's call, RT-026), and does not decide
41
- * confidence. It resolves and it attributes; that is the whole job.
37
+ * Bodies are read after `EvidenceStore` redaction; field *presence*
38
+ * survives, so a `type-mismatch` on a credential/PII-named field may be
39
+ * redaction's artifact, not the app's bug.
42
40
  *
43
- * ## The OpenAPI family, wired (RT-232) — and how the earlier objection was met
44
- *
45
- * This header used to say the OpenAPI comparison family
46
- * (`openapi-observation`'s `compareObservedEndpoint` /
47
- * `compareObservedExchange`) was left out because "folding a conformance
48
- * verdict into an attribution pass would put two different claims in one
49
- * output." That objection was right about the risk and wrong about the
50
- * remedy: the two claims must not share **an output**, which is not the same
51
- * as not sharing **a pass**. So the family is wired, and the separation is
52
- * structural rather than by omission:
53
- *
54
- * - **One graph query, not two.** `compareObservedEndpoint` *calls*
55
- * `resolveEndpointNode` and returns the very same node under
56
- * `documented`. Running both would ask the graph the identical question
57
- * twice and let two families race for `Evidence.graphNodeId`. The HTTP
58
- * family therefore routes **through** the wrapper, which is strictly more
59
- * informative and resolves exactly once.
60
- * - **Identity keeps its own vocabulary.** `attributed` and `refusals` are
61
- * unchanged: a resolved endpoint is `family: "endpoint"`,
62
- * `method: "request-url"`; a miss is `not-found`, the same discriminant
63
- * `resolveEndpointNode` itself returns, carrying the wrapper's reason
64
- * verbatim. `undocumented` / `wrong-method` are contract words, and they
65
- * stay out of the identity channel.
66
- * - **Conformance is its own field** (`conformance`, `CorrelationConformance`),
67
- * never persisted, never written to the evidence stream, never an
68
- * `EvidenceAttribution`. A reader that only cares about identity can
69
- * ignore it entirely, which is what "not one output" has to mean to be
70
- * worth anything.
71
- *
72
- * **What the exchange half needs, and what supplies it.** `compareObservedExchange`
73
- * additionally consumes an observed **status** and, optionally, the request /
74
- * response **bodies** — all three come off evidence that already exists:
75
- * `InboundProxy` emits `{method, path, status}` on `NETWORK_RESPONSE` and
76
- * `HTTP_ERROR`, and `BrowserNetworkCollector`'s `HTTP_ERROR` adds the captured
77
- * response `body`. No declared OpenAPI *document* is read here or anywhere at
78
- * runtime: the contract is whatever `adapter-openapi` already wrote into the
79
- * graph (`API_ROUTE --SERVES_API--> API_ENDPOINT --`, `--USES_TYPE(roles)--> DTO`),
80
- * so nothing new has to be supplied by a run. Two honest limits follow, and are
81
- * reported rather than papered over:
82
- *
83
- * 1. A graph whose `API_ENDPOINT` nodes came from a **framework extractor**
84
- * rather than an OpenAPI document has no DTOs at all, and every declared
85
- * role reads empty — which `compareObservedExchange` correctly reports as
86
- * `statusSurprising: true`, meaning "this operation declares no shape for
87
- * an outcome like this one." Read alone that is indistinguishable from a
88
- * contract violation, so `contractSchemasDeclared` is reported beside it:
89
- * `false` means there was no contract to violate.
90
- * 2. A `NETWORK_REQUEST` carries a request body (`postData`) but no status, so
91
- * only the endpoint half runs for it — request-body conformance needs the
92
- * exchange, and a status is not invented to obtain one.
93
- *
94
- * Bodies are read **after** `EvidenceStore` redaction, which re-serializes a
95
- * JSON body with sensitive values replaced by a marker string. Field
96
- * *presence* survives that intact; a `type-mismatch` on a non-string-typed
97
- * field whose name matches a credential/PII pattern would be redaction's
98
- * artifact, not the app's bug.
99
- *
100
- * ## Families still not wired here, named rather than left implicit
101
- *
102
- * **`resolveObservedFrontendCaller`** is deliberately excluded, not
103
- * pending. It answers "which frontend function calls this endpoint", which
104
- * is a question about a *node*, not about an evidence item, and it falls
105
- * back to a structural answer when the observed stack does not resolve.
106
- * Attributing evidence to a structurally-derived caller would break the
107
- * rule the whole confirmed/strongly-supported gate rests on: a named node
108
- * must be named by the observation itself.
41
+ * `resolveObservedFrontendCaller` is deliberately excluded, not pending: it
42
+ * answers a question about a *node*, falling back to a structural guess when
43
+ * the stack doesn't resolve — attributing to that would break the rule the
44
+ * confirmed/strongly-supported gate rests on: a named node must be named by
45
+ * the observation itself.
109
46
  *
110
47
  * ## Refusals stay refusals (RT-229)
111
48
  *
112
49
  * `not-found` / `ambiguous` / `line-mismatch` / `producer-emitted-none` /
113
- * `no-table` / `no-location` are correctly-typed **honest refusals**, and
50
+ * `no-table` / `no-location` are honest refusals, carried through verbatim —
114
51
  * RT-229 ruled that writing `COLLECTOR_ERROR` for one would be a false
115
- * failure signal. They are carried through into `refusals`, verbatim
116
- * outcome and reason, and nothing about them touches the evidence stream.
117
- * The only thing that becomes `COLLECTOR_ERROR` is a resolver or the store
118
- * genuinely **throwing** — see `harnessErrors` below.
52
+ * failure signal. Only a resolver or the store actually **throwing** becomes
53
+ * `COLLECTOR_ERROR` (see `harnessErrors` below).
119
54
  */
120
55
  import { resolveEndpointFromLogText, resolveSymbolNode } from "@descryy/runtime-graph-correlator";
121
56
  import { compareObservedEndpoint, compareObservedExchange, } from "@descryy/runtime-openapi-observation";
@@ -129,18 +64,16 @@ const TEST_EVENT_TYPES = new Set([
129
64
  "TEST_SKIPPED",
130
65
  ]);
131
66
  /**
132
- * HTTP evidence, whichever collector produced it: the browser network
133
- * collector (`payload.url`, absolute), `InboundProxy` (`payload.path`,
134
- * already a path) and `ExternalRequestCollector` (`payload.url`).
67
+ * HTTP evidence from any collector: browser network (`payload.url`,
68
+ * absolute), `InboundProxy` (`payload.path`), `ExternalRequestCollector`
69
+ * (`payload.url`).
135
70
  *
136
- * `NETWORK_RESPONSE` is in this set and will usually refuse with
137
- * `"no-method"` — the browser collector's response payload carries `url`
138
- * but no `method`, because a response observation does not on its own state
139
- * which verb produced it. **That is left as a disclosed refusal rather than
140
- * joined to the matching request by `requestId`.** The failing exchange is
141
- * already attributed through the `HTTP_ERROR` the same collector emits
142
- * beside it, which does carry `method`, so the join would buy little and
143
- * would make an otherwise strictly per-item pass depend on other items.
71
+ * `NETWORK_RESPONSE` usually refuses with `"no-method"` (the response
72
+ * payload carries `url` but not `method`) — left as a disclosed refusal
73
+ * rather than joined to the matching request by `requestId`: the failing
74
+ * exchange is already attributed via the `HTTP_ERROR` the collector emits
75
+ * beside it, so the join would buy little and make this pass depend on
76
+ * other items.
144
77
  */
145
78
  const HTTP_EVENT_TYPES = new Set([
146
79
  "NETWORK_REQUEST",
@@ -154,10 +87,8 @@ export function classifyEvidence(evidence) {
154
87
  return "database-table";
155
88
  if (TEST_EVENT_TYPES.has(evidence.eventType))
156
89
  return "test-case";
157
- // Checked before the source-location branch on purpose: the browser's
158
- // NETWORK_REQUEST carries a `sourceLocation` for the *frontend* frame that
159
- // issued the call, and treating that as the item's identity would resolve
160
- // a request to its caller instead of to the endpoint it named.
90
+ // Checked before source-location on purpose: NETWORK_REQUEST's
91
+ // sourceLocation is the *frontend caller*, not the endpoint's identity.
161
92
  if (HTTP_EVENT_TYPES.has(evidence.eventType))
162
93
  return "endpoint";
163
94
  const location = evidence.sourceLocation;
@@ -172,20 +103,15 @@ function stringOrNull(value) {
172
103
  return typeof value === "string" ? value : null;
173
104
  }
174
105
  /**
175
- * `{method, path}` from an HTTP evidence payload, or the reason it is not
176
- * there. Accepts `url` (absolute, browser/fetch collectors) and `path`
177
- * (`InboundProxy`, which records `req.url` exactly as the client sent it) —
178
- * a query string is stripped from either, since `API_ENDPOINT` names carry
179
- * a path and never a query.
106
+ * `{method, path}` from an HTTP evidence payload, or the reason it's not
107
+ * there. Accepts `url` (absolute) or `path` (`InboundProxy`'s `req.url`) —
108
+ * query string stripped either way, since `API_ENDPOINT` names never carry one.
180
109
  *
181
- * `status` and the two bodies are the **exchange** half's inputs, and they
182
- * are read here rather than in a second walker so that one function owns the
183
- * whole "what did this payload actually observe" question. Each is `null`
184
- * when the payload does not carry it — never defaulted, since a guessed
185
- * status would manufacture a status-bucket verdict out of nothing.
186
- * `postData` is `BrowserNetworkCollector`'s request-body key and `body` is
187
- * its response-body key; `requestBody`/`responseBody` are accepted as the
188
- * names a future producer would most plausibly use.
110
+ * `status` and the two bodies are the exchange half's inputs, read here so
111
+ * one function owns "what did this payload observe". Each is `null` rather
112
+ * than defaulted — a guessed status would manufacture a verdict out of
113
+ * nothing. `postData`/`body` are `BrowserNetworkCollector`'s keys;
114
+ * `requestBody`/`responseBody` cover a future producer's likely names.
189
115
  */
190
116
  function httpTarget(payload) {
191
117
  const record = asRecord(payload);
@@ -236,12 +162,11 @@ function httpTarget(payload) {
236
162
  /**
237
163
  * `EndpointComparison`/`ExchangeComparison` → the two channels, kept apart.
238
164
  *
239
- * The identity half deliberately collapses `undocumented` and `wrong-method`
240
- * back to `not-found`: both mean "no `API_ENDPOINT` matched this method and
241
- * path", which is `resolveEndpointNode`'s own answer and the discriminant the
242
- * identity channel has always used. The reason is the comparison's own
243
- * sentence, verbatim — for `wrong-method` that sentence is strictly richer
244
- * than the resolver's, which is the point of routing through the wrapper.
165
+ * Identity collapses `undocumented` and `wrong-method` back to `not-found`:
166
+ * both mean "no `API_ENDPOINT` matched this method and path", the
167
+ * identity channel's usual discriminant. The reason string is still the
168
+ * comparison's own, richer than the resolver's alone — the point of routing
169
+ * through the wrapper.
245
170
  */
246
171
  function splitComparison(evidenceId, comparison, exchange) {
247
172
  const identity = comparison.outcome === "documented"
@@ -281,18 +206,14 @@ export function correlateExecution(input) {
281
206
  let considered = 0;
282
207
  let skipped = 0;
283
208
  /**
284
- * RT-229's declined wrap, now that a call site exists for it. Every
285
- * resolver reads the graph through `@descryy/core`'s store reader,
286
- * which has no try/catch of its own: a `DriverError` from it propagates
287
- * out of a resolver as a throw, and unguarded here it would reject this
288
- * whole pass with no evidence trail — the identical "harness machinery
289
- * breaks, zero evidence trail" shape RT-219 fixed for `collector.start()`
290
- * and RT-228 for `ExecutionController.run()`.
209
+ * RT-229's declined wrap, now that a call site exists. Resolvers read the
210
+ * graph through `@descryy/core`'s store reader, which has no try/catch —
211
+ * a `DriverError` would otherwise reject this whole pass with no evidence
212
+ * trail (same shape RT-219/RT-228 fixed elsewhere).
291
213
  *
292
- * A throw is NOT a refusal and is deliberately not folded into one: the
293
- * item is left unattributed and the failure is reported as the harness's
294
- * own, so a reader can tell "we looked and the graph does not have it"
295
- * from "our own reader broke" without inspecting payload text.
214
+ * A throw is NOT a refusal: the item stays unattributed and the failure
215
+ * is reported as the harness's own, so "graph doesn't have it" stays
216
+ * distinguishable from "our reader broke".
296
217
  */
297
218
  function attempt(fn, what) {
298
219
  try {
@@ -307,10 +228,8 @@ export function correlateExecution(input) {
307
228
  }
308
229
  for (const evidence of store.getByExecution(executionId)) {
309
230
  const family = classifyEvidence(evidence);
310
- // A backend line carries a possible endpoint naming in its own text
311
- // whether or not any family claimed it: a `BACKEND_LOG` with no stack
312
- // frame classifies as nothing, and is still the only record that a
313
- // particular route was exercised.
231
+ // A backend line may name an endpoint in its own text regardless of
232
+ // family: a `BACKEND_LOG` with no stack frame still records the route.
314
233
  const backendSourced = evidence.source === "backend-log" || evidence.source === "backend-process";
315
234
  if (family === null && !backendSourced) {
316
235
  skipped += 1;
@@ -327,10 +246,8 @@ export function correlateExecution(input) {
327
246
  }
328
247
  else {
329
248
  const observed = { method: target.method, path: target.path };
330
- // One graph query, through `openapi-observation`'s wrapper — which is
331
- // where `resolveEndpointNode` is actually called. Which wrapper
332
- // depends on whether a status was observed, and nothing else: the
333
- // exchange comparison needs one and it is never invented.
249
+ // One graph query, through the wrapper. Which one depends only on
250
+ // whether a status was observed — never invented to force exchange.
334
251
  const status = target.status;
335
252
  const exchange = status === null
336
253
  ? null
@@ -364,12 +281,10 @@ export function correlateExecution(input) {
364
281
  const service = evidence.service;
365
282
  const scope = service === null ? undefined : scopeByService[service];
366
283
  if (scope === undefined) {
367
- // Not a refusal: the caller never claimed this service's evidence
368
- // was resolvable against a repository, so nothing was attempted.
369
- // Named here so "we did not try" stays distinguishable from "we
370
- // tried and found nothing" (plan §17). The log-text pass below still
371
- // runs for backend evidence — `API_ENDPOINT` is workspace-scoped
372
- // (DEC-054) and needs no repository to resolve against.
284
+ // Not a refusal — nothing was attempted, so "didn't try" stays
285
+ // distinguishable from "tried, found nothing". Log-text pass below
286
+ // still runs for backend evidence: API_ENDPOINT is workspace-scoped
287
+ // (DEC-054), no repository needed.
373
288
  unscopedServices.add(service ?? "(no service)");
374
289
  skipped += 1;
375
290
  }
@@ -398,22 +313,19 @@ export function correlateExecution(input) {
398
313
  }
399
314
  }
400
315
  // The second naming a backend line can carry alongside its own frame
401
- // (RT-052, and `continuous-chain.test.ts`'s `extraAttributions` block,
402
- // which is the glue this replaces). Attempted for backend-sourced
403
- // evidence regardless of which family claimed the item — including a
404
- // BACKEND_LOG with no stack at all, where it becomes the item's only
405
- // naming and is therefore the one persisted.
316
+ // (RT-052). Attempted for all backend-sourced evidence regardless of
317
+ // family — for a BACKEND_LOG with no stack, it becomes the only naming
318
+ // and is persisted.
406
319
  if (backendSourced) {
407
320
  const text = typeof evidence.payload === "string" ? evidence.payload : JSON.stringify(evidence.payload);
408
321
  const resolution = attempt(() => resolveEndpointFromLogText(driver, text), "resolveEndpointFromLogText");
409
322
  if (resolution !== null && resolution.outcome === "resolved") {
410
323
  outcomes.push({ family: "log-text-endpoint", method: "log-text-endpoint", nodeId: resolution.nodeId, refusal: null });
411
324
  }
412
- // A `no-mention` is not a refusal worth reporting: most log lines
413
- // simply are not about an endpoint, and recording one per line would
414
- // bury the refusals that mean something. `not-found`/`ambiguous` DO
415
- // mean something -- the line named routes and the graph could not
416
- // place them -- and are reported.
325
+ // `no-mention` isn't reported — most log lines aren't about an
326
+ // endpoint, and recording one per line would bury refusals that
327
+ // matter. `not-found`/`ambiguous` mean the line named a route the
328
+ // graph couldn't place, and those are reported.
417
329
  else if (resolution !== null && resolution.outcome !== "no-mention") {
418
330
  refusals.push({ evidenceId: evidence.evidenceId, family: "log-text-endpoint", outcome: resolution.outcome, reason: resolution.reason });
419
331
  }
@@ -427,10 +339,8 @@ export function correlateExecution(input) {
427
339
  if (outcome.nodeId === null)
428
340
  continue;
429
341
  if (persistedNodeId === null) {
430
- // `attribute()` throws for an unknown id and refuses to overwrite a
431
- // different node. Both are real bugs in a caller, and both are
432
- // wrapped rather than allowed to abort the pass — the store is the
433
- // other half of the machinery this wrap exists to observe.
342
+ // `attribute()` throws on an unknown id or an overwrite attempt —
343
+ // both real caller bugs, wrapped rather than aborting the pass.
434
344
  const written = attempt(() => {
435
345
  store.attribute(evidence.evidenceId, outcome.nodeId);
436
346
  return true;
@@ -442,9 +352,8 @@ export function correlateExecution(input) {
442
352
  continue;
443
353
  }
444
354
  if (persistedNodeId === outcome.nodeId) {
445
- // Already durable — a re-run of the pass, or the same node named
446
- // twice. `attribute()` is idempotent for this case, so nothing is
447
- // written and the association is still reported.
355
+ // Already durable (re-run, or same node named twice). `attribute()`
356
+ // is idempotent here, so nothing is written but it's still reported.
448
357
  attributed.push({ evidenceId: evidence.evidenceId, graphNodeId: outcome.nodeId, method: outcome.method, family: outcome.family, persisted: true });
449
358
  continue;
450
359
  }
@@ -1 +1 @@
1
- {"version":3,"file":"correlate-execution.js","sourceRoot":"","sources":["../src/correlate-execution.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"correlate-execution.js","sourceRoot":"","sources":["../src/correlate-execution.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,9 +1,14 @@
1
1
  {
2
2
  "name": "@descryy/runtime-evidence-correlation",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "type": "module",
5
5
  "description": "The production correlation pass (RT-230): the one shipped component that owns an EvidenceStore and a descry-core graph driver together and performs resolve-then-attribute over a finished execution's stored evidence. graph-correlator's typed refusals are carried through as refusals, never converted into errors.",
6
6
  "license": "UNLICENSED",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/descryhq-wq/descry-runtime.git",
10
+ "directory": "packages/evidence-correlation"
11
+ },
7
12
  "engines": {
8
13
  "node": ">=22.5"
9
14
  },
@@ -24,12 +29,12 @@
24
29
  "build": "tsc -b"
25
30
  },
26
31
  "dependencies": {
27
- "@descryy/runtime-contracts": "0.2.0",
28
- "@descryy/runtime-evidence-store": "0.3.0",
29
- "@descryy/runtime-graph-correlator": "0.3.0",
30
- "@descryy/runtime-openapi-observation": "0.3.0",
31
- "@descryy/runtime-database-observation": "0.3.0",
32
- "@descryy/runtime-test-runner": "0.3.0",
33
- "@descryy/core": "0.4.0"
32
+ "@descryy/runtime-contracts": "0.3.0",
33
+ "@descryy/runtime-evidence-store": "0.4.0",
34
+ "@descryy/runtime-graph-correlator": "0.4.0",
35
+ "@descryy/runtime-openapi-observation": "0.4.0",
36
+ "@descryy/runtime-database-observation": "0.4.0",
37
+ "@descryy/runtime-test-runner": "0.4.0",
38
+ "@descryy/core": "0.5.0"
34
39
  }
35
40
  }