@principal-ai/principal-view-core 0.27.2 → 0.28.1

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 (39) hide show
  1. package/dist/events/EventsCanvasValidator.d.ts +13 -0
  2. package/dist/events/EventsCanvasValidator.d.ts.map +1 -1
  3. package/dist/events/EventsCanvasValidator.js +70 -0
  4. package/dist/events/EventsCanvasValidator.js.map +1 -1
  5. package/dist/events/NamespacePathIndex.d.ts +61 -0
  6. package/dist/events/NamespacePathIndex.d.ts.map +1 -0
  7. package/dist/events/NamespacePathIndex.js +74 -0
  8. package/dist/events/NamespacePathIndex.js.map +1 -0
  9. package/dist/events/OtelEventPathsValidator.d.ts +75 -0
  10. package/dist/events/OtelEventPathsValidator.d.ts.map +1 -0
  11. package/dist/events/OtelEventPathsValidator.js +126 -0
  12. package/dist/events/OtelEventPathsValidator.js.map +1 -0
  13. package/dist/events/index.d.ts +4 -0
  14. package/dist/events/index.d.ts.map +1 -1
  15. package/dist/events/index.js +5 -1
  16. package/dist/events/index.js.map +1 -1
  17. package/dist/events/path-helpers.d.ts +33 -0
  18. package/dist/events/path-helpers.d.ts.map +1 -0
  19. package/dist/events/path-helpers.js +59 -0
  20. package/dist/events/path-helpers.js.map +1 -0
  21. package/dist/index.d.ts +2 -2
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +4 -2
  24. package/dist/index.js.map +1 -1
  25. package/dist/node.d.ts +2 -2
  26. package/dist/node.d.ts.map +1 -1
  27. package/dist/node.js +3 -1
  28. package/dist/node.js.map +1 -1
  29. package/package.json +1 -1
  30. package/src/events/EventsCanvasValidator.test.ts +190 -0
  31. package/src/events/EventsCanvasValidator.ts +86 -0
  32. package/src/events/NamespacePathIndex.test.ts +97 -0
  33. package/src/events/NamespacePathIndex.ts +100 -0
  34. package/src/events/OtelEventPathsValidator.test.ts +243 -0
  35. package/src/events/OtelEventPathsValidator.ts +191 -0
  36. package/src/events/index.ts +13 -0
  37. package/src/events/path-helpers.ts +53 -0
  38. package/src/index.ts +9 -1
  39. package/src/node.ts +14 -1
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ /**
3
+ * Path helpers shared across events-canvas validators.
4
+ *
5
+ * Paths declared in canvases (namespace `paths`, `otel.files`, etc.) are
6
+ * always repo-relative. These helpers give a consistent notion of
7
+ * canonicalization and prefix-based containment so that separate validators
8
+ * don't drift.
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.pathsOverlap = exports.pathCovers = exports.isPathDescendant = exports.normalizePath = void 0;
12
+ /**
13
+ * Canonicalize a declared path for comparison.
14
+ * Strips leading `./`, trailing slashes, and collapses duplicate slashes.
15
+ */
16
+ function normalizePath(p) {
17
+ return p
18
+ .replace(/^\.\//, '')
19
+ .replace(/\/+$/, '')
20
+ .replace(/\/+/g, '/');
21
+ }
22
+ exports.normalizePath = normalizePath;
23
+ /**
24
+ * True when `child` is strictly nested under `parent` (not equal).
25
+ * Both inputs should already be normalized.
26
+ */
27
+ function isPathDescendant(child, parent) {
28
+ return child.startsWith(parent + '/');
29
+ }
30
+ exports.isPathDescendant = isPathDescendant;
31
+ /**
32
+ * True when `filepath` is covered by `declaredPath` — either equal to it
33
+ * (file match) or nested under it (folder match). Inputs are normalized
34
+ * internally so callers can pass raw canvas values.
35
+ */
36
+ function pathCovers(declaredPath, filepath) {
37
+ const d = normalizePath(declaredPath);
38
+ const f = normalizePath(filepath);
39
+ return d === f || isPathDescendant(f, d);
40
+ }
41
+ exports.pathCovers = pathCovers;
42
+ /**
43
+ * Classify the relationship between two declared paths.
44
+ * - 'none': disjoint — no overlap
45
+ * - 'partition': one is strictly a parent of the other — valid nested-namespace case
46
+ * (longest-prefix wins at runtime, parent/child partition the tree)
47
+ * - 'conflict': identical, or overlap that isn't a clean parent-child partition
48
+ */
49
+ function pathsOverlap(a, b) {
50
+ const na = normalizePath(a);
51
+ const nb = normalizePath(b);
52
+ if (na === nb)
53
+ return 'conflict';
54
+ if (isPathDescendant(na, nb) || isPathDescendant(nb, na))
55
+ return 'partition';
56
+ return 'none';
57
+ }
58
+ exports.pathsOverlap = pathsOverlap;
59
+ //# sourceMappingURL=path-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-helpers.js","sourceRoot":"","sources":["../../src/events/path-helpers.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAEH;;;GAGG;AACH,SAAgB,aAAa,CAAC,CAAS;IACrC,OAAO,CAAC;SACL,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;SACpB,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;SACnB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC1B,CAAC;AALD,sCAKC;AAED;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,KAAa,EAAE,MAAc;IAC5D,OAAO,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;AACxC,CAAC;AAFD,4CAEC;AAED;;;;GAIG;AACH,SAAgB,UAAU,CAAC,YAAoB,EAAE,QAAgB;IAC/D,MAAM,CAAC,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;IACtC,MAAM,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAClC,OAAO,CAAC,KAAK,CAAC,IAAI,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3C,CAAC;AAJD,gCAIC;AAED;;;;;;GAMG;AACH,SAAgB,YAAY,CAAC,CAAS,EAAE,CAAS;IAC/C,MAAM,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,UAAU,CAAC;IACjC,IAAI,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC;QAAE,OAAO,WAAW,CAAC;IAC7E,OAAO,MAAM,CAAC;AAChB,CAAC;AAND,oCAMC"}
package/dist/index.d.ts CHANGED
@@ -48,8 +48,8 @@ export type { DiscoveredCanvas, DiscoveredTestTrace, DiscoveredWorkflow, Discove
48
48
  export { buildCanvasFileManifest, buildWorkflowFileManifest, buildStoryboardFileManifest, } from './discovery/CanvasFileManifest';
49
49
  export { ScopesCanvasValidator, DEFAULT_SCOPE_COLOR, DRAFT_NODE_COLOR, getScopeNames, getScopeDefinition, getScopeColor, normalizeScopes, buildScopeColorMap, getAllScopeNames, } from './scopes';
50
50
  export type { ScopesCanvasValidationContext, ScopesCanvasValidationResult, ScopesCanvasViolation, NormalizedScope, } from './scopes';
51
- export { EventsCanvasValidator } from './events';
52
- export type { EventNamespaceNode, EventsCanvasValidationContext, EventsCanvasViolation, EventsCanvasValidationResult, } from './events';
51
+ export { EventsCanvasValidator, NamespacePathIndex, OtelEventPathsValidator } from './events';
52
+ export type { EventNamespaceNode, EventsCanvasValidationContext, EventsCanvasViolation, EventsCanvasValidationResult, NamespacePathEntry, NamespacePathMatch, EventsCanvasInput, OtelCanvasInput, OtelEventPathsValidationContext, OtelEventPathsValidationResult, OtelEventPathsViolation, OtelEventPathsRuleId, } from './events';
53
53
  export { DEFAULT_SPAN_COLOR, extractSpanConvention, extractSpanConventions, buildSpanColorMap, buildSpanColorMapFromCanvases, matchSpanPattern, getSpanColor, resolveEventSpanColor, } from './spans';
54
54
  export type { NormalizedSpanConvention } from './spans';
55
55
  export { ExecutionValidator, createExecutionValidator } from './execution/ExecutionValidator';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EACL,UAAU,EACV,UAAU,EACV,UAAU,EACV,WAAW,EACX,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,wBAAwB,EACxB,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,UAAU,EACV,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,gBAAgB,CAAC;AAGxB,YAAY,EACV,kBAAkB,EAClB,SAAS,EACT,SAAS,EACT,kBAAkB,EAClB,kBAAkB,EAClB,SAAS,EACT,UAAU,EACV,SAAS,EACT,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,QAAQ,EACR,YAAY,EACZ,OAAO,EACP,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,sBAAsB,EACtB,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,SAAS,EACT,UAAU,GACX,MAAM,SAAS,CAAC;AAGjB,YAAY,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAG7E,YAAY,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAKxF,YAAY,EAEV,WAAW,EACX,UAAU,EACV,cAAc,EACd,qBAAqB,EACrB,cAAc,EACd,cAAc,EACd,cAAc,EACd,cAAc,EACd,eAAe,EACf,UAAU,EACV,UAAU,EACV,MAAM,EAEN,eAAe,EACf,oBAAoB,EACpB,WAAW,EACX,WAAW,EACX,UAAU,EACV,WAAW,EACX,UAAU,EACV,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,eAAe,EACf,eAAe,EACf,YAAY,EACZ,eAAe,EACf,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EAEjB,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EAEd,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,sBAAsB,EACtB,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,QAAQ,EAER,YAAY,GACb,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,UAAU,EACV,UAAU,EACV,UAAU,EACV,WAAW,EACX,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,wBAAwB,EACxB,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,UAAU,EACV,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,GACnB,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAG5E,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AACtF,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAI1D,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC3E,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAChH,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,cAAc,GACf,MAAM,6BAA6B,CAAC;AAGrC,YAAY,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACxF,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,SAAS,EACT,UAAU,EACV,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,2BAA2B,EAC3B,aAAa,EACb,YAAY,EACZ,aAAa,GACd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,YAAY,EACZ,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAG1B,YAAY,EAEV,6BAA6B,EAC7B,qBAAqB,EACrB,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,cAAc,EACd,wBAAwB,EAExB,SAAS,EACT,iBAAiB,EAEjB,cAAc,EACd,kBAAkB,EAClB,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AAGtB,YAAY,EACV,eAAe,EACf,aAAa,EACb,WAAW,EACX,aAAa,EACb,YAAY,EACZ,eAAe,EACf,aAAa,EACb,cAAc,EACd,eAAe,EACf,2BAA2B,EAC3B,oBAAoB,EACpB,QAAQ,EACR,KAAK,EACL,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAG/E,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAGjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,YAAY,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAGjF,OAAO,EACL,uBAAuB,EACvB,aAAa,EACb,iBAAiB,EACjB,yBAAyB,EACzB,aAAa,EACb,eAAe,EACf,eAAe,EACf,cAAc,GACf,MAAM,cAAc,CAAC;AAGtB,YAAY,EACV,iBAAiB,EACjB,eAAe,EACf,sBAAsB,EACtB,kBAAkB,EAClB,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,uBAAuB,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAC;AAGpG,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG7D,OAAO,EACL,yBAAyB,EACzB,2BAA2B,EAC3B,yBAAyB,EACzB,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,uBAAuB,EACvB,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,EACf,oBAAoB,GACrB,MAAM,gCAAgC,CAAC;AACxC,YAAY,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAGhE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAG9D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,YAAY,EACV,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,EACd,qBAAqB,EACrB,gBAAgB,EAChB,UAAU,EACV,aAAa,EACb,2BAA2B,EAC3B,8BAA8B,EAC9B,6BAA6B,EAC7B,+BAA+B,EAC/B,8BAA8B,EAC9B,gCAAgC,EAEhC,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,4BAA4B,EAC5B,8BAA8B,EAC9B,gCAAgC,GACjC,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,2BAA2B,GAC5B,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,UAAU,CAAC;AAClB,YAAY,EACV,6BAA6B,EAC7B,4BAA4B,EAC5B,qBAAqB,EACrB,eAAe,GAChB,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAC9F,YAAY,EACV,kBAAkB,EAClB,6BAA6B,EAC7B,qBAAqB,EACrB,4BAA4B,EAC5B,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,+BAA+B,EAC/B,8BAA8B,EAC9B,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,6BAA6B,EAC7B,gBAAgB,EAChB,YAAY,EACZ,qBAAqB,GACtB,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAGxD,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC9F,YAAY,EACV,aAAa,EACb,eAAe,EACf,yBAAyB,GAC1B,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAC3E,YAAY,EACV,wBAAwB,EACxB,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EACV,eAAe,EACf,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,YAAY,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAG1D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EACV,aAAa,EACb,aAAa,EACb,eAAe,EACf,YAAY,EACZ,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,YAAY,EACV,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,UAAU,EACV,eAAe,EACf,WAAW,EACX,WAAW,EACX,YAAY,EACZ,UAAU,EACV,eAAe,EACf,eAAe,EACf,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAGxF,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxD,YAAY,EACV,sBAAsB,EACtB,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,YAAY,EACV,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,8BAA8B,CAAC;AAGtC,YAAY,EACV,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,0BAA0B,EAC1B,YAAY,EACZ,6BAA6B,GAC9B,MAAM,oBAAoB,CAAC;AAG5B,YAAY,EAEV,mBAAmB,EACnB,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,WAAW,EACX,UAAU,EACV,SAAS,EACT,eAAe,EACf,aAAa,EACb,gBAAgB,EAEhB,eAAe,EACf,YAAY,EACZ,cAAc,EAEd,cAAc,EACd,eAAe,EACf,aAAa,EAEb,eAAe,EACf,SAAS,EACT,eAAe,EACf,eAAe,EAEf,UAAU,EACV,YAAY,GACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,sBAAsB,EACtB,6BAA6B,EAC7B,aAAa,GACd,MAAM,oBAAoB,CAAC;AAG5B,YAAY,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC"}
package/dist/index.js CHANGED
@@ -11,8 +11,8 @@
11
11
  */
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
13
  exports.createInMemoryVersionRegistry = exports.InMemoryVersionRegistry = exports.isWarnSeverity = exports.isErrorSeverity = exports.getSpanDuration = exports.parseNanoTime = exports.flattenResourceAttributes = exports.getAttributeValue = exports.findAttribute = exports.getAttributeStringValue = exports.TraceOrchestrator = exports.CompositeRegistry = exports.LocalRegistry = exports.RemoteRegistry = exports.OtlpTraceParser = exports.getWorkflowRootSpan = exports.getEventSpan = exports.getEventTemplateString = exports.isEventTemplate = exports.deriveEdgesFromSequence = exports.extractEventSpans = exports.setNestedValue = exports.getNestedValue = exports.computeAggregates = exports.hasEventMatching = exports.getRequiredEvents = exports.selectScenario = exports.ParsedTemplate = exports.parseTemplate = exports.renderEventTemplate = exports.renderWorkflow = exports.getConfigNameFromFilename = exports.isYamlFile = exports.parseYaml = exports.CanvasConverter = exports.resolveCanvasColor = exports.CANVAS_COLOR_PRESETS = exports.getOtelNodeIdentifier = exports.isOtelNode = exports.isOtelBoundaryNode = exports.isOtelResourceNode = exports.isOtelScopeNode = exports.isOtelSpanConventionNode = exports.isOtelEventNode = exports.isStandardCanvasNode = exports.hasPVExtension = exports.isGroupNode = exports.isLinkNode = exports.isFileNode = exports.isTextNode = void 0;
14
- exports.buildEventNodeMap = exports.buildStoryboardContext = exports.LibraryDiscovery = exports.validateLibraryStructure = exports.LibraryLoader = exports.EventRecorderService = exports.SessionManager = exports.PathBasedEventProcessor = exports.analyzeCoverage = exports.createDashboardValidator = exports.DashboardValidator = exports.createExecutionValidator = exports.ExecutionValidator = exports.resolveEventSpanColor = exports.getSpanColor = exports.matchSpanPattern = exports.buildSpanColorMapFromCanvases = exports.buildSpanColorMap = exports.extractSpanConventions = exports.extractSpanConvention = exports.DEFAULT_SPAN_COLOR = exports.EventsCanvasValidator = exports.getAllScopeNames = exports.buildScopeColorMap = exports.normalizeScopes = exports.getScopeColor = exports.getScopeDefinition = exports.getScopeNames = exports.DRAFT_NODE_COLOR = exports.DEFAULT_SCOPE_COLOR = exports.ScopesCanvasValidator = exports.buildStoryboardFileManifest = exports.buildWorkflowFileManifest = exports.buildCanvasFileManifest = exports.CanvasDiscovery = exports.SpanMatcher = exports.getScopeMatchSummary = exports.scopeHasMatches = exports.getScopeWithMostSpans = exports.getSpanCountForScope = exports.findScopeByName = exports.getUnmatchedScopes = exports.getPartialMatchedScopes = exports.getMatchedScopes = exports.getAllScopes = exports.getPrimaryScope = exports.getScopeFromUnmatchedSpan = exports.getScopeFromStoryboardMatch = exports.getScopeFromScenarioMatch = exports.groupSpansByTrace = void 0;
15
- exports.InMemoryFileSystemAdapter = exports.getAllNodeIds = exports.findNodesMatchingEventPattern = exports.resolveWorkflowNodeIds = exports.resolveScenarioNodeIds = exports.getNodeEventName = void 0;
14
+ exports.LibraryDiscovery = exports.validateLibraryStructure = exports.LibraryLoader = exports.EventRecorderService = exports.SessionManager = exports.PathBasedEventProcessor = exports.analyzeCoverage = exports.createDashboardValidator = exports.DashboardValidator = exports.createExecutionValidator = exports.ExecutionValidator = exports.resolveEventSpanColor = exports.getSpanColor = exports.matchSpanPattern = exports.buildSpanColorMapFromCanvases = exports.buildSpanColorMap = exports.extractSpanConventions = exports.extractSpanConvention = exports.DEFAULT_SPAN_COLOR = exports.OtelEventPathsValidator = exports.NamespacePathIndex = exports.EventsCanvasValidator = exports.getAllScopeNames = exports.buildScopeColorMap = exports.normalizeScopes = exports.getScopeColor = exports.getScopeDefinition = exports.getScopeNames = exports.DRAFT_NODE_COLOR = exports.DEFAULT_SCOPE_COLOR = exports.ScopesCanvasValidator = exports.buildStoryboardFileManifest = exports.buildWorkflowFileManifest = exports.buildCanvasFileManifest = exports.CanvasDiscovery = exports.SpanMatcher = exports.getScopeMatchSummary = exports.scopeHasMatches = exports.getScopeWithMostSpans = exports.getSpanCountForScope = exports.findScopeByName = exports.getUnmatchedScopes = exports.getPartialMatchedScopes = exports.getMatchedScopes = exports.getAllScopes = exports.getPrimaryScope = exports.getScopeFromUnmatchedSpan = exports.getScopeFromStoryboardMatch = exports.getScopeFromScenarioMatch = exports.groupSpansByTrace = void 0;
15
+ exports.InMemoryFileSystemAdapter = exports.getAllNodeIds = exports.findNodesMatchingEventPattern = exports.resolveWorkflowNodeIds = exports.resolveScenarioNodeIds = exports.getNodeEventName = exports.buildEventNodeMap = exports.buildStoryboardContext = void 0;
16
16
  // Import canvas utility functions to re-export (avoids export-from syntax that breaks with exports field)
17
17
  const canvas_1 = require("./types/canvas");
18
18
  Object.defineProperty(exports, "isTextNode", { enumerable: true, get: function () { return canvas_1.isTextNode; } });
@@ -129,6 +129,8 @@ Object.defineProperty(exports, "getAllScopeNames", { enumerable: true, get: func
129
129
  // Export events module (event namespace canvas validation)
130
130
  var events_1 = require("./events");
131
131
  Object.defineProperty(exports, "EventsCanvasValidator", { enumerable: true, get: function () { return events_1.EventsCanvasValidator; } });
132
+ Object.defineProperty(exports, "NamespacePathIndex", { enumerable: true, get: function () { return events_1.NamespacePathIndex; } });
133
+ Object.defineProperty(exports, "OtelEventPathsValidator", { enumerable: true, get: function () { return events_1.OtelEventPathsValidator; } });
132
134
  // Export spans module (span conventions + span color utilities)
133
135
  var spans_1 = require("./spans");
134
136
  Object.defineProperty(exports, "DEFAULT_SPAN_COLOR", { enumerable: true, get: function () { return spans_1.DEFAULT_SPAN_COLOR; } });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/node.d.ts CHANGED
@@ -59,6 +59,6 @@ export { ExecutionLoader, createExecutionLoader } from './execution/ExecutionLoa
59
59
  export type { ExecutionFile, ExecutionLoadResult, } from './execution/ExecutionLoader';
60
60
  export { ScopesCanvasValidator, DEFAULT_SCOPE_COLOR, DRAFT_NODE_COLOR, getScopeNames, getScopeDefinition, getScopeColor, normalizeScopes, buildScopeColorMap, getAllScopeNames, } from './scopes';
61
61
  export type { ScopesCanvasValidationContext, ScopesCanvasValidationResult, ScopesCanvasViolation, NormalizedScope, } from './scopes';
62
- export { EventsCanvasValidator, ScopeEventsValidator } from './events';
63
- export type { EventsCanvasValidationContext, EventsCanvasValidationResult, EventsCanvasViolation, ScopeEventsValidationContext, ScopeEventsValidationResult, ScopeEventsViolation, } from './events';
62
+ export { EventsCanvasValidator, ScopeEventsValidator, NamespacePathIndex, OtelEventPathsValidator, } from './events';
63
+ export type { EventsCanvasValidationContext, EventsCanvasValidationResult, EventsCanvasViolation, ScopeEventsValidationContext, ScopeEventsValidationResult, ScopeEventsViolation, NamespacePathEntry, NamespacePathMatch, EventsCanvasInput, OtelCanvasInput, OtelEventPathsValidationContext, OtelEventPathsValidationResult, OtelEventPathsViolation, OtelEventPathsRuleId, } from './events';
64
64
  //# sourceMappingURL=node.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"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"}
package/dist/node.js CHANGED
@@ -26,7 +26,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
26
26
  };
27
27
  Object.defineProperty(exports, "__esModule", { value: true });
28
28
  exports.getScopeDefinition = exports.getScopeNames = exports.DRAFT_NODE_COLOR = exports.DEFAULT_SCOPE_COLOR = exports.ScopesCanvasValidator = exports.createExecutionLoader = exports.ExecutionLoader = exports.createDashboardValidator = exports.DashboardValidator = exports.createExecutionValidator = exports.ExecutionValidator = exports.LibraryDiscovery = exports.CanvasDiscovery = exports.WorkflowValidator = exports.createWorkflowValidator = exports.setNestedValue = exports.getNestedValue = exports.computeAggregates = exports.hasEventMatching = exports.getRequiredEvents = exports.selectScenario = exports.ParsedTemplate = exports.parseTemplate = exports.renderWorkflow = exports.InMemoryFileSystemAdapter = exports.EventRegistry = exports.LibraryLoader = exports.getConfigNameFromFilename = exports.isYamlFile = exports.parseYaml = exports.ConfigurationLoader = exports.EventRecorderService = exports.SessionManager = exports.traceToCanvasJson = exports.traceToCanvas = exports.generatorRegistry = exports.TypeScriptGenerator = exports.generateTypes = exports.analyzeCoverage = exports.EventValidationError = exports.createValidatedEmitter = exports.EventValidator = exports.CanvasConverter = exports.GraphConverter = exports.PathMatcher = exports.PathBasedEventProcessor = exports.GraphInstrumentationHelper = exports.ConfigurationValidator = exports.ValidationEngine = exports.EventProcessor = void 0;
29
- exports.ScopeEventsValidator = exports.EventsCanvasValidator = exports.getAllScopeNames = exports.buildScopeColorMap = exports.normalizeScopes = exports.getScopeColor = void 0;
29
+ exports.OtelEventPathsValidator = exports.NamespacePathIndex = exports.ScopeEventsValidator = exports.EventsCanvasValidator = exports.getAllScopeNames = exports.buildScopeColorMap = exports.normalizeScopes = exports.getScopeColor = void 0;
30
30
  // Export all types (safe in all environments)
31
31
  __exportStar(require("./types"), exports);
32
32
  // Export core classes (Node.js processing)
@@ -137,4 +137,6 @@ Object.defineProperty(exports, "getAllScopeNames", { enumerable: true, get: func
137
137
  var events_1 = require("./events");
138
138
  Object.defineProperty(exports, "EventsCanvasValidator", { enumerable: true, get: function () { return events_1.EventsCanvasValidator; } });
139
139
  Object.defineProperty(exports, "ScopeEventsValidator", { enumerable: true, get: function () { return events_1.ScopeEventsValidator; } });
140
+ Object.defineProperty(exports, "NamespacePathIndex", { enumerable: true, get: function () { return events_1.NamespacePathIndex; } });
141
+ Object.defineProperty(exports, "OtelEventPathsValidator", { enumerable: true, get: function () { return events_1.OtelEventPathsValidator; } });
140
142
  //# sourceMappingURL=node.js.map
package/dist/node.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@principal-ai/principal-view-core",
3
- "version": "0.27.2",
3
+ "version": "0.28.1",
4
4
  "description": "Core logic and types for graph-based principal view framework",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -0,0 +1,190 @@
1
+ import { describe, expect, test, beforeAll, afterAll } from 'bun:test';
2
+ import { mkdtempSync, mkdirSync, rmSync } from 'fs';
3
+ import { tmpdir } from 'os';
4
+ import { join } from 'path';
5
+ import { EventsCanvasValidator } from './EventsCanvasValidator';
6
+ import type { ExtendedCanvas } from '../types/canvas';
7
+
8
+ let testRoot: string;
9
+
10
+ beforeAll(() => {
11
+ testRoot = mkdtempSync(join(tmpdir(), 'events-canvas-validator-'));
12
+ mkdirSync(join(testRoot, 'src/events'), { recursive: true });
13
+ mkdirSync(join(testRoot, 'src/workflow/scenarios'), { recursive: true });
14
+ mkdirSync(join(testRoot, 'src/trace'), { recursive: true });
15
+ mkdirSync(join(testRoot, 'src/generated/events'), { recursive: true });
16
+ });
17
+
18
+ afterAll(() => {
19
+ rmSync(testRoot, { recursive: true, force: true });
20
+ });
21
+
22
+ function namespaceNode(
23
+ id: string,
24
+ name: string,
25
+ opts: { paths?: string[]; eventNames?: string[] } = {},
26
+ ): any {
27
+ const eventNames = opts.eventNames ?? [`${name}.happened`];
28
+ return {
29
+ id,
30
+ type: 'event-namespace',
31
+ x: 0,
32
+ y: 0,
33
+ width: 100,
34
+ height: 100,
35
+ namespace: {
36
+ name,
37
+ description: `${name} description`,
38
+ paths: opts.paths,
39
+ events: eventNames.map((n) => ({
40
+ name: n,
41
+ severity: 'INFO',
42
+ description: `desc for ${n}`,
43
+ })),
44
+ },
45
+ };
46
+ }
47
+
48
+ function canvas(nodes: any[]): ExtendedCanvas {
49
+ return { nodes, edges: [] } as unknown as ExtendedCanvas;
50
+ }
51
+
52
+ async function runValidator(nodes: any[]) {
53
+ const validator = new EventsCanvasValidator();
54
+ return validator.validate({
55
+ eventsCanvas: canvas(nodes),
56
+ eventsCanvasPath: 'test.events.canvas',
57
+ basePath: testRoot,
58
+ });
59
+ }
60
+
61
+ function rules(result: { violations: Array<{ ruleId: string }> }, ruleId: string) {
62
+ return result.violations.filter((v) => v.ruleId === ruleId);
63
+ }
64
+
65
+ describe('EventsCanvasValidator — paths field', () => {
66
+ test('namespace without paths: no path-related violations (opt-in, backward compatible)', async () => {
67
+ const result = await runValidator([namespaceNode('events', 'events')]);
68
+
69
+ expect(rules(result, 'events-namespace-multiple-paths')).toHaveLength(0);
70
+ expect(rules(result, 'events-namespace-paths-missing')).toHaveLength(0);
71
+ expect(rules(result, 'events-namespace-paths-overlap')).toHaveLength(0);
72
+ });
73
+
74
+ test('namespace with one existing path: no path-related violations', async () => {
75
+ const result = await runValidator([
76
+ namespaceNode('events', 'events', { paths: ['src/events'] }),
77
+ ]);
78
+
79
+ expect(rules(result, 'events-namespace-multiple-paths')).toHaveLength(0);
80
+ expect(rules(result, 'events-namespace-paths-missing')).toHaveLength(0);
81
+ expect(rules(result, 'events-namespace-paths-overlap')).toHaveLength(0);
82
+ });
83
+
84
+ test('namespace with missing path: warns events-namespace-paths-missing', async () => {
85
+ const result = await runValidator([
86
+ namespaceNode('events', 'events', { paths: ['src/does-not-exist'] }),
87
+ ]);
88
+
89
+ const missing = rules(result, 'events-namespace-paths-missing');
90
+ expect(missing).toHaveLength(1);
91
+ expect(missing[0].severity).toBe('warn');
92
+ expect(missing[0].message).toContain('src/does-not-exist');
93
+ });
94
+
95
+ test('namespace with multiple paths: warns events-namespace-multiple-paths', async () => {
96
+ const result = await runValidator([
97
+ namespaceNode('events', 'events', {
98
+ paths: ['src/events', 'src/generated/events'],
99
+ }),
100
+ ]);
101
+
102
+ const multi = rules(result, 'events-namespace-multiple-paths');
103
+ expect(multi).toHaveLength(1);
104
+ expect(multi[0].severity).toBe('warn');
105
+ expect(multi[0].message).toContain('2 paths');
106
+ });
107
+
108
+ test('two namespaces declaring identical paths: errors events-namespace-paths-overlap', async () => {
109
+ const result = await runValidator([
110
+ namespaceNode('a', 'alpha', {
111
+ paths: ['src/events'],
112
+ eventNames: ['alpha.happened'],
113
+ }),
114
+ namespaceNode('b', 'beta', {
115
+ paths: ['src/events'],
116
+ eventNames: ['beta.happened'],
117
+ }),
118
+ ]);
119
+
120
+ const overlap = rules(result, 'events-namespace-paths-overlap');
121
+ expect(overlap).toHaveLength(1);
122
+ expect(overlap[0].severity).toBe('error');
123
+ expect(result.valid).toBe(false);
124
+ });
125
+
126
+ test('parent-child partition (workflow / workflow.scenarios): no overlap error', async () => {
127
+ const result = await runValidator([
128
+ namespaceNode('workflow', 'workflow', {
129
+ paths: ['src/workflow'],
130
+ eventNames: ['workflow.happened'],
131
+ }),
132
+ namespaceNode('workflow.scenarios', 'workflow.scenarios', {
133
+ paths: ['src/workflow/scenarios'],
134
+ eventNames: ['workflow.scenarios.matched'],
135
+ }),
136
+ ]);
137
+
138
+ expect(rules(result, 'events-namespace-paths-overlap')).toHaveLength(0);
139
+ });
140
+
141
+ test('disjoint sibling paths: no overlap error', async () => {
142
+ const result = await runValidator([
143
+ namespaceNode('events', 'events', {
144
+ paths: ['src/events'],
145
+ eventNames: ['events.happened'],
146
+ }),
147
+ namespaceNode('trace', 'trace', {
148
+ paths: ['src/trace'],
149
+ eventNames: ['trace.happened'],
150
+ }),
151
+ ]);
152
+
153
+ expect(rules(result, 'events-namespace-paths-overlap')).toHaveLength(0);
154
+ });
155
+
156
+ test('path normalization: trailing slashes and "./" prefix compared equivalently', async () => {
157
+ const result = await runValidator([
158
+ namespaceNode('a', 'alpha', {
159
+ paths: ['src/events/'],
160
+ eventNames: ['alpha.happened'],
161
+ }),
162
+ namespaceNode('b', 'beta', {
163
+ paths: ['./src/events'],
164
+ eventNames: ['beta.happened'],
165
+ }),
166
+ ]);
167
+
168
+ expect(rules(result, 'events-namespace-paths-overlap')).toHaveLength(1);
169
+ });
170
+
171
+ test('similar-prefix paths that are not parent/child: no overlap error', async () => {
172
+ // src/foo and src/foobar share a prefix but neither is a descendant of the other.
173
+ // These should not trigger the overlap rule.
174
+ mkdirSync(join(testRoot, 'src/foo'), { recursive: true });
175
+ mkdirSync(join(testRoot, 'src/foobar'), { recursive: true });
176
+
177
+ const result = await runValidator([
178
+ namespaceNode('a', 'foo', {
179
+ paths: ['src/foo'],
180
+ eventNames: ['foo.happened'],
181
+ }),
182
+ namespaceNode('b', 'foobar', {
183
+ paths: ['src/foobar'],
184
+ eventNames: ['foobar.happened'],
185
+ }),
186
+ ]);
187
+
188
+ expect(rules(result, 'events-namespace-paths-overlap')).toHaveLength(0);
189
+ });
190
+ });
@@ -6,6 +6,9 @@
6
6
  */
7
7
 
8
8
  import type { ExtendedCanvas, ExtendedCanvasNode } from '../types/canvas';
9
+ import { existsSync } from 'fs';
10
+ import { resolve } from 'path';
11
+ import { pathsOverlap } from './path-helpers';
9
12
 
10
13
  /**
11
14
  * Event namespace node structure
@@ -16,6 +19,19 @@ export interface EventNamespaceNode {
16
19
  namespace: {
17
20
  name: string;
18
21
  description: string;
22
+ /**
23
+ * Optional source paths that define this component's code location.
24
+ * Each entry may be a folder (covers all descendants) or a specific file.
25
+ * When present, events in this namespace may only be emitted from files
26
+ * covered by one of these paths. Namespaces without `paths` remain
27
+ * unenforced — enforcement is opt-in per namespace.
28
+ *
29
+ * Multiple entries are valid for cases like generated code, platform-split
30
+ * implementations, or migration periods. The validator warns when
31
+ * `paths.length > 1` to prompt authors to confirm the multi-location
32
+ * is intentional.
33
+ */
34
+ paths?: string[];
19
35
  events: Array<{
20
36
  name: string;
21
37
  severity?: 'INFO' | 'WARN' | 'ERROR';
@@ -328,6 +344,76 @@ export class EventsCanvasValidator {
328
344
  }
329
345
  }
330
346
 
347
+ // Validate namespace paths (optional field — enforcement is opt-in per namespace).
348
+ // Collects declared paths across namespaces to check for cross-namespace overlap.
349
+ const declaredPaths: Array<{ namespace: string; nodeId: string; path: string }> = [];
350
+ for (const node of eventsCanvas.nodes || []) {
351
+ if (!this.isEventNamespaceNode(node)) continue;
352
+ const namespaceNode = node as EventNamespaceNode;
353
+ const paths = namespaceNode.namespace.paths;
354
+ if (!paths || paths.length === 0) continue;
355
+
356
+ // Warn when a namespace declares more than one path — prompt author to
357
+ // confirm the multi-location is intentional (generated code, platform
358
+ // splits, migration) rather than an accidental sprawl.
359
+ if (paths.length > 1) {
360
+ violations.push({
361
+ ruleId: 'events-namespace-multiple-paths',
362
+ severity: 'warn',
363
+ file: eventsCanvasPath || '.principal-views/cli.events.canvas',
364
+ path: `nodes[id="${namespaceNode.id}"].namespace.paths`,
365
+ message: `Namespace "${namespaceNode.namespace.name}" declares ${paths.length} paths`,
366
+ impact: 'Multiple paths can indicate legitimate cases (generated code, platform splits, migration) but often signal that the namespace should be split',
367
+ suggestion: 'Confirm the multi-location is intentional. Otherwise consider splitting the namespace or grouping the code under a single parent folder.',
368
+ });
369
+ }
370
+
371
+ for (const p of paths) {
372
+ declaredPaths.push({
373
+ namespace: namespaceNode.namespace.name,
374
+ nodeId: namespaceNode.id,
375
+ path: p,
376
+ });
377
+
378
+ // Warn when a declared path does not exist relative to the repo root.
379
+ const resolved = resolve(basePath, p);
380
+ if (!existsSync(resolved)) {
381
+ violations.push({
382
+ ruleId: 'events-namespace-paths-missing',
383
+ severity: 'warn',
384
+ file: eventsCanvasPath || '.principal-views/cli.events.canvas',
385
+ path: `nodes[id="${namespaceNode.id}"].namespace.paths`,
386
+ message: `Path "${p}" declared by namespace "${namespaceNode.namespace.name}" does not exist`,
387
+ impact: 'Events emitted under this namespace cannot be validated against a real code location',
388
+ suggestion: 'Verify the path exists relative to the repository root, or remove it from the namespace declaration.',
389
+ });
390
+ }
391
+ }
392
+ }
393
+
394
+ // Cross-namespace overlap check. Parent-child nesting is a valid partition
395
+ // (longest-prefix wins at runtime); any other overlap makes namespace
396
+ // ownership of a file ambiguous.
397
+ for (let i = 0; i < declaredPaths.length; i++) {
398
+ for (let j = i + 1; j < declaredPaths.length; j++) {
399
+ const a = declaredPaths[i];
400
+ const b = declaredPaths[j];
401
+ if (a.namespace === b.namespace) continue;
402
+
403
+ const relationship = pathsOverlap(a.path, b.path);
404
+ if (relationship === 'conflict') {
405
+ violations.push({
406
+ ruleId: 'events-namespace-paths-overlap',
407
+ severity: 'error',
408
+ file: eventsCanvasPath || '.principal-views/cli.events.canvas',
409
+ message: `Paths overlap between namespaces "${a.namespace}" ("${a.path}") and "${b.namespace}" ("${b.path}")`,
410
+ impact: 'A file covered by two namespaces makes namespace ownership ambiguous',
411
+ suggestion: 'Separate the paths so they are disjoint, or restructure as parent/child namespaces (e.g., "workflow" covering "src/workflow" and "workflow.scenarios" covering "src/workflow/scenarios").',
412
+ });
413
+ }
414
+ }
415
+ }
416
+
331
417
  metrics.totalNamespaces = extractedNamespaces.size;
332
418
 
333
419
  const errors = violations.filter(v => v.severity === 'error');
@@ -0,0 +1,97 @@
1
+ import { describe, expect, test } from 'bun:test';
2
+ import { NamespacePathIndex } from './NamespacePathIndex';
3
+
4
+ function makeIndex(entries: Array<{ scope: string; namespace: string; paths: string[] }>) {
5
+ const idx = new NamespacePathIndex();
6
+ idx.addAll(entries);
7
+ return idx;
8
+ }
9
+
10
+ describe('NamespacePathIndex.resolve', () => {
11
+ test('empty index resolves to null', () => {
12
+ const idx = new NamespacePathIndex();
13
+ expect(idx.resolve('scope', 'src/foo.ts')).toBeNull();
14
+ });
15
+
16
+ test('matches file nested under a declared folder path', () => {
17
+ const idx = makeIndex([{ scope: 's', namespace: 'events', paths: ['src/events'] }]);
18
+ const match = idx.resolve('s', 'src/events/foo.ts');
19
+ expect(match?.entry.namespace).toBe('events');
20
+ expect(match?.matchedPath).toBe('src/events');
21
+ });
22
+
23
+ test('returns null when no path covers the file', () => {
24
+ const idx = makeIndex([{ scope: 's', namespace: 'events', paths: ['src/events'] }]);
25
+ expect(idx.resolve('s', 'src/other/foo.ts')).toBeNull();
26
+ });
27
+
28
+ test('scope isolation: match in scope A is not returned when querying scope B', () => {
29
+ const idx = makeIndex([{ scope: 'A', namespace: 'events', paths: ['src/events'] }]);
30
+ expect(idx.resolve('B', 'src/events/foo.ts')).toBeNull();
31
+ });
32
+
33
+ test('longest-prefix wins: nested child namespace beats parent', () => {
34
+ const idx = makeIndex([
35
+ { scope: 's', namespace: 'workflow', paths: ['src/workflow'] },
36
+ { scope: 's', namespace: 'workflow.scenarios', paths: ['src/workflow/scenarios'] },
37
+ ]);
38
+
39
+ // Parent-only subtree → parent wins
40
+ expect(idx.resolve('s', 'src/workflow/orchestrator.ts')?.entry.namespace).toBe('workflow');
41
+ // Child subtree → child wins (longer prefix)
42
+ expect(idx.resolve('s', 'src/workflow/scenarios/matcher.ts')?.entry.namespace).toBe(
43
+ 'workflow.scenarios',
44
+ );
45
+ // Deeper under child → still child (inherited)
46
+ expect(idx.resolve('s', 'src/workflow/scenarios/helpers/fmt.ts')?.entry.namespace).toBe(
47
+ 'workflow.scenarios',
48
+ );
49
+ });
50
+
51
+ test('exact-file path matches when declared as a file', () => {
52
+ const idx = makeIndex([{ scope: 's', namespace: 'retry', paths: ['src/utils/retry.ts'] }]);
53
+ expect(idx.resolve('s', 'src/utils/retry.ts')?.entry.namespace).toBe('retry');
54
+ // Not a folder, so unrelated files don't match
55
+ expect(idx.resolve('s', 'src/utils/other.ts')).toBeNull();
56
+ });
57
+
58
+ test('normalization: trailing slash and ./ prefix are equivalent', () => {
59
+ const idx = makeIndex([{ scope: 's', namespace: 'events', paths: ['src/events/'] }]);
60
+ expect(idx.resolve('s', './src/events/foo.ts')?.entry.namespace).toBe('events');
61
+ });
62
+
63
+ test('similar-prefix paths are not mistaken for nesting', () => {
64
+ const idx = makeIndex([
65
+ { scope: 's', namespace: 'foo', paths: ['src/foo'] },
66
+ { scope: 's', namespace: 'foobar', paths: ['src/foobar'] },
67
+ ]);
68
+ expect(idx.resolve('s', 'src/foobar/x.ts')?.entry.namespace).toBe('foobar');
69
+ expect(idx.resolve('s', 'src/foo/x.ts')?.entry.namespace).toBe('foo');
70
+ });
71
+ });
72
+
73
+ describe('NamespacePathIndex.getEntry', () => {
74
+ test('returns null when (scope, namespace) not registered', () => {
75
+ const idx = makeIndex([{ scope: 's', namespace: 'events', paths: ['src/events'] }]);
76
+ expect(idx.getEntry('s', 'workflow')).toBeNull();
77
+ expect(idx.getEntry('other', 'events')).toBeNull();
78
+ });
79
+
80
+ test('returns the entry when present', () => {
81
+ const idx = makeIndex([{ scope: 's', namespace: 'events', paths: ['src/events'] }]);
82
+ expect(idx.getEntry('s', 'events')?.paths).toEqual(['src/events']);
83
+ });
84
+ });
85
+
86
+ describe('NamespacePathIndex.getScopeEntries / getScopes', () => {
87
+ test('returns only entries for the requested scope', () => {
88
+ const idx = makeIndex([
89
+ { scope: 'A', namespace: 'a1', paths: ['src/a1'] },
90
+ { scope: 'A', namespace: 'a2', paths: ['src/a2'] },
91
+ { scope: 'B', namespace: 'b1', paths: ['src/b1'] },
92
+ ]);
93
+ expect(idx.getScopeEntries('A')).toHaveLength(2);
94
+ expect(idx.getScopeEntries('B')).toHaveLength(1);
95
+ expect(idx.getScopes().sort()).toEqual(['A', 'B']);
96
+ });
97
+ });