@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.
Files changed (61) hide show
  1. package/dist/agent-run-engine.d.ts +11 -1
  2. package/dist/agent-run-engine.d.ts.map +1 -1
  3. package/dist/agent-run-engine.js +13 -2
  4. package/dist/agent-run-engine.js.map +1 -1
  5. package/dist/agent-run-gates.d.ts.map +1 -1
  6. package/dist/agent-run-gates.js +2 -1
  7. package/dist/agent-run-gates.js.map +1 -1
  8. package/dist/agent-run-store.d.ts +33 -0
  9. package/dist/agent-run-store.d.ts.map +1 -0
  10. package/dist/agent-run-store.js +167 -0
  11. package/dist/agent-run-store.js.map +1 -0
  12. package/dist/answer-loop.d.ts +32 -3
  13. package/dist/answer-loop.d.ts.map +1 -1
  14. package/dist/answer-loop.js +496 -49
  15. package/dist/answer-loop.js.map +1 -1
  16. package/dist/cascade/budgets.d.ts +3 -1
  17. package/dist/cascade/budgets.d.ts.map +1 -1
  18. package/dist/cascade/budgets.js +10 -1
  19. package/dist/cascade/budgets.js.map +1 -1
  20. package/dist/grounding/context-ledger.d.ts +4 -0
  21. package/dist/grounding/context-ledger.d.ts.map +1 -1
  22. package/dist/grounding/context-ledger.js.map +1 -1
  23. package/dist/index.d.ts +5 -3
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +4 -2
  26. package/dist/index.js.map +1 -1
  27. package/dist/intent-controller.d.ts +7 -0
  28. package/dist/intent-controller.d.ts.map +1 -1
  29. package/dist/intent-controller.js.map +1 -1
  30. package/dist/metadata/analysis-planner.d.ts +8 -0
  31. package/dist/metadata/analysis-planner.d.ts.map +1 -1
  32. package/dist/metadata/analysis-planner.js +50 -2
  33. package/dist/metadata/analysis-planner.js.map +1 -1
  34. package/dist/metadata/analytical-policy.d.ts +40 -2
  35. package/dist/metadata/analytical-policy.d.ts.map +1 -1
  36. package/dist/metadata/analytical-policy.js +276 -53
  37. package/dist/metadata/analytical-policy.js.map +1 -1
  38. package/dist/metadata/block-fit.js +32 -8
  39. package/dist/metadata/block-fit.js.map +1 -1
  40. package/dist/metadata/catalog.d.ts +7 -0
  41. package/dist/metadata/catalog.d.ts.map +1 -1
  42. package/dist/metadata/catalog.js +57 -3
  43. package/dist/metadata/catalog.js.map +1 -1
  44. package/dist/metadata/dbt-first-safety.d.ts +8 -1
  45. package/dist/metadata/dbt-first-safety.d.ts.map +1 -1
  46. package/dist/metadata/dbt-first-safety.js +6 -1
  47. package/dist/metadata/dbt-first-safety.js.map +1 -1
  48. package/dist/metadata/health.d.ts +19 -0
  49. package/dist/metadata/health.d.ts.map +1 -0
  50. package/dist/metadata/health.js +72 -0
  51. package/dist/metadata/health.js.map +1 -0
  52. package/dist/metadata/sql-context-validation.d.ts +5 -1
  53. package/dist/metadata/sql-context-validation.d.ts.map +1 -1
  54. package/dist/metadata/sql-context-validation.js +93 -0
  55. package/dist/metadata/sql-context-validation.js.map +1 -1
  56. package/dist/router.d.ts.map +1 -1
  57. package/dist/router.js +27 -3
  58. package/dist/router.js.map +1 -1
  59. package/dist/tools/registry.js +9 -9
  60. package/dist/tools/registry.js.map +1 -1
  61. 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 adjacency = new Map();
100
- for (const entity of Object.keys(modeling.entities))
101
- adjacency.set(entity, []);
102
- for (const relationship of relationships.filter((value) => assessAnalyticalRelationship(value, manifest).executable)) {
103
- adjacency.get(relationship.from)?.push({ next: relationship.to, relationship });
104
- adjacency.get(relationship.to)?.push({ next: relationship.from, relationship });
105
- }
106
- const selected = new Map();
107
- const connected = new Set([entities[0]]);
108
- for (const target of entities.slice(1)) {
109
- const path = shortestPath([...connected], target, adjacency);
110
- if (!path) {
111
- const candidate = relationships.find((relationship) => (connected.has(relationship.from) && relationship.to === target)
112
- || (connected.has(relationship.to) && relationship.from === target));
113
- if (candidate) {
114
- const decision = assessAnalyticalRelationship(candidate, manifest);
115
- if (!decision.executable && decision.code !== 'unsafe_relationship') {
116
- return blocked(decision.code ?? 'unsafe_relationship', entities, [candidate], decision.message);
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
- for (const relationship of path) {
124
- selected.set(relationship.qualifiedId ?? relationship.id, relationship);
125
- connected.add(relationship.from);
126
- connected.add(relationship.to);
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
- for (const relationship of selected.values()) {
130
- if (relationship.crossDomain) {
131
- const authorization = authorizeCrossDomainRelationship(manifest, relationship, request.domainContext, request.purpose);
132
- if (!authorization.safe)
133
- return blocked(authorization.code, entities, [relationship], authorization.message);
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
- if (relationship.aggregation) {
136
- const missingMeasure = request.measureEntities?.find((entity) => !relationship.aggregation?.measuresFrom.includes(entity));
137
- const missingDimension = request.dimensionEntities?.find((entity) => !relationship.aggregation?.dimensionsFrom.includes(entity));
138
- if (missingMeasure || missingDimension) {
139
- return blocked('unsafe_relationship', entities, [relationship], `Relationship "${relationship.id}" does not authorize the requested measure/dimension direction.`);
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 allowed(entities, [...selected.values()], manifest);
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 (!plan.safe)
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 relationship = plan.relationshipIds
234
- .map((id) => manifest.modeling?.relationships[id])
235
- .find((value) => value && ((value.from === leftKey && value.to === rightKey) || (value.from === rightKey && value.to === leftKey)));
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 { safe: false, code, message, entities, relationshipIds: relationships.map((relationship) => relationship.id), edges: [] };
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
- if (requestedFilters.length === 0)
202
- return [];
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 = requestedFilters.filter((filter) => !block.scopeTokens.has(filter));
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 uncoveredFilters.filter((filter) => !block.dimensions.includes(filter));
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 uncoveredFilters.filter((filter) => !blockFilters.has(filter) && !block.dimensions.includes(filter));
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);