@principal-ai/principal-view-core 0.24.73 → 0.24.74

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.
@@ -32,6 +32,18 @@ export interface DiscoveredLibrary {
32
32
  /** Services with their owned scopes */
33
33
  servicesWithScopes: ServiceWithScopes[];
34
34
  }
35
+ /**
36
+ * Types of validation errors
37
+ */
38
+ export type LibraryValidationErrorType = 'parse-error' | 'validation-error' | 'scopes-canvas-required';
39
+ /**
40
+ * Library validation error with type information
41
+ */
42
+ export interface LibraryValidationError {
43
+ path: string;
44
+ error: string;
45
+ type?: LibraryValidationErrorType;
46
+ }
35
47
  /**
36
48
  * Result of library discovery
37
49
  */
@@ -48,10 +60,7 @@ export interface LibraryDiscoveryResult {
48
60
  */
49
61
  scopeToServiceMap: Map<string, string>;
50
62
  /** Errors encountered during discovery */
51
- errors: Array<{
52
- path: string;
53
- error: string;
54
- }>;
63
+ errors: LibraryValidationError[];
55
64
  }
56
65
  /**
57
66
  * Discovery system for finding and loading all library.yaml files in a monorepo
@@ -78,10 +87,12 @@ export declare class LibraryDiscovery {
78
87
  * @param fileTree - FileTree from repository-abstraction
79
88
  * @param options - Discovery options
80
89
  * @param options.fileReader - Optional function to read file contents (for package.json parsing)
90
+ * @param options.requireScopesCanvas - If true, validates that .scopes.canvas exists when owned-scopes is defined (default: true)
81
91
  * @returns Discovery result with libraries, service names, and errors
82
92
  */
83
93
  discover(fileTree: FileTree, options?: {
84
94
  fileReader?: (path: string) => Promise<string>;
95
+ requireScopesCanvas?: boolean;
85
96
  }): Promise<LibraryDiscoveryResult>;
86
97
  /**
87
98
  * Clear package cache (useful when file tree changes)
@@ -91,6 +102,14 @@ export declare class LibraryDiscovery {
91
102
  * Extract service names and owned scopes from a library's resources
92
103
  */
93
104
  private extractServicesInfo;
105
+ /**
106
+ * Validate that a .scopes.canvas file exists when owned-scopes is defined
107
+ */
108
+ private validateScopesCanvasRequirement;
109
+ /**
110
+ * Check if any .scopes.canvas file exists in a directory
111
+ */
112
+ private checkScopesCanvasExists;
94
113
  /**
95
114
  * Discover packages with caching by fileTree SHA
96
115
  */
@@ -1 +1 @@
1
- {"version":3,"file":"LibraryDiscovery.d.ts","sourceRoot":"","sources":["../../src/discovery/LibraryDiscovery.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAGxF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGzD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAC;IAEpB,mDAAmD;IACnD,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IAEb,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAC;IAEpB,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IAEpB,6BAA6B;IAC7B,OAAO,EAAE,gBAAgB,CAAC;IAE1B,kDAAkD;IAClD,YAAY,EAAE,MAAM,EAAE,CAAC;IAEvB,uCAAuC;IACvC,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,+BAA+B;IAC/B,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAE/B,6CAA6C;IAC7C,eAAe,EAAE,MAAM,EAAE,CAAC;IAE1B;;;;;OAKG;IACH,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEvC,0CAA0C;IAC1C,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,gBAAgB;IAOf,OAAO,CAAC,SAAS;IAN7B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAsB;IAExD,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,YAAY,CAA0C;IAC9D,OAAO,CAAC,MAAM,CAAgB;gBAEV,SAAS,EAAE,iBAAiB;IAKhD;;;;;;;OAOG;IACG,QAAQ,CACZ,QAAQ,EAAE,QAAQ,EAClB,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;KAChD,GACA,OAAO,CAAC,sBAAsB,CAAC;IAyHlC;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA8B3B;;OAEG;YACW,yBAAyB;CAexC"}
1
+ {"version":3,"file":"LibraryDiscovery.d.ts","sourceRoot":"","sources":["../../src/discovery/LibraryDiscovery.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAGxF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGzD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAC;IAEpB,mDAAmD;IACnD,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IAEb,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAC;IAEpB,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IAEpB,6BAA6B;IAC7B,OAAO,EAAE,gBAAgB,CAAC;IAE1B,kDAAkD;IAClD,YAAY,EAAE,MAAM,EAAE,CAAC;IAEvB,uCAAuC;IACvC,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAClC,aAAa,GACb,kBAAkB,GAClB,wBAAwB,CAAC;AAE7B;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,0BAA0B,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,+BAA+B;IAC/B,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAE/B,6CAA6C;IAC7C,eAAe,EAAE,MAAM,EAAE,CAAC;IAE1B;;;;;OAKG;IACH,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEvC,0CAA0C;IAC1C,MAAM,EAAE,sBAAsB,EAAE,CAAC;CAClC;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,gBAAgB;IAOf,OAAO,CAAC,SAAS;IAN7B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAsB;IAExD,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,YAAY,CAA0C;IAC9D,OAAO,CAAC,MAAM,CAAgB;gBAEV,SAAS,EAAE,iBAAiB;IAKhD;;;;;;;;OAQG;IACG,QAAQ,CACZ,QAAQ,EAAE,QAAQ,EAClB,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;QAC/C,mBAAmB,CAAC,EAAE,OAAO,CAAC;KAC/B,GACA,OAAO,CAAC,sBAAsB,CAAC;IA+IlC;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA8B3B;;OAEG;YACW,+BAA+B;IAyC7C;;OAEG;YACW,uBAAuB;IAyBrC;;OAEG;YACW,yBAAyB;CAexC"}
@@ -35,10 +35,11 @@ class LibraryDiscovery {
35
35
  * @param fileTree - FileTree from repository-abstraction
36
36
  * @param options - Discovery options
37
37
  * @param options.fileReader - Optional function to read file contents (for package.json parsing)
38
+ * @param options.requireScopesCanvas - If true, validates that .scopes.canvas exists when owned-scopes is defined (default: true)
38
39
  * @returns Discovery result with libraries, service names, and errors
39
40
  */
40
41
  async discover(fileTree, options) {
41
- const { fileReader } = options || {};
42
+ const { fileReader, requireScopesCanvas = true } = options || {};
42
43
  const errors = [];
43
44
  const libraries = [];
44
45
  // 1. Discover packages (with caching by fileTree.sha)
@@ -72,12 +73,17 @@ class LibraryDiscovery {
72
73
  serviceNames,
73
74
  servicesWithScopes,
74
75
  });
76
+ // Validate scopes canvas requirement
77
+ if (requireScopesCanvas) {
78
+ await this.validateScopesCanvasRequirement(absolutePackagePath, servicesWithScopes, loadResult.path, errors);
79
+ }
75
80
  }
76
81
  else if (loadResult.error && !loadResult.error.includes('No library file found')) {
77
82
  // Only report errors that aren't "file not found" (which is normal)
78
83
  errors.push({
79
84
  path: loadResult.path,
80
85
  error: loadResult.error,
86
+ type: 'parse-error',
81
87
  });
82
88
  }
83
89
  }
@@ -107,12 +113,17 @@ class LibraryDiscovery {
107
113
  serviceNames,
108
114
  servicesWithScopes,
109
115
  });
116
+ // Validate scopes canvas requirement for root library
117
+ if (requireScopesCanvas) {
118
+ await this.validateScopesCanvasRequirement(rootPath, servicesWithScopes, loadResult.path, errors);
119
+ }
110
120
  }
111
121
  }
112
122
  else if (loadResult.error) {
113
123
  errors.push({
114
124
  path: loadResult.path,
115
125
  error: loadResult.error,
126
+ type: 'parse-error',
116
127
  });
117
128
  }
118
129
  }
@@ -173,6 +184,67 @@ class LibraryDiscovery {
173
184
  }
174
185
  return { serviceNames, servicesWithScopes };
175
186
  }
187
+ /**
188
+ * Validate that a .scopes.canvas file exists when owned-scopes is defined
189
+ */
190
+ async validateScopesCanvasRequirement(packagePath, servicesWithScopes, libraryPath, errors) {
191
+ // Check if any service has owned-scopes
192
+ const hasOwnedScopes = servicesWithScopes.some(s => s.ownedScopes.length > 0);
193
+ if (!hasOwnedScopes) {
194
+ return; // No owned-scopes defined, no canvas required
195
+ }
196
+ // Collect all owned scopes
197
+ const allOwnedScopes = servicesWithScopes.flatMap(s => s.ownedScopes);
198
+ // Check if a .scopes.canvas file exists
199
+ // Look for any file matching *.scopes.canvas in .principal-views/
200
+ const pvDir = this.fsAdapter.join(packagePath, LibraryDiscovery.CANVAS_DIR);
201
+ const pvDirExists = await this.fsAdapter.exists(pvDir);
202
+ if (!pvDirExists) {
203
+ errors.push({
204
+ path: libraryPath,
205
+ error: `Scopes canvas required: library.yaml defines owned-scopes [${allOwnedScopes.join(', ')}] but no .principal-views/ directory exists. Create a .scopes.canvas file (e.g., architecture.scopes.canvas) documenting scope boundaries.`,
206
+ type: 'scopes-canvas-required',
207
+ });
208
+ return;
209
+ }
210
+ // Check for any .scopes.canvas file in the directory
211
+ const scopesCanvasExists = await this.checkScopesCanvasExists(pvDir);
212
+ if (!scopesCanvasExists) {
213
+ errors.push({
214
+ path: libraryPath,
215
+ error: `Scopes canvas required: library.yaml defines owned-scopes [${allOwnedScopes.join(', ')}] but no .scopes.canvas file found. Create a .scopes.canvas file (e.g., .principal-views/architecture.scopes.canvas) with nodes for each scope (set pv.otel.scope to the scope name).`,
216
+ type: 'scopes-canvas-required',
217
+ });
218
+ }
219
+ }
220
+ /**
221
+ * Check if any .scopes.canvas file exists in a directory
222
+ */
223
+ async checkScopesCanvasExists(dirPath) {
224
+ try {
225
+ const entries = await this.fsAdapter.readDir(dirPath);
226
+ for (const entry of entries) {
227
+ if (entry.endsWith('.scopes.canvas')) {
228
+ return true;
229
+ }
230
+ // Also check subdirectories (for hierarchical structure)
231
+ const fullPath = this.fsAdapter.join(dirPath, entry);
232
+ const isDir = await this.fsAdapter.isDirectory(fullPath);
233
+ if (isDir) {
234
+ const subEntries = await this.fsAdapter.readDir(fullPath);
235
+ for (const subEntry of subEntries) {
236
+ if (subEntry.endsWith('.scopes.canvas')) {
237
+ return true;
238
+ }
239
+ }
240
+ }
241
+ }
242
+ return false;
243
+ }
244
+ catch {
245
+ return false;
246
+ }
247
+ }
176
248
  /**
177
249
  * Discover packages with caching by fileTree SHA
178
250
  */
@@ -1 +1 @@
1
- {"version":3,"file":"LibraryDiscovery.js","sourceRoot":"","sources":["../../src/discovery/LibraryDiscovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LibraryDiscovery.js","sourceRoot":"","sources":["../../src/discovery/LibraryDiscovery.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -59,7 +59,7 @@ export { LibraryConverter } from './utils/LibraryConverter';
59
59
  export type { CreateNodeOptions, CreateEdgeOptions } from './utils/LibraryConverter';
60
60
  export type { ResourceAttributes, ScopeDefinition, OwnedScopes } from './types/library';
61
61
  export { LibraryDiscovery } from './discovery/LibraryDiscovery';
62
- export type { DiscoveredLibrary, LibraryDiscoveryResult, } from './discovery/LibraryDiscovery';
62
+ export type { DiscoveredLibrary, LibraryDiscoveryResult, LibraryValidationError, LibraryValidationErrorType, } from './discovery/LibraryDiscovery';
63
63
  export type { StoryboardReference, WorkflowReference, ScenarioReference, StoryboardContextSliceData, EventNodeMap, BuildStoryboardContextOptions, } from './storyboard/index';
64
64
  export { buildStoryboardContext, buildNodeSourcesMap, buildEventNodeMap, getNodeEventName, resolveScenarioNodeIds, resolveWorkflowNodeIds, findNodesMatchingEventPattern, getAllNodeIds, } from './storyboard/index';
65
65
  export type { FileSystemAdapter } from '@principal-ai/repository-abstraction';
@@ -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":"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"}
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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@principal-ai/principal-view-core",
3
- "version": "0.24.73",
3
+ "version": "0.24.74",
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",
@@ -21,7 +21,7 @@ describe('CanvasDiscovery', () => {
21
21
 
22
22
  expect(result.canvases).toHaveLength(2);
23
23
  expect(result.canvases[0]).toMatchObject({
24
- id: 'api-flow',
24
+ id: 'api-flow.otel', // non-regular types get suffix to prevent ID collisions
25
25
  name: 'Api Flow',
26
26
  basename: 'api-flow',
27
27
  type: 'otel',
@@ -59,7 +59,7 @@ describe('CanvasDiscovery', () => {
59
59
 
60
60
  expect(result.canvases).toHaveLength(2);
61
61
  expect(result.canvases.map(c => c.id)).toEqual([
62
- 'api/request-flow',
62
+ 'api/request-flow.otel', // non-regular types get suffix
63
63
  'core/auth-flow',
64
64
  ]);
65
65
  expect(result.canvases[0].packageName).toBe('api');
@@ -99,7 +99,8 @@ describe('CanvasDiscovery', () => {
99
99
 
100
100
  expect(result.canvases[0].basename).toBe('test');
101
101
  expect(result.canvases[0].type).toBe('otel');
102
- expect(result.canvases[0].id).toBe('test');
102
+ // ID includes type suffix to prevent collisions with regular canvas of same name
103
+ expect(result.canvases[0].id).toBe('test.otel');
103
104
  });
104
105
 
105
106
  test('parses canvas content when fileReader and includeContent provided', async () => {
@@ -145,7 +146,7 @@ describe('CanvasDiscovery', () => {
145
146
 
146
147
  expect(result.canvases).toHaveLength(2);
147
148
  expect(result.canvases[0]).toMatchObject({
148
- id: 'checkout-flow',
149
+ id: 'checkout-flow.otel', // non-regular types get suffix
149
150
  name: 'Checkout Flow',
150
151
  basename: 'checkout-flow',
151
152
  type: 'otel',
@@ -182,7 +183,7 @@ describe('CanvasDiscovery', () => {
182
183
 
183
184
  expect(result.canvases).toHaveLength(2);
184
185
  expect(result.canvases[0]).toMatchObject({
185
- id: 'api/request-flow',
186
+ id: 'api/request-flow.otel', // non-regular types get suffix
186
187
  name: 'Request Flow',
187
188
  basename: 'request-flow',
188
189
  type: 'otel',
@@ -0,0 +1,315 @@
1
+ import { describe, expect, test, beforeEach } from 'bun:test';
2
+ import { LibraryDiscovery } from './LibraryDiscovery';
3
+ import type { FileTree, FileInfo, DirectoryInfo, FileSystemAdapter } from '@principal-ai/repository-abstraction';
4
+
5
+ describe('LibraryDiscovery', () => {
6
+ let discovery: LibraryDiscovery;
7
+ let mockFsAdapter: FileSystemAdapter;
8
+
9
+ beforeEach(() => {
10
+ mockFsAdapter = createMockFsAdapter({});
11
+ discovery = new LibraryDiscovery(mockFsAdapter);
12
+ });
13
+
14
+ describe('scopes canvas validation', () => {
15
+ test('adds error when library has owned-scopes but no .scopes.canvas file', async () => {
16
+ const libraryYaml = `
17
+ version: '1.0'
18
+ name: test-library
19
+ nodeComponents:
20
+ box: { shape: rectangle }
21
+ edgeComponents:
22
+ connection: {}
23
+ resources:
24
+ my-service:
25
+ service.name: my-service
26
+ owned-scopes:
27
+ scope-a:
28
+ color: "#ff0000"
29
+ scope-b:
30
+ color: "#00ff00"
31
+ `;
32
+ mockFsAdapter = createMockFsAdapter({
33
+ '/.principal-views': { isDir: true, contents: ['library.yaml'] },
34
+ '/.principal-views/library.yaml': { content: libraryYaml },
35
+ });
36
+ discovery = new LibraryDiscovery(mockFsAdapter);
37
+
38
+ const fileTree = createMockFileTree([
39
+ '.principal-views/library.yaml',
40
+ ]);
41
+
42
+ const result = await discovery.discover(fileTree);
43
+
44
+ expect(result.errors).toHaveLength(1);
45
+ expect(result.errors[0].type).toBe('scopes-canvas-required');
46
+ expect(result.errors[0].error).toContain('owned-scopes');
47
+ expect(result.errors[0].error).toContain('scope-a');
48
+ expect(result.errors[0].error).toContain('scope-b');
49
+ });
50
+
51
+ test('no error when library has owned-scopes and .scopes.canvas exists', async () => {
52
+ const libraryYaml = `
53
+ version: '1.0'
54
+ name: test-library
55
+ nodeComponents:
56
+ box: { shape: rectangle }
57
+ edgeComponents:
58
+ connection: {}
59
+ resources:
60
+ my-service:
61
+ service.name: my-service
62
+ owned-scopes:
63
+ scope-a:
64
+ color: "#ff0000"
65
+ `;
66
+ mockFsAdapter = createMockFsAdapter({
67
+ '/.principal-views': { isDir: true, contents: ['library.yaml', 'architecture.scopes.canvas'] },
68
+ '/.principal-views/library.yaml': { content: libraryYaml },
69
+ '/.principal-views/architecture.scopes.canvas': { content: '{}' },
70
+ });
71
+ discovery = new LibraryDiscovery(mockFsAdapter);
72
+
73
+ const fileTree = createMockFileTree([
74
+ '.principal-views/library.yaml',
75
+ '.principal-views/architecture.scopes.canvas',
76
+ ]);
77
+
78
+ const result = await discovery.discover(fileTree);
79
+
80
+ // No scopes-canvas-required errors
81
+ const scopesErrors = result.errors.filter(e => e.type === 'scopes-canvas-required');
82
+ expect(scopesErrors).toHaveLength(0);
83
+ });
84
+
85
+ test('no error when library has no owned-scopes', async () => {
86
+ const libraryYaml = `
87
+ version: '1.0'
88
+ name: test-library
89
+ nodeComponents:
90
+ box: { shape: rectangle }
91
+ edgeComponents:
92
+ connection: {}
93
+ resources:
94
+ my-service:
95
+ service.name: my-service
96
+ `;
97
+ mockFsAdapter = createMockFsAdapter({
98
+ '/.principal-views': { isDir: true, contents: ['library.yaml'] },
99
+ '/.principal-views/library.yaml': { content: libraryYaml },
100
+ });
101
+ discovery = new LibraryDiscovery(mockFsAdapter);
102
+
103
+ const fileTree = createMockFileTree([
104
+ '.principal-views/library.yaml',
105
+ ]);
106
+
107
+ const result = await discovery.discover(fileTree);
108
+
109
+ // No errors
110
+ expect(result.errors).toHaveLength(0);
111
+ });
112
+
113
+ test('supports legacy array format for owned-scopes', async () => {
114
+ const libraryYaml = `
115
+ version: '1.0'
116
+ name: test-library
117
+ nodeComponents:
118
+ box: { shape: rectangle }
119
+ edgeComponents:
120
+ connection: {}
121
+ resources:
122
+ my-service:
123
+ service.name: my-service
124
+ owned-scopes:
125
+ - scope-a
126
+ - scope-b
127
+ `;
128
+ mockFsAdapter = createMockFsAdapter({
129
+ '/.principal-views': { isDir: true, contents: ['library.yaml'] },
130
+ '/.principal-views/library.yaml': { content: libraryYaml },
131
+ });
132
+ discovery = new LibraryDiscovery(mockFsAdapter);
133
+
134
+ const fileTree = createMockFileTree([
135
+ '.principal-views/library.yaml',
136
+ ]);
137
+
138
+ const result = await discovery.discover(fileTree);
139
+
140
+ expect(result.errors).toHaveLength(1);
141
+ expect(result.errors[0].type).toBe('scopes-canvas-required');
142
+ expect(result.errors[0].error).toContain('scope-a');
143
+ expect(result.errors[0].error).toContain('scope-b');
144
+ });
145
+
146
+ test('finds .scopes.canvas in subdirectory', async () => {
147
+ const libraryYaml = `
148
+ version: '1.0'
149
+ name: test-library
150
+ nodeComponents:
151
+ box: { shape: rectangle }
152
+ edgeComponents:
153
+ connection: {}
154
+ resources:
155
+ my-service:
156
+ service.name: my-service
157
+ owned-scopes:
158
+ scope-a:
159
+ color: "#ff0000"
160
+ `;
161
+ mockFsAdapter = createMockFsAdapter({
162
+ '/.principal-views': { isDir: true, contents: ['library.yaml', 'architecture'] },
163
+ '/.principal-views/library.yaml': { content: libraryYaml },
164
+ '/.principal-views/architecture': { isDir: true, contents: ['architecture.scopes.canvas'] },
165
+ '/.principal-views/architecture/architecture.scopes.canvas': { content: '{}' },
166
+ });
167
+ discovery = new LibraryDiscovery(mockFsAdapter);
168
+
169
+ const fileTree = createMockFileTree([
170
+ '.principal-views/library.yaml',
171
+ '.principal-views/architecture/architecture.scopes.canvas',
172
+ ]);
173
+
174
+ const result = await discovery.discover(fileTree);
175
+
176
+ // No scopes-canvas-required errors
177
+ const scopesErrors = result.errors.filter(e => e.type === 'scopes-canvas-required');
178
+ expect(scopesErrors).toHaveLength(0);
179
+ });
180
+
181
+ test('validation can be disabled with requireScopesCanvas: false', async () => {
182
+ const libraryYaml = `
183
+ version: '1.0'
184
+ name: test-library
185
+ nodeComponents:
186
+ box: { shape: rectangle }
187
+ edgeComponents:
188
+ connection: {}
189
+ resources:
190
+ my-service:
191
+ service.name: my-service
192
+ owned-scopes:
193
+ scope-a:
194
+ color: "#ff0000"
195
+ `;
196
+ mockFsAdapter = createMockFsAdapter({
197
+ '/.principal-views': { isDir: true, contents: ['library.yaml'] },
198
+ '/.principal-views/library.yaml': { content: libraryYaml },
199
+ });
200
+ discovery = new LibraryDiscovery(mockFsAdapter);
201
+
202
+ const fileTree = createMockFileTree([
203
+ '.principal-views/library.yaml',
204
+ ]);
205
+
206
+ const result = await discovery.discover(fileTree, { requireScopesCanvas: false });
207
+
208
+ // No errors when validation is disabled
209
+ expect(result.errors).toHaveLength(0);
210
+ });
211
+ });
212
+ });
213
+
214
+ /**
215
+ * Helper to create mock FileTree for testing
216
+ */
217
+ function createMockFileTree(paths: string[]): FileTree {
218
+ const allFiles: FileInfo[] = paths.map(path => ({
219
+ path,
220
+ relativePath: path,
221
+ name: path.split('/').pop() || '',
222
+ extension: path.split('.').pop() || '',
223
+ size: 100,
224
+ lastModified: new Date(),
225
+ isDirectory: false,
226
+ }));
227
+
228
+ const root: DirectoryInfo = {
229
+ path: '/',
230
+ name: '',
231
+ relativePath: '',
232
+ children: [],
233
+ fileCount: allFiles.length,
234
+ totalSize: allFiles.length * 100,
235
+ depth: 0,
236
+ };
237
+
238
+ return {
239
+ sha: 'test-sha-' + Math.random(),
240
+ root,
241
+ allFiles,
242
+ allDirectories: [],
243
+ stats: {
244
+ totalFiles: allFiles.length,
245
+ totalDirectories: 0,
246
+ totalSize: allFiles.length * 100,
247
+ maxDepth: 3,
248
+ },
249
+ metadata: {
250
+ id: 'test',
251
+ timestamp: new Date(),
252
+ sourceType: 'test',
253
+ sourceInfo: {},
254
+ },
255
+ };
256
+ }
257
+
258
+ /**
259
+ * Helper to create mock FileSystemAdapter for testing
260
+ */
261
+ function createMockFsAdapter(
262
+ files: Record<string, { content?: string; isDir?: boolean; contents?: string[] }>
263
+ ): FileSystemAdapter {
264
+ return {
265
+ async readFile(path: string): Promise<string> {
266
+ const file = files[path];
267
+ if (file?.content !== undefined) {
268
+ return file.content;
269
+ }
270
+ throw new Error(`ENOENT: no such file or directory, open '${path}'`);
271
+ },
272
+ async exists(path: string): Promise<boolean> {
273
+ return path in files;
274
+ },
275
+ async isDirectory(path: string): Promise<boolean> {
276
+ return files[path]?.isDir === true;
277
+ },
278
+ async readDir(path: string): Promise<string[]> {
279
+ const file = files[path];
280
+ if (file?.isDir && file.contents) {
281
+ return file.contents;
282
+ }
283
+ return [];
284
+ },
285
+ join(...parts: string[]): string {
286
+ return parts.join('/').replace(/\/+/g, '/');
287
+ },
288
+ dirname(path: string): string {
289
+ return path.split('/').slice(0, -1).join('/');
290
+ },
291
+ basename(path: string): string {
292
+ return path.split('/').pop() || '';
293
+ },
294
+ async writeFile(): Promise<void> {},
295
+ async mkdir(): Promise<void> {},
296
+ async rm(): Promise<void> {},
297
+ async stat(): Promise<{ isDirectory: boolean; size: number; mtime: Date }> {
298
+ return { isDirectory: false, size: 0, mtime: new Date() };
299
+ },
300
+ async copyFile(): Promise<void> {},
301
+ async rename(): Promise<void> {},
302
+ async getAbsolutePath(path: string): Promise<string> {
303
+ return path;
304
+ },
305
+ isAbsolute(path: string): boolean {
306
+ return path.startsWith('/');
307
+ },
308
+ resolve(...paths: string[]): string {
309
+ return paths.join('/').replace(/\/+/g, '/');
310
+ },
311
+ relative(from: string, to: string): string {
312
+ return to.replace(from, '').replace(/^\//, '');
313
+ },
314
+ };
315
+ }
@@ -45,6 +45,23 @@ export interface DiscoveredLibrary {
45
45
  servicesWithScopes: ServiceWithScopes[];
46
46
  }
47
47
 
48
+ /**
49
+ * Types of validation errors
50
+ */
51
+ export type LibraryValidationErrorType =
52
+ | 'parse-error'
53
+ | 'validation-error'
54
+ | 'scopes-canvas-required';
55
+
56
+ /**
57
+ * Library validation error with type information
58
+ */
59
+ export interface LibraryValidationError {
60
+ path: string;
61
+ error: string;
62
+ type?: LibraryValidationErrorType;
63
+ }
64
+
48
65
  /**
49
66
  * Result of library discovery
50
67
  */
@@ -64,7 +81,7 @@ export interface LibraryDiscoveryResult {
64
81
  scopeToServiceMap: Map<string, string>;
65
82
 
66
83
  /** Errors encountered during discovery */
67
- errors: Array<{ path: string; error: string }>;
84
+ errors: LibraryValidationError[];
68
85
  }
69
86
 
70
87
  /**
@@ -97,16 +114,18 @@ export class LibraryDiscovery {
97
114
  * @param fileTree - FileTree from repository-abstraction
98
115
  * @param options - Discovery options
99
116
  * @param options.fileReader - Optional function to read file contents (for package.json parsing)
117
+ * @param options.requireScopesCanvas - If true, validates that .scopes.canvas exists when owned-scopes is defined (default: true)
100
118
  * @returns Discovery result with libraries, service names, and errors
101
119
  */
102
120
  async discover(
103
121
  fileTree: FileTree,
104
122
  options?: {
105
123
  fileReader?: (path: string) => Promise<string>;
124
+ requireScopesCanvas?: boolean;
106
125
  }
107
126
  ): Promise<LibraryDiscoveryResult> {
108
- const { fileReader } = options || {};
109
- const errors: Array<{ path: string; error: string }> = [];
127
+ const { fileReader, requireScopesCanvas = true } = options || {};
128
+ const errors: LibraryValidationError[] = [];
110
129
  const libraries: DiscoveredLibrary[] = [];
111
130
 
112
131
  // 1. Discover packages (with caching by fileTree.sha)
@@ -147,11 +166,22 @@ export class LibraryDiscovery {
147
166
  serviceNames,
148
167
  servicesWithScopes,
149
168
  });
169
+
170
+ // Validate scopes canvas requirement
171
+ if (requireScopesCanvas) {
172
+ await this.validateScopesCanvasRequirement(
173
+ absolutePackagePath,
174
+ servicesWithScopes,
175
+ loadResult.path,
176
+ errors
177
+ );
178
+ }
150
179
  } else if (loadResult.error && !loadResult.error.includes('No library file found')) {
151
180
  // Only report errors that aren't "file not found" (which is normal)
152
181
  errors.push({
153
182
  path: loadResult.path,
154
183
  error: loadResult.error,
184
+ type: 'parse-error',
155
185
  });
156
186
  }
157
187
  } catch (error) {
@@ -185,11 +215,22 @@ export class LibraryDiscovery {
185
215
  serviceNames,
186
216
  servicesWithScopes,
187
217
  });
218
+
219
+ // Validate scopes canvas requirement for root library
220
+ if (requireScopesCanvas) {
221
+ await this.validateScopesCanvasRequirement(
222
+ rootPath,
223
+ servicesWithScopes,
224
+ loadResult.path,
225
+ errors
226
+ );
227
+ }
188
228
  }
189
229
  } else if (loadResult.error) {
190
230
  errors.push({
191
231
  path: loadResult.path,
192
232
  error: loadResult.error,
233
+ type: 'parse-error',
193
234
  });
194
235
  }
195
236
  }
@@ -265,6 +306,78 @@ export class LibraryDiscovery {
265
306
  return { serviceNames, servicesWithScopes };
266
307
  }
267
308
 
309
+ /**
310
+ * Validate that a .scopes.canvas file exists when owned-scopes is defined
311
+ */
312
+ private async validateScopesCanvasRequirement(
313
+ packagePath: string,
314
+ servicesWithScopes: ServiceWithScopes[],
315
+ libraryPath: string,
316
+ errors: LibraryValidationError[]
317
+ ): Promise<void> {
318
+ // Check if any service has owned-scopes
319
+ const hasOwnedScopes = servicesWithScopes.some(s => s.ownedScopes.length > 0);
320
+ if (!hasOwnedScopes) {
321
+ return; // No owned-scopes defined, no canvas required
322
+ }
323
+
324
+ // Collect all owned scopes
325
+ const allOwnedScopes = servicesWithScopes.flatMap(s => s.ownedScopes);
326
+
327
+ // Check if a .scopes.canvas file exists
328
+ // Look for any file matching *.scopes.canvas in .principal-views/
329
+ const pvDir = this.fsAdapter.join(packagePath, LibraryDiscovery.CANVAS_DIR);
330
+ const pvDirExists = await this.fsAdapter.exists(pvDir);
331
+
332
+ if (!pvDirExists) {
333
+ errors.push({
334
+ path: libraryPath,
335
+ error: `Scopes canvas required: library.yaml defines owned-scopes [${allOwnedScopes.join(', ')}] but no .principal-views/ directory exists. Create a .scopes.canvas file (e.g., architecture.scopes.canvas) documenting scope boundaries.`,
336
+ type: 'scopes-canvas-required',
337
+ });
338
+ return;
339
+ }
340
+
341
+ // Check for any .scopes.canvas file in the directory
342
+ const scopesCanvasExists = await this.checkScopesCanvasExists(pvDir);
343
+
344
+ if (!scopesCanvasExists) {
345
+ errors.push({
346
+ path: libraryPath,
347
+ error: `Scopes canvas required: library.yaml defines owned-scopes [${allOwnedScopes.join(', ')}] but no .scopes.canvas file found. Create a .scopes.canvas file (e.g., .principal-views/architecture.scopes.canvas) with nodes for each scope (set pv.otel.scope to the scope name).`,
348
+ type: 'scopes-canvas-required',
349
+ });
350
+ }
351
+ }
352
+
353
+ /**
354
+ * Check if any .scopes.canvas file exists in a directory
355
+ */
356
+ private async checkScopesCanvasExists(dirPath: string): Promise<boolean> {
357
+ try {
358
+ const entries = await this.fsAdapter.readDir(dirPath);
359
+ for (const entry of entries) {
360
+ if (entry.endsWith('.scopes.canvas')) {
361
+ return true;
362
+ }
363
+ // Also check subdirectories (for hierarchical structure)
364
+ const fullPath = this.fsAdapter.join(dirPath, entry);
365
+ const isDir = await this.fsAdapter.isDirectory(fullPath);
366
+ if (isDir) {
367
+ const subEntries = await this.fsAdapter.readDir(fullPath);
368
+ for (const subEntry of subEntries) {
369
+ if (subEntry.endsWith('.scopes.canvas')) {
370
+ return true;
371
+ }
372
+ }
373
+ }
374
+ }
375
+ return false;
376
+ } catch {
377
+ return false;
378
+ }
379
+ }
380
+
268
381
  /**
269
382
  * Discover packages with caching by fileTree SHA
270
383
  */
package/src/index.ts CHANGED
@@ -363,6 +363,8 @@ export { LibraryDiscovery } from './discovery/LibraryDiscovery';
363
363
  export type {
364
364
  DiscoveredLibrary,
365
365
  LibraryDiscoveryResult,
366
+ LibraryValidationError,
367
+ LibraryValidationErrorType,
366
368
  } from './discovery/LibraryDiscovery';
367
369
 
368
370
  // Export storyboard context types and builder (browser-safe)