| name | scout-create-scaffold |
| description | Generate or repair a Scout test scaffold for a Kibana plugin/package (test/scout*/{api,ui} Playwright configs, fixtures, example specs). Use when you need the initial Scout directory structure; prefer `node scripts/scout.js generate` with flags for non-interactive/LLM execution. |
Create Scout Scaffold (Generator-First)
Related skills
scout-migrate-from-ftr โ After generating files, wire TypeScript for CI using Pattern A or Pattern B (Where Scout tests are typechecked in that skill). This skill documents layout; the migration skill has the full rules (relative imports, kbn_references, node scripts/type_check --project โฆ).
Inputs to Collect
- Module root (repo-relative path to the plugin/package directory, e.g.
x-pack/platform/plugins/shared/maps)
- Test type:
api, ui, or both
- Scout root directory name under
<moduleRoot>/test/
- Default:
scout (creates <moduleRoot>/test/scout/...)
- Custom config set:
scout_<configSet> (for example scout_uiam_local, scout_cspm_agentless)
- For UI scaffolds: whether tests can run in parallel (space-isolated). Default is parallel; use sequential when isolation is not possible.
Generate (Preferred)
Run from the Kibana repo root:
node scripts/scout.js generate --path <moduleRoot> --type <api|ui|both>
Common variants:
node scripts/scout.js generate --path <moduleRoot> --type ui --no-ui-parallel
node scripts/scout.js generate --path <moduleRoot> --type both --scout-root scout_<configSet>
node scripts/scout.js generate --path <moduleRoot> --type both --force
Notes:
- The generator will not modify existing
test/<scout-root>/{api,ui} sub-directories.
- If any Scout directories already exist and you pass
--path, you must also pass --force (otherwise the command fails rather than prompting).
What It Creates
- API scaffold:
test/<scout-root>/api/playwright.config.ts
test/<scout-root>/api/fixtures/constants.ts
test/<scout-root>/api/fixtures/index.ts
test/<scout-root>/api/tests/example.spec.ts
- UI scaffold (sequential):
test/<scout-root>/ui/playwright.config.ts
test/<scout-root>/ui/fixtures/constants.ts
test/<scout-root>/ui/fixtures/index.ts
test/<scout-root>/ui/fixtures/page_objects/*
test/<scout-root>/ui/tests/example.spec.ts
- UI scaffold (parallel):
test/<scout-root>/ui/parallel.playwright.config.ts
test/<scout-root>/ui/parallel_tests/example_one.spec.ts
test/<scout-root>/ui/parallel_tests/example_two.spec.ts
test/<scout-root>/ui/parallel_tests/global.setup.ts
test/<scout-root>/ui/parallel_tests/global.teardown.ts is not generated; opt in by adding the file with a globalTeardownHook(...) call. See scout-ui-testing/references/scout-ui-parallelism.md.
The generator does not create tsconfig.json files. Playwright runs without them, but node scripts/type_check (CI) must still include Scout specs in a TS projectโsee TypeScript layout below.
TypeScript layout (check_types)
Pick one pattern and wire it after scout.js generate completes:
Pattern A โ plugin root includes Scout (e.g. discover_enhanced)
- In the plugin or package root
tsconfig.json, add test/<scout-root>/**/* (or broader test/**/*) to include.
- Add
kbn_references for the Scout stack you use:
- Platform / generic:
@kbn/scout.
- Observability:
@kbn/scout-oblt; for API tests using synthtrace workers, also @kbn/scout-synthtrace, @kbn/synthtrace-client (and @kbn/rison for UI if needed).
- Match sibling plugins in the same solution for consistency.
- Do not add nested
test/<scout-root>/{ui,api}/tsconfig.json when using this pattern (one program for plugin + Scout).
- Allows relative imports from specs/fixtures into
server/ or common/ when the test needs shared registration constants or light server utilities.
Pattern B โ dedicated tsconfig.json under test/<scout-root>/{ui,api}/
- Add
test/<scout-root>/api/tsconfig.json and/or test/<scout-root>/ui/tsconfig.json with extends, include: ["**/*"], and scoped kbn_references (see SLO, data_views, infra Scout modules for examples).
- Keeps the main plugin typecheck smaller.
- Does not allow relative imports that climb into
../../../../server/... or public/... from those foldersโTypeScript will treat server/** as part of the wrong composite project (TS6059 / TS6307). Use fixtures/constants.ts, common/, or switch to Pattern A.
After wiring either pattern
- Run
yarn kbn bootstrap so packages/kbn-ts-projects/config-paths.json picks up added or removed tsconfig.json paths.
- Validate with
node scripts/type_check --project <path-to-tsconfig.json> (plugin root tsconfig.json for A, or test/<scout-root>/api/tsconfig.json / UI sibling for B).
After Generating
- Custom server config sets:
- If you create/use
test/scout_<configSet>, you typically also need a matching server config under src/platform/packages/shared/kbn-scout/src/servers/configs/config_sets/<configSet>.
start-server requires --serverConfigSet <configSet> when using a custom server config set.
Path Conventions (Specs)
- UI sequential specs:
test/scout*/ui/tests/**/*.spec.ts
- UI parallel specs:
test/scout*/ui/parallel_tests/**/*.spec.ts
- API specs:
test/scout*/api/tests/**/*.spec.ts