@duckcodeailabs/dql-agent 1.8.1 → 1.8.3
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/dist/agent-run-engine.d.ts +11 -1
- package/dist/agent-run-engine.d.ts.map +1 -1
- package/dist/agent-run-engine.js +13 -2
- package/dist/agent-run-engine.js.map +1 -1
- package/dist/agent-run-gates.d.ts.map +1 -1
- package/dist/agent-run-gates.js +2 -1
- package/dist/agent-run-gates.js.map +1 -1
- package/dist/agent-run-store.d.ts +33 -0
- package/dist/agent-run-store.d.ts.map +1 -0
- package/dist/agent-run-store.js +167 -0
- package/dist/agent-run-store.js.map +1 -0
- package/dist/answer-loop.d.ts +32 -3
- package/dist/answer-loop.d.ts.map +1 -1
- package/dist/answer-loop.js +496 -49
- package/dist/answer-loop.js.map +1 -1
- package/dist/cascade/budgets.d.ts +3 -1
- package/dist/cascade/budgets.d.ts.map +1 -1
- package/dist/cascade/budgets.js +10 -1
- package/dist/cascade/budgets.js.map +1 -1
- package/dist/grounding/context-ledger.d.ts +4 -0
- package/dist/grounding/context-ledger.d.ts.map +1 -1
- package/dist/grounding/context-ledger.js.map +1 -1
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/intent-controller.d.ts +7 -0
- package/dist/intent-controller.d.ts.map +1 -1
- package/dist/intent-controller.js.map +1 -1
- package/dist/metadata/analysis-planner.d.ts +8 -0
- package/dist/metadata/analysis-planner.d.ts.map +1 -1
- package/dist/metadata/analysis-planner.js +50 -2
- package/dist/metadata/analysis-planner.js.map +1 -1
- package/dist/metadata/analytical-policy.d.ts +40 -2
- package/dist/metadata/analytical-policy.d.ts.map +1 -1
- package/dist/metadata/analytical-policy.js +276 -53
- package/dist/metadata/analytical-policy.js.map +1 -1
- package/dist/metadata/block-fit.js +32 -8
- package/dist/metadata/block-fit.js.map +1 -1
- package/dist/metadata/catalog.d.ts +7 -0
- package/dist/metadata/catalog.d.ts.map +1 -1
- package/dist/metadata/catalog.js +57 -3
- package/dist/metadata/catalog.js.map +1 -1
- package/dist/metadata/dbt-first-safety.d.ts +8 -1
- package/dist/metadata/dbt-first-safety.d.ts.map +1 -1
- package/dist/metadata/dbt-first-safety.js +6 -1
- package/dist/metadata/dbt-first-safety.js.map +1 -1
- package/dist/metadata/health.d.ts +19 -0
- package/dist/metadata/health.d.ts.map +1 -0
- package/dist/metadata/health.js +72 -0
- package/dist/metadata/health.js.map +1 -0
- package/dist/metadata/sql-context-validation.d.ts +5 -1
- package/dist/metadata/sql-context-validation.d.ts.map +1 -1
- package/dist/metadata/sql-context-validation.js +93 -0
- package/dist/metadata/sql-context-validation.js.map +1 -1
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +27 -3
- package/dist/router.js.map +1 -1
- package/dist/tools/registry.js +9 -9
- package/dist/tools/registry.js.map +1 -1
- package/package.json +4 -4
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/** Deterministic manifest-v3 analytical path planning and SQL validation. */
|
|
2
|
+
import { createHash } from 'node:crypto';
|
|
2
3
|
import { analyzeSqlReferences, relationshipValidationProofFingerprint, } from '@duckcodeailabs/dql-core';
|
|
3
4
|
/**
|
|
4
5
|
* Re-check the complete executable-join invariant at the point of use.
|
|
@@ -96,51 +97,165 @@ export function planAnalyticalPath(manifest, request) {
|
|
|
96
97
|
&& entities.includes(relationship.from) && entities.includes(relationship.to));
|
|
97
98
|
if (attribution)
|
|
98
99
|
return blocked('attribution_policy_required', entities, [attribution], `Relationship "${attribution.id}" requires an attribution policy or allocation policy before DQL can join these entities.`);
|
|
99
|
-
const
|
|
100
|
-
|
|
101
|
-
adjacency
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
const
|
|
110
|
-
|
|
111
|
-
const
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
100
|
+
const tierOf = relationshipTierResolver(manifest);
|
|
101
|
+
const spanWith = (allowedTiers) => {
|
|
102
|
+
const adjacency = new Map();
|
|
103
|
+
for (const entity of Object.keys(modeling.entities))
|
|
104
|
+
adjacency.set(entity, []);
|
|
105
|
+
for (const relationship of relationships.filter((value) => allowedTiers.includes(tierOf(value)))) {
|
|
106
|
+
adjacency.get(relationship.from)?.push({ next: relationship.to, relationship });
|
|
107
|
+
adjacency.get(relationship.to)?.push({ next: relationship.from, relationship });
|
|
108
|
+
}
|
|
109
|
+
const selected = new Map();
|
|
110
|
+
const connected = new Set([entities[0]]);
|
|
111
|
+
for (const target of entities.slice(1)) {
|
|
112
|
+
const path = cheapestPath([...connected], target, adjacency, (relationship) => tierOf(relationship) === 'exploratory');
|
|
113
|
+
if (!path)
|
|
114
|
+
return undefined;
|
|
115
|
+
for (const relationship of path) {
|
|
116
|
+
selected.set(relationship.qualifiedId ?? relationship.id, relationship);
|
|
117
|
+
connected.add(relationship.from);
|
|
118
|
+
connected.add(relationship.to);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return selected;
|
|
122
|
+
};
|
|
123
|
+
const enforceSelectedEdgePolicies = (selected) => {
|
|
124
|
+
for (const relationship of selected.values()) {
|
|
125
|
+
if (relationship.crossDomain) {
|
|
126
|
+
const authorization = authorizeCrossDomainRelationship(manifest, relationship, request.domainContext, request.purpose);
|
|
127
|
+
if (!authorization.safe)
|
|
128
|
+
return blocked(authorization.code, entities, [relationship], authorization.message);
|
|
129
|
+
}
|
|
130
|
+
if (relationship.aggregation) {
|
|
131
|
+
const missingMeasure = request.measureEntities?.find((entity) => !relationship.aggregation?.measuresFrom.includes(entity));
|
|
132
|
+
const missingDimension = request.dimensionEntities?.find((entity) => !relationship.aggregation?.dimensionsFrom.includes(entity));
|
|
133
|
+
if (missingMeasure || missingDimension) {
|
|
134
|
+
return blocked('unsafe_relationship', entities, [relationship], `Relationship "${relationship.id}" does not authorize the requested measure/dimension direction.`);
|
|
117
135
|
}
|
|
118
136
|
}
|
|
119
|
-
if (candidate?.crossDomain)
|
|
120
|
-
return blocked('relationship_not_exported', entities, candidate ? [candidate] : [], 'The cross-domain path is missing a certified export/import interface or valid purpose.');
|
|
121
|
-
return blocked('unsafe_relationship', entities, candidate ? [candidate] : [], `No certified, validated, fanout-safe DQL path connects ${entities.join(', ')}.`);
|
|
122
137
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
138
|
+
return undefined;
|
|
139
|
+
};
|
|
140
|
+
const governedSpan = spanWith(['governed']);
|
|
141
|
+
if (governedSpan) {
|
|
142
|
+
const violation = enforceSelectedEdgePolicies(governedSpan);
|
|
143
|
+
if (violation)
|
|
144
|
+
return violation;
|
|
145
|
+
return allowed(entities, [...governedSpan.values()], manifest);
|
|
146
|
+
}
|
|
147
|
+
const mixedSpan = spanWith(['governed', 'exploratory']);
|
|
148
|
+
if (mixedSpan) {
|
|
149
|
+
const violation = enforceSelectedEdgePolicies(mixedSpan);
|
|
150
|
+
if (violation)
|
|
151
|
+
return violation;
|
|
152
|
+
const ambiguity = detectRelationshipAmbiguity(manifest, [...mixedSpan.values()], tierOf);
|
|
153
|
+
if (ambiguity)
|
|
154
|
+
return ambiguity(entities);
|
|
155
|
+
return exploratoryCandidatePlan(manifest, entities, [...mixedSpan.values()]);
|
|
156
|
+
}
|
|
157
|
+
// No spanning path even over declared draft edges: keep the specific denial
|
|
158
|
+
// when a direct-but-unusable candidate exists, else the generic missing-path block.
|
|
159
|
+
const connected = new Set([entities[0]]);
|
|
160
|
+
const target = entities.slice(1).find((entity) => !connected.has(entity)) ?? entities[1];
|
|
161
|
+
const candidate = relationships.find((relationship) => (connected.has(relationship.from) && relationship.to === target)
|
|
162
|
+
|| (connected.has(relationship.to) && relationship.from === target));
|
|
163
|
+
if (candidate) {
|
|
164
|
+
const decision = assessAnalyticalRelationship(candidate, manifest);
|
|
165
|
+
if (!decision.executable && decision.code !== 'unsafe_relationship' && tierOf(candidate) === 'denied') {
|
|
166
|
+
return blocked(decision.code ?? 'unsafe_relationship', entities, [candidate], decision.message);
|
|
127
167
|
}
|
|
128
168
|
}
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
169
|
+
if (candidate?.crossDomain)
|
|
170
|
+
return blocked('relationship_not_exported', entities, candidate ? [candidate] : [], 'The cross-domain path is missing a certified export/import interface or valid purpose.');
|
|
171
|
+
return blocked('unsafe_relationship', entities, candidate ? [candidate] : [], `No certified, validated, fanout-safe DQL path connects ${entities.join(', ')}.`);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Edge classification for path planning:
|
|
175
|
+
* - governed: full certified/validated/fanout-safe proof chain (assessAnalyticalRelationship).
|
|
176
|
+
* - exploratory: DECLARED draft/review edge that is structurally safe (real keys,
|
|
177
|
+
* safe cardinality, declared-safe fanout, same-domain). May only feed the
|
|
178
|
+
* bounded review-required exploratory lane — never governed SQL.
|
|
179
|
+
* - denied: everything else (deprecated, cross-domain, unsafe/unknown fanout,
|
|
180
|
+
* attribution-required, missing keys). Never traversed, never suggested.
|
|
181
|
+
*/
|
|
182
|
+
function relationshipTierResolver(manifest) {
|
|
183
|
+
const cache = new Map();
|
|
184
|
+
return (relationship) => {
|
|
185
|
+
const cached = cache.get(relationship);
|
|
186
|
+
if (cached)
|
|
187
|
+
return cached;
|
|
188
|
+
const tier = assessAnalyticalRelationship(relationship, manifest).executable
|
|
189
|
+
? 'governed'
|
|
190
|
+
: isExploratoryEligibleRelationship(relationship)
|
|
191
|
+
? 'exploratory'
|
|
192
|
+
: 'denied';
|
|
193
|
+
cache.set(relationship, tier);
|
|
194
|
+
return tier;
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
function isExploratoryEligibleRelationship(relationship) {
|
|
198
|
+
return (relationship.status === 'draft' || relationship.status === 'review')
|
|
199
|
+
&& !relationship.crossDomain
|
|
200
|
+
&& relationship.fanout === 'safe'
|
|
201
|
+
&& ['one_to_one', 'one_to_many', 'many_to_one'].includes(relationship.cardinality)
|
|
202
|
+
&& relationship.keys.length > 0
|
|
203
|
+
&& relationship.keys.every((key) => key.from.trim().length > 0 && key.to.trim().length > 0);
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Two eligible relationships of the SAME tier connecting the same entity pair
|
|
207
|
+
* with DIFFERENT key columns (e.g. billing vs shipping location) make the path
|
|
208
|
+
* semantically ambiguous — refuse with a focused question instead of picking one.
|
|
209
|
+
* A governed edge always outranks exploratory alternatives, so cross-tier
|
|
210
|
+
* duplicates are not ambiguous.
|
|
211
|
+
*/
|
|
212
|
+
function detectRelationshipAmbiguity(manifest, selected, tierOf) {
|
|
213
|
+
const relationships = Object.values(manifest.modeling?.relationships ?? {});
|
|
214
|
+
for (const edge of selected) {
|
|
215
|
+
const tier = tierOf(edge);
|
|
216
|
+
const rivals = relationships.filter((other) => other !== edge
|
|
217
|
+
&& tierOf(other) === tier
|
|
218
|
+
&& ((other.from === edge.from && other.to === edge.to) || (other.from === edge.to && other.to === edge.from))
|
|
219
|
+
&& keySignature(other) !== keySignature(edge));
|
|
220
|
+
if (rivals.length > 0) {
|
|
221
|
+
const ids = [edge, ...rivals].map((relationship) => relationship.qualifiedId ?? relationship.id).sort();
|
|
222
|
+
return (entities) => blocked('relationship_ambiguous', entities, [edge, ...rivals], `Multiple declared relationships connect ${edge.from} and ${edge.to} with different keys: ${ids.join(', ')}. Name the intended relationship.`);
|
|
134
223
|
}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
224
|
+
}
|
|
225
|
+
return undefined;
|
|
226
|
+
}
|
|
227
|
+
function keySignature(relationship) {
|
|
228
|
+
return relationship.keys.map((key) => `${key.from.toLowerCase()}=${key.to.toLowerCase()}`).sort().join('|');
|
|
229
|
+
}
|
|
230
|
+
/** Uniform-cost search minimising (exploratory edges, hops); deterministic tie-break by path relationship ids. */
|
|
231
|
+
function cheapestPath(starts, target, adjacency, isExploratory) {
|
|
232
|
+
const costKey = (state) => `${state.exploratory}:${state.path.length}:${state.path.map((relationship) => relationship.qualifiedId ?? relationship.id).join('>')}`;
|
|
233
|
+
const queue = [...starts].sort().map((entity) => ({ entity, path: [], exploratory: 0 }));
|
|
234
|
+
const best = new Map();
|
|
235
|
+
for (const state of queue)
|
|
236
|
+
best.set(state.entity, costKey(state));
|
|
237
|
+
while (queue.length > 0) {
|
|
238
|
+
queue.sort((a, b) => costKey(a).localeCompare(costKey(b), 'en', { numeric: true }));
|
|
239
|
+
const current = queue.shift();
|
|
240
|
+
if (current.entity === target)
|
|
241
|
+
return current.path;
|
|
242
|
+
const neighbours = [...(adjacency.get(current.entity) ?? [])]
|
|
243
|
+
.sort((a, b) => (a.relationship.qualifiedId ?? a.relationship.id).localeCompare(b.relationship.qualifiedId ?? b.relationship.id));
|
|
244
|
+
for (const edge of neighbours) {
|
|
245
|
+
const next = {
|
|
246
|
+
entity: edge.next,
|
|
247
|
+
path: [...current.path, edge.relationship],
|
|
248
|
+
exploratory: current.exploratory + (isExploratory(edge.relationship) ? 1 : 0),
|
|
249
|
+
};
|
|
250
|
+
const nextKey = costKey(next);
|
|
251
|
+
const existing = best.get(edge.next);
|
|
252
|
+
if (existing !== undefined && existing.localeCompare(nextKey, 'en', { numeric: true }) <= 0)
|
|
253
|
+
continue;
|
|
254
|
+
best.set(edge.next, nextKey);
|
|
255
|
+
queue.push(next);
|
|
141
256
|
}
|
|
142
257
|
}
|
|
143
|
-
return
|
|
258
|
+
return undefined;
|
|
144
259
|
}
|
|
145
260
|
function denied(code, message) {
|
|
146
261
|
return { executable: false, code, message };
|
|
@@ -219,8 +334,14 @@ export function validateAnalyticalSql(sql, manifest, dialect = 'duckdb', purpose
|
|
|
219
334
|
purpose,
|
|
220
335
|
domainContext,
|
|
221
336
|
});
|
|
222
|
-
if (
|
|
337
|
+
if (plan.disposition === 'blocked')
|
|
223
338
|
return plan;
|
|
339
|
+
// For a governed plan, only the planned certified relationships authorize joins.
|
|
340
|
+
// For an exploratory candidate, any DECLARED eligible edge (certified or
|
|
341
|
+
// draft/review) may match — the plan is then re-bound to the SQL's ACTUAL
|
|
342
|
+
// join set so downstream probes validate exactly what will execute.
|
|
343
|
+
const tierOf = relationshipTierResolver(manifest);
|
|
344
|
+
const usedRelationships = new Map();
|
|
224
345
|
for (const join of analysis.joins) {
|
|
225
346
|
const left = join.leftRelation ? entityForRelation(join.leftRelation, manifest) : undefined;
|
|
226
347
|
const right = join.rightRelation ? entityForRelation(join.rightRelation, manifest) : undefined;
|
|
@@ -230,9 +351,11 @@ export function validateAnalyticalSql(sql, manifest, dialect = 'duckdb', purpose
|
|
|
230
351
|
const rightKey = entityRecordKey(manifest, right);
|
|
231
352
|
if (!leftKey || !rightKey)
|
|
232
353
|
return blocked('unbound_relation', plan.entities, [], 'Every generated join endpoint must resolve to a qualified DQL analytical entity.');
|
|
233
|
-
const
|
|
234
|
-
.map((id) => manifest.modeling?.relationships[id])
|
|
235
|
-
.
|
|
354
|
+
const candidates = plan.disposition === 'governed'
|
|
355
|
+
? plan.relationshipIds.map((id) => manifest.modeling?.relationships[id]).filter((value) => Boolean(value))
|
|
356
|
+
: Object.values(manifest.modeling?.relationships ?? {}).filter((value) => tierOf(value) !== 'denied');
|
|
357
|
+
const relationship = candidates
|
|
358
|
+
.find((value) => (value.from === leftKey && value.to === rightKey) || (value.from === rightKey && value.to === leftKey));
|
|
236
359
|
if (!relationship)
|
|
237
360
|
return blocked('unplanned_join', plan.entities, [], `No planned relationship authorizes ${left.id} to ${right.id}.`);
|
|
238
361
|
const matches = relationship.keys.some((key) => {
|
|
@@ -242,6 +365,10 @@ export function validateAnalyticalSql(sql, manifest, dialect = 'duckdb', purpose
|
|
|
242
365
|
});
|
|
243
366
|
if (!matches)
|
|
244
367
|
return blocked('join_key_mismatch', plan.entities, [relationship], `Join predicate ${join.leftColumn} = ${join.rightColumn} does not match certified keys for "${relationship.id}".`);
|
|
368
|
+
usedRelationships.set(relationship.qualifiedId ?? relationship.id, relationship);
|
|
369
|
+
}
|
|
370
|
+
if (plan.disposition === 'exploratory_candidate' && usedRelationships.size > 0) {
|
|
371
|
+
return exploratoryCandidatePlan(manifest, plan.entities, [...usedRelationships.values()]);
|
|
245
372
|
}
|
|
246
373
|
return plan;
|
|
247
374
|
}
|
|
@@ -274,31 +401,127 @@ function entityForRelation(relation, manifest) {
|
|
|
274
401
|
});
|
|
275
402
|
});
|
|
276
403
|
}
|
|
404
|
+
function planEdge(manifest, relationship) {
|
|
405
|
+
return {
|
|
406
|
+
relationshipId: relationship.id,
|
|
407
|
+
fromEntity: relationship.from,
|
|
408
|
+
toEntity: relationship.to,
|
|
409
|
+
fromRelation: manifest?.dbtProvenance?.nodes[manifest.modeling?.entities[relationship.from]?.dbtUniqueId ?? '']?.relation,
|
|
410
|
+
toRelation: manifest?.dbtProvenance?.nodes[manifest.modeling?.entities[relationship.to]?.dbtUniqueId ?? '']?.relation,
|
|
411
|
+
keys: relationship.keys,
|
|
412
|
+
cardinality: relationship.cardinality,
|
|
413
|
+
fanout: relationship.fanout,
|
|
414
|
+
importRefs: relationship.importRefs ?? [],
|
|
415
|
+
};
|
|
416
|
+
}
|
|
277
417
|
function allowed(entities, relationships, manifest) {
|
|
278
418
|
return {
|
|
419
|
+
disposition: 'governed',
|
|
279
420
|
safe: true,
|
|
280
421
|
entities,
|
|
281
422
|
relationshipIds: relationships.map((relationship) => relationshipRecordKey(manifest, relationship)),
|
|
282
|
-
edges: relationships.map((relationship) => (
|
|
283
|
-
relationshipId: relationship.id,
|
|
284
|
-
fromEntity: relationship.from,
|
|
285
|
-
toEntity: relationship.to,
|
|
286
|
-
fromRelation: manifest?.dbtProvenance?.nodes[manifest.modeling?.entities[relationship.from]?.dbtUniqueId ?? '']?.relation,
|
|
287
|
-
toRelation: manifest?.dbtProvenance?.nodes[manifest.modeling?.entities[relationship.to]?.dbtUniqueId ?? '']?.relation,
|
|
288
|
-
keys: relationship.keys,
|
|
289
|
-
cardinality: relationship.cardinality,
|
|
290
|
-
fanout: relationship.fanout,
|
|
291
|
-
importRefs: relationship.importRefs ?? [],
|
|
292
|
-
})),
|
|
423
|
+
edges: relationships.map((relationship) => planEdge(manifest, relationship)),
|
|
293
424
|
};
|
|
294
425
|
}
|
|
426
|
+
export function exploratoryCandidatePlan(manifest, entities, relationships) {
|
|
427
|
+
const ordered = [...relationships].sort((a, b) => (a.qualifiedId ?? a.id).localeCompare(b.qualifiedId ?? b.id));
|
|
428
|
+
const edges = ordered.map((relationship) => ({
|
|
429
|
+
...planEdge(manifest, relationship),
|
|
430
|
+
lifecycle: relationship.status === 'certified' ? 'certified' : relationship.status === 'review' ? 'review' : 'draft',
|
|
431
|
+
evidenceSource: 'declared_relationship',
|
|
432
|
+
}));
|
|
433
|
+
const uncertified = edges.filter((edge) => edge.lifecycle !== 'certified');
|
|
434
|
+
const pathSummary = describeJoinPath(edges);
|
|
435
|
+
const technicalDetail = `Declared relationship path spans ${entities.join(', ')} with ${uncertified.length} uncertified edge(s): ${ordered.map((relationship) => relationship.qualifiedId ?? relationship.id).join(', ')}.`;
|
|
436
|
+
return {
|
|
437
|
+
disposition: 'exploratory_candidate',
|
|
438
|
+
reasonCode: 'relationship_not_certified',
|
|
439
|
+
userFacingReason: `The join between ${humanizeEntityList(entities)} isn't certified yet, but the project declares a draft join path (${pathSummary}). I can prepare a review-required exploratory answer using those declared keys. To make this governed, validate and certify the relationships in the DQL model files.`,
|
|
440
|
+
technicalDetail,
|
|
441
|
+
exploratoryPath: { edges, fingerprint: exploratoryPathFingerprint(edges) },
|
|
442
|
+
safe: false,
|
|
443
|
+
code: 'relationship_not_certified',
|
|
444
|
+
message: technicalDetail,
|
|
445
|
+
entities,
|
|
446
|
+
relationshipIds: ordered.map((relationship) => relationshipRecordKey(manifest, relationship)),
|
|
447
|
+
edges: [],
|
|
448
|
+
};
|
|
449
|
+
}
|
|
450
|
+
export function exploratoryPathFingerprint(edges) {
|
|
451
|
+
const canonical = [...edges]
|
|
452
|
+
.map((edge) => ({
|
|
453
|
+
relationshipId: edge.relationshipId,
|
|
454
|
+
fromEntity: edge.fromEntity,
|
|
455
|
+
toEntity: edge.toEntity,
|
|
456
|
+
keys: [...edge.keys].map((key) => `${key.from.toLowerCase()}=${key.to.toLowerCase()}`).sort(),
|
|
457
|
+
}))
|
|
458
|
+
.sort((a, b) => a.relationshipId.localeCompare(b.relationshipId));
|
|
459
|
+
return createHash('sha256').update(JSON.stringify(canonical)).digest('hex').slice(0, 16);
|
|
460
|
+
}
|
|
461
|
+
export function humanizeAnalyticalEntityId(id) {
|
|
462
|
+
const local = id.split('::').at(-1) ?? id;
|
|
463
|
+
return local.replace(/[_-]+/g, ' ').trim();
|
|
464
|
+
}
|
|
465
|
+
function humanizeEntityList(entities) {
|
|
466
|
+
const names = entities.map(humanizeAnalyticalEntityId);
|
|
467
|
+
if (names.length <= 1)
|
|
468
|
+
return names[0] ?? 'the requested data';
|
|
469
|
+
return `${names.slice(0, -1).join(', ')} and ${names.at(-1)}`;
|
|
470
|
+
}
|
|
471
|
+
function describeJoinPath(edges) {
|
|
472
|
+
return edges
|
|
473
|
+
.map((edge) => `${humanizeAnalyticalEntityId(edge.fromEntity)} → ${humanizeAnalyticalEntityId(edge.toEntity)}`)
|
|
474
|
+
.join(', ');
|
|
475
|
+
}
|
|
476
|
+
/** Deterministic business-language explanation per policy code — safe for chat surfaces. */
|
|
477
|
+
export function analyticalPolicyUserFacingReason(code, entities) {
|
|
478
|
+
const subject = humanizeEntityList(entities.length > 0 ? entities : []);
|
|
479
|
+
switch (code) {
|
|
480
|
+
case 'attribution_policy_required':
|
|
481
|
+
return `Combining ${subject} requires an attribution or allocation policy first — this is a deliberate governance rule, not a data gap. Define the policy in the DQL model to enable this analysis.`;
|
|
482
|
+
case 'relationship_not_exported':
|
|
483
|
+
return `This question crosses domains without a certified export/import contract. Publish the export from its owning domain and import it with an explicit purpose to enable this analysis.`;
|
|
484
|
+
case 'purpose_not_allowed':
|
|
485
|
+
return `Cross-domain analysis here needs an explicit, allowed analytical purpose. Set the purpose in the domain context and try again.`;
|
|
486
|
+
case 'stale_certification':
|
|
487
|
+
return `A relationship needed for this question has stale certification (its underlying dbt model changed). Re-run relationship validation and re-certify it.`;
|
|
488
|
+
case 'relationship_evidence_missing':
|
|
489
|
+
case 'relationship_evidence_expired':
|
|
490
|
+
case 'relationship_proof_invalid':
|
|
491
|
+
return `A relationship needed for this question is certified but its warehouse validation evidence is missing, expired, or invalid. Re-run relationship validation to restore it.`;
|
|
492
|
+
case 'relationship_not_certified':
|
|
493
|
+
return `A relationship between ${subject} is declared but cannot power an automatic answer yet. Complete its join keys, validate it against the warehouse, and certify it in the DQL model files.`;
|
|
494
|
+
case 'relationship_ambiguous':
|
|
495
|
+
return `More than one declared relationship could connect ${subject}, and they use different join keys. Tell me which relationship you mean and I will use it.`;
|
|
496
|
+
case 'unbound_relation':
|
|
497
|
+
return `Part of this question references data that is not bound to any modeled entity, so I cannot join it safely. Sync the dbt project or add the missing entity to the DQL model.`;
|
|
498
|
+
case 'unplanned_join':
|
|
499
|
+
return `The generated query used a join that is not part of the declared model, so I did not run it. Rephrase the question or add the missing relationship to the DQL model.`;
|
|
500
|
+
case 'join_key_mismatch':
|
|
501
|
+
return `The generated query joined on different keys than the declared relationship, so I did not run it. Ask again, or review the relationship's declared keys.`;
|
|
502
|
+
case 'unsafe_relationship':
|
|
503
|
+
default:
|
|
504
|
+
return `I can't combine ${subject} yet: no declared join path connects them. Add the missing relationship in the DQL model files, or ask about entities that are already connected.`;
|
|
505
|
+
}
|
|
506
|
+
}
|
|
295
507
|
function relationshipRecordKey(manifest, relationship) {
|
|
296
508
|
return Object.entries(manifest?.modeling?.relationships ?? {}).find(([, candidate]) => candidate === relationship || (Boolean(relationship.qualifiedId) && candidate.qualifiedId === relationship.qualifiedId))?.[0]
|
|
297
509
|
?? relationship.qualifiedId
|
|
298
510
|
?? relationship.id;
|
|
299
511
|
}
|
|
300
512
|
function blocked(code, entities, relationships, message) {
|
|
301
|
-
return {
|
|
513
|
+
return {
|
|
514
|
+
disposition: 'blocked',
|
|
515
|
+
reasonCode: code,
|
|
516
|
+
userFacingReason: analyticalPolicyUserFacingReason(code, entities),
|
|
517
|
+
technicalDetail: message,
|
|
518
|
+
safe: false,
|
|
519
|
+
code,
|
|
520
|
+
message,
|
|
521
|
+
entities,
|
|
522
|
+
relationshipIds: relationships.map((relationship) => relationship.id),
|
|
523
|
+
edges: [],
|
|
524
|
+
};
|
|
302
525
|
}
|
|
303
526
|
function normalizeRelation(value) {
|
|
304
527
|
return value.replace(/["`\[\]]/g, '').trim().toLowerCase();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytical-policy.js","sourceRoot":"","sources":["../../src/metadata/analytical-policy.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"analytical-policy.js","sourceRoot":"","sources":["../../src/metadata/analytical-policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -194,20 +194,38 @@ function inferredTextDimensions(text) {
|
|
|
194
194
|
return uniqueStrings(inferred);
|
|
195
195
|
}
|
|
196
196
|
function unsupportedRequestedFilters(requested, block, question) {
|
|
197
|
+
const memberBindings = requested.memberBindings ?? [];
|
|
198
|
+
const boundValueTokens = new Set(memberBindings.flatMap((binding) => binding.values.map(canonicalToken)));
|
|
199
|
+
const unsupportedBindings = memberBindings.flatMap((binding) => {
|
|
200
|
+
const dimension = canonicalToken(binding.dimension);
|
|
201
|
+
const dimensionAliases = new Set([dimension, dimension.replace(/_name$/, '')]);
|
|
202
|
+
const staticallyScoped = binding.values.every((value) => block.scopeTokens.has(canonicalToken(value)));
|
|
203
|
+
// Only a real parameterized filter contract makes a typed member binding
|
|
204
|
+
// SUPPORTED for exact Tier-1 termination. A matching DIMENSION column is
|
|
205
|
+
// not enough: Tier-1 executes the block verbatim, so a "customer" dimension
|
|
206
|
+
// cannot apply `customer = "Joy Lam"` — claiming support here returned the
|
|
207
|
+
// full unfiltered ranking as a certified answer for a member-scoped
|
|
208
|
+
// follow-up. A dimension match demotes to context_only instead, where the
|
|
209
|
+
// adaptation lane applies the actual restriction (or the generated lane
|
|
210
|
+
// answers the member-specific shape).
|
|
211
|
+
const exposesBinding = [...dimensionAliases].some((alias) => block.filters.includes(alias));
|
|
212
|
+
return staticallyScoped || exposesBinding ? [] : binding.values;
|
|
213
|
+
});
|
|
197
214
|
const requestedFilters = uniqueStrings([
|
|
198
|
-
...requested.filters,
|
|
215
|
+
...requested.filters.filter((filter) => !boundValueTokens.has(canonicalToken(filter))),
|
|
199
216
|
...requested.followUpReferences.flatMap((ref) => ref.resolvedValues ?? []),
|
|
200
217
|
].map(canonicalToken).filter((filter) => Boolean(filter) && !isTemporalFilter(filter)));
|
|
201
|
-
|
|
202
|
-
|
|
218
|
+
const unboundRequestedFilters = requestedFilters.filter((filter) => !boundValueTokens.has(filter));
|
|
219
|
+
if (unboundRequestedFilters.length === 0)
|
|
220
|
+
return uniqueStrings(unsupportedBindings);
|
|
203
221
|
// A certified artifact may bake a restriction into its identity and SQL
|
|
204
222
|
// rather than expose it as a dynamic parameter. For example,
|
|
205
223
|
// top_beverage_customers has WHERE products.is_beverage and is already exactly
|
|
206
224
|
// beverage-scoped. This is stronger than a description mention: scopeTokens
|
|
207
225
|
// are sourced only from the certified name, tags, and WHERE clause.
|
|
208
|
-
const uncoveredFilters =
|
|
226
|
+
const uncoveredFilters = unboundRequestedFilters.filter((filter) => !block.scopeTokens.has(filter));
|
|
209
227
|
if (uncoveredFilters.length === 0)
|
|
210
|
-
return
|
|
228
|
+
return uniqueStrings(unsupportedBindings);
|
|
211
229
|
// A filtered question cannot be answered exactly by an unparameterized block.
|
|
212
230
|
// Returning [] here used to erase the user's restriction and let a broad
|
|
213
231
|
// certified ranking (for example all-customer lifetime spend) answer a
|
|
@@ -224,11 +242,17 @@ function unsupportedRequestedFilters(requested, block, question) {
|
|
|
224
242
|
|| new RegExp(`\\b${words}\\s*(?:=|:|is|equals)`, 'i').test(question);
|
|
225
243
|
});
|
|
226
244
|
if (explicitlyFilterable)
|
|
227
|
-
return
|
|
228
|
-
return
|
|
245
|
+
return uniqueStrings(unsupportedBindings);
|
|
246
|
+
return uniqueStrings([
|
|
247
|
+
...unsupportedBindings,
|
|
248
|
+
...uncoveredFilters.filter((filter) => !block.dimensions.includes(filter)),
|
|
249
|
+
]);
|
|
229
250
|
}
|
|
230
251
|
const blockFilters = new Set(block.filters);
|
|
231
|
-
return
|
|
252
|
+
return uniqueStrings([
|
|
253
|
+
...unsupportedBindings,
|
|
254
|
+
...uncoveredFilters.filter((filter) => !blockFilters.has(filter) && !block.dimensions.includes(filter)),
|
|
255
|
+
]);
|
|
232
256
|
}
|
|
233
257
|
function extractSqlFilterScope(sql) {
|
|
234
258
|
const match = /\bwhere\b([\s\S]*?)(?=\bgroup\s+by\b|\border\s+by\b|\bhaving\b|\blimit\b|$)/i.exec(sql);
|