@orkestrel/scaffold 0.0.73 → 0.0.75
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/main.js +75 -34
- package/dist/bin/main.js.map +1 -1
- package/dist/host/agents/skills/orkestrel-prove-journey/SKILL.md +212 -29
- package/dist/host/agents/skills/orkestrel-prove-journey/references/captures.md +40 -15
- package/dist/host/agents/skills/orkestrel-prove-journey/references/decide.md +34 -15
- package/dist/host/agents/skills/orkestrel-prove-journey/references/layer.md +248 -52
- package/dist/host/agents/skills/orkestrel-prove-journey/references/statechart.md +255 -49
- package/dist/host/agents/skills/orkestrel-prove-journey/references/styles.md +111 -23
- package/dist/host/agents/transports/codex.md +7 -0
- package/dist/host/claude/agents/orkestrel.md +2 -2
- package/dist/host/claude/rules/documentation.md +2 -0
- package/dist/host/claude/rules/tests.md +5 -3
- package/dist/host/claude/rules/workspace.md +26 -15
- package/dist/host/codex/config.toml +4 -7
- package/dist/host/guides/README.md +5 -0
- package/dist/host/guides/scaffold.md +104 -14
- package/dist/host/guides/test.md +744 -184
- package/dist/host/manifest.json +19 -19
- package/dist/host/tests/config.test.ts +159 -64
- package/dist/host/tests/policy.test.ts +11 -1
- package/dist/host/tests/setupPolicy.ts +571 -7
- package/dist/src/core/index.cjs +112 -18
- package/dist/src/core/index.cjs.map +1 -1
- package/dist/src/core/index.d.cts +19 -6
- package/dist/src/core/index.d.ts +19 -6
- package/dist/src/core/index.js +112 -19
- package/dist/src/core/index.js.map +1 -1
- package/dist/src/server/index.cjs +6 -4
- package/dist/src/server/index.cjs.map +1 -1
- package/dist/src/server/index.d.cts +9 -7
- package/dist/src/server/index.d.ts +9 -7
- package/dist/src/server/index.js +6 -4
- package/dist/src/server/index.js.map +1 -1
- package/package.json +2 -2
package/dist/host/manifest.json
CHANGED
|
@@ -232,7 +232,7 @@
|
|
|
232
232
|
"storage": "agents/skills/orkestrel-prove-journey/SKILL.md",
|
|
233
233
|
"destination": ".agents/skills/orkestrel-prove-journey/SKILL.md",
|
|
234
234
|
"executable": false,
|
|
235
|
-
"digest": "
|
|
235
|
+
"digest": "c558fb0abcbad2b264c509fc6f82edba4fd9a1cede95a6185eec89056df4361e"
|
|
236
236
|
},
|
|
237
237
|
{
|
|
238
238
|
"storage": "agents/skills/orkestrel-prove-journey/agents/openai.yaml",
|
|
@@ -244,31 +244,31 @@
|
|
|
244
244
|
"storage": "agents/skills/orkestrel-prove-journey/references/captures.md",
|
|
245
245
|
"destination": ".agents/skills/orkestrel-prove-journey/references/captures.md",
|
|
246
246
|
"executable": false,
|
|
247
|
-
"digest": "
|
|
247
|
+
"digest": "e36b56406d3e8643f253196d915ea1f265aae3169e810769171f75a8ab4461f5"
|
|
248
248
|
},
|
|
249
249
|
{
|
|
250
250
|
"storage": "agents/skills/orkestrel-prove-journey/references/decide.md",
|
|
251
251
|
"destination": ".agents/skills/orkestrel-prove-journey/references/decide.md",
|
|
252
252
|
"executable": false,
|
|
253
|
-
"digest": "
|
|
253
|
+
"digest": "1c51fb369f7771bb54ac035e006954a1a2f0c5b326acf15cd4012f422253b159"
|
|
254
254
|
},
|
|
255
255
|
{
|
|
256
256
|
"storage": "agents/skills/orkestrel-prove-journey/references/layer.md",
|
|
257
257
|
"destination": ".agents/skills/orkestrel-prove-journey/references/layer.md",
|
|
258
258
|
"executable": false,
|
|
259
|
-
"digest": "
|
|
259
|
+
"digest": "f61233023976dab31c20c47be18914efaba9d4c55434192ae2a67aa93531b216"
|
|
260
260
|
},
|
|
261
261
|
{
|
|
262
262
|
"storage": "agents/skills/orkestrel-prove-journey/references/statechart.md",
|
|
263
263
|
"destination": ".agents/skills/orkestrel-prove-journey/references/statechart.md",
|
|
264
264
|
"executable": false,
|
|
265
|
-
"digest": "
|
|
265
|
+
"digest": "c9f378b6c0829dafc93c7be2a9285782693727b290e5687fa03489f07eae9aa4"
|
|
266
266
|
},
|
|
267
267
|
{
|
|
268
268
|
"storage": "agents/skills/orkestrel-prove-journey/references/styles.md",
|
|
269
269
|
"destination": ".agents/skills/orkestrel-prove-journey/references/styles.md",
|
|
270
270
|
"executable": false,
|
|
271
|
-
"digest": "
|
|
271
|
+
"digest": "5ec918f4739586c959015fe22e25b3b5f931d8c188c1429b03dae40cb3b02c95"
|
|
272
272
|
},
|
|
273
273
|
{
|
|
274
274
|
"storage": "agents/skills/orkestrel-publish/SKILL.md",
|
|
@@ -310,7 +310,7 @@
|
|
|
310
310
|
"storage": "agents/transports/codex.md",
|
|
311
311
|
"destination": ".agents/transports/codex.md",
|
|
312
312
|
"executable": false,
|
|
313
|
-
"digest": "
|
|
313
|
+
"digest": "830a8f702996c0e8f8f332dbd2555699488d09473b56062985fe4e5d88a501e6"
|
|
314
314
|
},
|
|
315
315
|
{
|
|
316
316
|
"storage": "agents/transports/cursor.md",
|
|
@@ -364,7 +364,7 @@
|
|
|
364
364
|
"storage": "claude/agents/orkestrel.md",
|
|
365
365
|
"destination": ".claude/agents/orkestrel.md",
|
|
366
366
|
"executable": false,
|
|
367
|
-
"digest": "
|
|
367
|
+
"digest": "b226c5f60963fdaafc596537f54aa191ee1512a9940f3a7ff68ff32b91643e39"
|
|
368
368
|
},
|
|
369
369
|
{
|
|
370
370
|
"storage": "claude/agents/planner.md",
|
|
@@ -424,7 +424,7 @@
|
|
|
424
424
|
"storage": "claude/rules/documentation.md",
|
|
425
425
|
"destination": ".claude/rules/documentation.md",
|
|
426
426
|
"executable": false,
|
|
427
|
-
"digest": "
|
|
427
|
+
"digest": "e31e1049bf54e890e0390eec4ad3642bbb3cc353cffff87c6710fde018fb6d7d"
|
|
428
428
|
},
|
|
429
429
|
{
|
|
430
430
|
"storage": "claude/rules/names.md",
|
|
@@ -460,7 +460,7 @@
|
|
|
460
460
|
"storage": "claude/rules/tests.md",
|
|
461
461
|
"destination": ".claude/rules/tests.md",
|
|
462
462
|
"executable": false,
|
|
463
|
-
"digest": "
|
|
463
|
+
"digest": "d4e710cf59c3aedfcfe9ebaef9082ccf68b0146031033b759a49f86544bd401a"
|
|
464
464
|
},
|
|
465
465
|
{
|
|
466
466
|
"storage": "claude/rules/typescript.md",
|
|
@@ -472,7 +472,7 @@
|
|
|
472
472
|
"storage": "claude/rules/workspace.md",
|
|
473
473
|
"destination": ".claude/rules/workspace.md",
|
|
474
474
|
"executable": false,
|
|
475
|
-
"digest": "
|
|
475
|
+
"digest": "71550c25073c913d40d1307b2da3f853abbe16c96b547166f3f4520c18c0772c"
|
|
476
476
|
},
|
|
477
477
|
{
|
|
478
478
|
"storage": "claude/rules/writing.md",
|
|
@@ -628,7 +628,7 @@
|
|
|
628
628
|
"storage": "codex/config.toml",
|
|
629
629
|
"destination": ".codex/config.toml",
|
|
630
630
|
"executable": false,
|
|
631
|
-
"digest": "
|
|
631
|
+
"digest": "c8364a20fca401e65f3c092968b1f6b4d4e025a1efd91e22beb01b3fcd39e076"
|
|
632
632
|
},
|
|
633
633
|
{
|
|
634
634
|
"storage": "configs/helpers.ts",
|
|
@@ -706,7 +706,7 @@
|
|
|
706
706
|
"storage": "guides/README.md",
|
|
707
707
|
"destination": "guides/README.md",
|
|
708
708
|
"executable": false,
|
|
709
|
-
"digest": "
|
|
709
|
+
"digest": "864d4d728a9597f90b347d9e5b04a501be3d7fdaab137455d3e41f59fb49ad92"
|
|
710
710
|
},
|
|
711
711
|
{
|
|
712
712
|
"storage": "guides/abort.md",
|
|
@@ -910,7 +910,7 @@
|
|
|
910
910
|
"storage": "guides/scaffold.md",
|
|
911
911
|
"destination": "guides/scaffold.md",
|
|
912
912
|
"executable": false,
|
|
913
|
-
"digest": "
|
|
913
|
+
"digest": "7c89a20cba178e493d6cb46e517742cf31d12836eb24481a0eb7c96a2f20acad"
|
|
914
914
|
},
|
|
915
915
|
{
|
|
916
916
|
"storage": "guides/sea.md",
|
|
@@ -964,7 +964,7 @@
|
|
|
964
964
|
"storage": "guides/test.md",
|
|
965
965
|
"destination": "guides/test.md",
|
|
966
966
|
"executable": false,
|
|
967
|
-
"digest": "
|
|
967
|
+
"digest": "7b12682ed593698334073ed6df85ece53d946b08d4ed56d303f2c068b3f45242"
|
|
968
968
|
},
|
|
969
969
|
{
|
|
970
970
|
"storage": "guides/timeout.md",
|
|
@@ -1036,19 +1036,19 @@
|
|
|
1036
1036
|
"storage": "tests/config.test.ts",
|
|
1037
1037
|
"destination": "tests/config.test.ts",
|
|
1038
1038
|
"executable": false,
|
|
1039
|
-
"digest": "
|
|
1039
|
+
"digest": "904357442e9d2d0b46a792ef083feba2e7eddb05eea3f4e3f3536f5f2dcd4453"
|
|
1040
1040
|
},
|
|
1041
1041
|
{
|
|
1042
1042
|
"storage": "tests/policy.test.ts",
|
|
1043
1043
|
"destination": "tests/policy.test.ts",
|
|
1044
1044
|
"executable": false,
|
|
1045
|
-
"digest": "
|
|
1045
|
+
"digest": "fc476189a741d002cd3901a80557b3ea03339ec41ef883049e6b7c88179866d3"
|
|
1046
1046
|
},
|
|
1047
1047
|
{
|
|
1048
1048
|
"storage": "tests/setupPolicy.ts",
|
|
1049
1049
|
"destination": "tests/setupPolicy.ts",
|
|
1050
1050
|
"executable": false,
|
|
1051
|
-
"digest": "
|
|
1051
|
+
"digest": "9065dde1bc5ef6541a36dfb9b478d990102f804af9e5c78e0ed6b44521678974"
|
|
1052
1052
|
}
|
|
1053
1053
|
],
|
|
1054
1054
|
"roots": [
|
|
@@ -2001,5 +2001,5 @@
|
|
|
2001
2001
|
]
|
|
2002
2002
|
}
|
|
2003
2003
|
],
|
|
2004
|
-
"digest": "
|
|
2004
|
+
"digest": "6e8e2b0524717bfc2b648acba0de5901c7c267a9c189155b45e3cb681b14bf6d"
|
|
2005
2005
|
}
|
|
@@ -446,6 +446,9 @@ describe('root configuration', () => {
|
|
|
446
446
|
if (existsSync(resolve(root, 'configs/app/vite.showcase.config.ts'))) {
|
|
447
447
|
required.push('configs/app/vite.showcase.config.ts')
|
|
448
448
|
}
|
|
449
|
+
if (existsSync(resolve(root, 'configs/app/vite.journey.config.ts'))) {
|
|
450
|
+
required.push('configs/app/vite.journey.config.ts')
|
|
451
|
+
}
|
|
449
452
|
if (required[0] === undefined) {
|
|
450
453
|
throw new Error('The workspace selects no configuration target')
|
|
451
454
|
}
|
|
@@ -460,80 +463,172 @@ describe('root configuration', () => {
|
|
|
460
463
|
).map((path) => path.replaceAll('\\', '/'))
|
|
461
464
|
const extra = 'configs/app/vite.core.config.ts'
|
|
462
465
|
const controlled = found.concat(extra)
|
|
466
|
+
const planted = createPolicyScratch({ prefix: 'config-journey-' })
|
|
467
|
+
const journey = 'configs/app/vite.journey.config.ts'
|
|
468
|
+
planted.write(
|
|
469
|
+
journey,
|
|
470
|
+
`export default {
|
|
471
|
+
test: { projects: [() => ({
|
|
472
|
+
test: {
|
|
473
|
+
name: { label: 'journey:desktop' },
|
|
474
|
+
include: ['tests/app/browser/integration.test.ts'],
|
|
475
|
+
exclude: [],
|
|
476
|
+
setupFiles: ['./tests/setup.ts', './tests/setupBrowser.ts'],
|
|
477
|
+
provide: { variant: 'desktop', variants: [{ name: 'desktop', width: 1280, height: 800 }], capture: false },
|
|
478
|
+
browser: { enabled: true, instances: [{ browser: 'chromium', headless: true }] },
|
|
479
|
+
},
|
|
480
|
+
})] },
|
|
481
|
+
}\n`,
|
|
482
|
+
)
|
|
483
|
+
const journeys: object[][] = []
|
|
484
|
+
const targets = required.map((wrapper) => ({ wrapper, directory: root }))
|
|
485
|
+
targets.push({ wrapper: journey, directory: planted.path })
|
|
486
|
+
controlled.push(journey)
|
|
463
487
|
|
|
464
488
|
// Required wrappers come from selected src/app targets. Only that set is loaded and validated.
|
|
465
489
|
// Extra wrappers remain in the found population but are ignored before their content is read.
|
|
466
490
|
expect(controlled).toContain(extra)
|
|
467
491
|
expect(required).not.toContain(extra)
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
492
|
+
try {
|
|
493
|
+
for (const { wrapper, directory } of targets) {
|
|
494
|
+
expect(controlled).toContain(wrapper)
|
|
495
|
+
const viteMatch =
|
|
496
|
+
/^configs\/(src|app)\/vite\.(core|browser|server|bin|showcase|journey)\.config\.ts$/u.exec(
|
|
497
|
+
wrapper,
|
|
498
|
+
)
|
|
499
|
+
if (viteMatch !== null) {
|
|
500
|
+
const [, axis, environment] = viteMatch
|
|
501
|
+
if (axis === undefined || environment === undefined) {
|
|
502
|
+
throw new Error(`${wrapper} carries no target`)
|
|
503
|
+
}
|
|
504
|
+
const loaded = await loadConfigFromFile(
|
|
505
|
+
{ command: 'build', mode: 'test', isSsrBuild: false, isPreview: false },
|
|
506
|
+
resolve(directory, wrapper),
|
|
507
|
+
directory,
|
|
508
|
+
'silent',
|
|
509
|
+
)
|
|
510
|
+
if (loaded === null) throw new Error(`${wrapper} did not load`)
|
|
511
|
+
if (environment === 'journey') {
|
|
512
|
+
const projects = loaded.config.test?.projects
|
|
513
|
+
if (!Array.isArray(projects) || projects.length === 0) {
|
|
514
|
+
throw new Error(`${wrapper} carries no journey projects`)
|
|
515
|
+
}
|
|
516
|
+
const tests: object[] = []
|
|
517
|
+
for (const factory of projects) {
|
|
518
|
+
if (typeof factory !== 'function')
|
|
519
|
+
throw new Error(`${wrapper} carries no project factory`)
|
|
520
|
+
const project: unknown = await Reflect.apply(factory, undefined, [
|
|
521
|
+
{ command: 'serve', mode: 'test' },
|
|
522
|
+
])
|
|
523
|
+
if (typeof project !== 'object' || project === null)
|
|
524
|
+
throw new Error('A journey project is not a configuration')
|
|
525
|
+
const test: unknown = Object.getOwnPropertyDescriptor(project, 'test')?.value
|
|
526
|
+
if (typeof test !== 'object' || test === null)
|
|
527
|
+
throw new Error('A journey project carries no test block')
|
|
528
|
+
tests.push(test)
|
|
529
|
+
}
|
|
530
|
+
journeys.push(tests)
|
|
531
|
+
continue
|
|
532
|
+
}
|
|
533
|
+
const output = loaded.config.build?.outDir
|
|
534
|
+
if (output === undefined) throw new Error(`${wrapper} carries no output`)
|
|
535
|
+
const expected =
|
|
536
|
+
environment === 'bin'
|
|
537
|
+
? 'dist/bin'
|
|
538
|
+
: environment === 'showcase'
|
|
539
|
+
? 'dist/showcase'
|
|
540
|
+
: `dist/${axis}/${environment}`
|
|
541
|
+
if (resolve(root, output) !== resolve(root, expected)) {
|
|
542
|
+
throw new Error(`${wrapper} resolves to the wrong output`)
|
|
543
|
+
}
|
|
544
|
+
continue
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
const tsconfigMatch =
|
|
548
|
+
/^configs\/(src|app)\/tsconfig\.(core|browser|server|bin)\.json$/u.exec(wrapper)
|
|
549
|
+
if (tsconfigMatch === null) {
|
|
550
|
+
throw new Error(`${wrapper} is not a required target wrapper`)
|
|
551
|
+
}
|
|
552
|
+
const [, axis, environment] = tsconfigMatch
|
|
474
553
|
if (axis === undefined || environment === undefined) {
|
|
475
|
-
throw new Error(`${wrapper} carries no
|
|
554
|
+
throw new Error(`${wrapper} carries no TypeScript scope`)
|
|
476
555
|
}
|
|
477
|
-
const
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
root,
|
|
481
|
-
'silent',
|
|
482
|
-
)
|
|
483
|
-
if (loaded === null) throw new Error(`${wrapper} did not load`)
|
|
484
|
-
const output = loaded.config.build?.outDir
|
|
485
|
-
if (output === undefined) throw new Error(`${wrapper} carries no output`)
|
|
486
|
-
const expected =
|
|
487
|
-
environment === 'bin'
|
|
488
|
-
? 'dist/bin'
|
|
489
|
-
: environment === 'showcase'
|
|
490
|
-
? 'dist/showcase'
|
|
491
|
-
: `dist/${axis}/${environment}`
|
|
492
|
-
if (resolve(root, output) !== resolve(root, expected)) {
|
|
493
|
-
throw new Error(`${wrapper} resolves to the wrong output`)
|
|
556
|
+
const parsed: unknown = JSON.parse(readFileSync(resolve(root, wrapper), 'utf8'))
|
|
557
|
+
if (typeof parsed !== 'object' || parsed === null) {
|
|
558
|
+
throw new Error(`${wrapper} is not a TypeScript configuration record`)
|
|
494
559
|
}
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
560
|
+
const compilerOptions: unknown = Object.getOwnPropertyDescriptor(
|
|
561
|
+
parsed,
|
|
562
|
+
'compilerOptions',
|
|
563
|
+
)?.value
|
|
564
|
+
if (typeof compilerOptions !== 'object' || compilerOptions === null) {
|
|
565
|
+
throw new Error(`${wrapper} carries no compiler options`)
|
|
566
|
+
}
|
|
567
|
+
const lib: unknown = Object.getOwnPropertyDescriptor(compilerOptions, 'lib')?.value
|
|
568
|
+
const types: unknown = Object.getOwnPropertyDescriptor(compilerOptions, 'types')?.value
|
|
569
|
+
const expectedLib =
|
|
570
|
+
environment === 'core'
|
|
571
|
+
? ['ESNext', 'WebWorker']
|
|
572
|
+
: environment === 'browser'
|
|
573
|
+
? ['ESNext', 'DOM', 'DOM.Iterable']
|
|
574
|
+
: ['ESNext']
|
|
575
|
+
const expectedTypes =
|
|
576
|
+
environment === 'core'
|
|
577
|
+
? []
|
|
578
|
+
: environment === 'browser'
|
|
579
|
+
? axis === 'app'
|
|
580
|
+
? ['vite/client', 'vue']
|
|
581
|
+
: ['vite/client']
|
|
582
|
+
: ['node']
|
|
583
|
+
expect(lib).toStrictEqual(expectedLib)
|
|
584
|
+
expect(types).toStrictEqual(expectedTypes)
|
|
511
585
|
}
|
|
512
|
-
const
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
586
|
+
for (const tests of journeys) {
|
|
587
|
+
const names: string[] = []
|
|
588
|
+
for (const test of tests) {
|
|
589
|
+
expect(Object.getOwnPropertyDescriptor(test, 'include')?.value).toStrictEqual([
|
|
590
|
+
'tests/app/browser/integration.test.ts',
|
|
591
|
+
])
|
|
592
|
+
expect(Object.getOwnPropertyDescriptor(test, 'exclude')?.value).toStrictEqual([])
|
|
593
|
+
expect(Object.getOwnPropertyDescriptor(test, 'setupFiles')?.value).toStrictEqual([
|
|
594
|
+
'./tests/setup.ts',
|
|
595
|
+
'./tests/setupBrowser.ts',
|
|
596
|
+
])
|
|
597
|
+
const name: unknown = Object.getOwnPropertyDescriptor(test, 'name')?.value
|
|
598
|
+
const provide: unknown = Object.getOwnPropertyDescriptor(test, 'provide')?.value
|
|
599
|
+
const browser: unknown = Object.getOwnPropertyDescriptor(test, 'browser')?.value
|
|
600
|
+
if (
|
|
601
|
+
typeof name !== 'object' ||
|
|
602
|
+
name === null ||
|
|
603
|
+
typeof provide !== 'object' ||
|
|
604
|
+
provide === null ||
|
|
605
|
+
typeof browser !== 'object' ||
|
|
606
|
+
browser === null
|
|
607
|
+
)
|
|
608
|
+
throw new Error('A journey project carries no name, provide, or browser block')
|
|
609
|
+
const variant: unknown = Object.getOwnPropertyDescriptor(provide, 'variant')?.value
|
|
610
|
+
if (typeof variant !== 'string' || variant.length === 0)
|
|
611
|
+
throw new Error('A journey project carries no variant name')
|
|
612
|
+
expect(Object.getOwnPropertyDescriptor(name, 'label')?.value).toBe(`journey:${variant}`)
|
|
613
|
+
expect(typeof Object.getOwnPropertyDescriptor(provide, 'capture')?.value).toBe('boolean')
|
|
614
|
+
expect(Object.getOwnPropertyDescriptor(browser, 'enabled')?.value).toBe(true)
|
|
615
|
+
const variants: unknown = Object.getOwnPropertyDescriptor(provide, 'variants')?.value
|
|
616
|
+
if (
|
|
617
|
+
!Array.isArray(variants) ||
|
|
618
|
+
!variants.some(
|
|
619
|
+
(candidate: unknown) =>
|
|
620
|
+
typeof candidate === 'object' &&
|
|
621
|
+
candidate !== null &&
|
|
622
|
+
Object.getOwnPropertyDescriptor(candidate, 'name')?.value === variant,
|
|
623
|
+
)
|
|
624
|
+
)
|
|
625
|
+
throw new Error('A journey variant is absent from its declared set')
|
|
626
|
+
expect(names).not.toContain(variant)
|
|
627
|
+
names.push(variant)
|
|
628
|
+
}
|
|
518
629
|
}
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
const expectedLib =
|
|
522
|
-
environment === 'core'
|
|
523
|
-
? ['ESNext', 'WebWorker']
|
|
524
|
-
: environment === 'browser'
|
|
525
|
-
? ['ESNext', 'DOM', 'DOM.Iterable']
|
|
526
|
-
: ['ESNext']
|
|
527
|
-
const expectedTypes =
|
|
528
|
-
environment === 'core'
|
|
529
|
-
? []
|
|
530
|
-
: environment === 'browser'
|
|
531
|
-
? axis === 'app'
|
|
532
|
-
? ['vite/client', 'vue']
|
|
533
|
-
: ['vite/client']
|
|
534
|
-
: ['node']
|
|
535
|
-
expect(lib).toStrictEqual(expectedLib)
|
|
536
|
-
expect(types).toStrictEqual(expectedTypes)
|
|
630
|
+
} finally {
|
|
631
|
+
planted.destroy()
|
|
537
632
|
}
|
|
538
633
|
|
|
539
634
|
const controlRequired = [
|
|
@@ -524,7 +524,17 @@ describe('skill family policy', () => {
|
|
|
524
524
|
expect(frontmatter?.description).toBe('Use this skill when a continuation contains: a colon.')
|
|
525
525
|
})
|
|
526
526
|
|
|
527
|
-
for (const control of SKILL_POLICY_CONTROLS
|
|
527
|
+
for (const control of SKILL_POLICY_CONTROLS.filter(
|
|
528
|
+
(candidate) => candidate.violations !== undefined,
|
|
529
|
+
)) {
|
|
530
|
+
it(`${control.label} [membership: ${control.membership}]`, () => {
|
|
531
|
+
expect(inspectPolicyControl(control)).toEqual(control.violations)
|
|
532
|
+
})
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
for (const control of SKILL_POLICY_CONTROLS.filter(
|
|
536
|
+
(candidate) => candidate.violations === undefined,
|
|
537
|
+
)) {
|
|
528
538
|
it(`${control.label} [membership: ${control.membership}]`, () => {
|
|
529
539
|
const violations = inspectPolicyControl(control)
|
|
530
540
|
expect(violations).toHaveLength(1)
|