seed-data
$
npx mdskill add ClipboardHealth/core-utils/seed-dataGenerate test data for HCPs, facilities, and shifts via GitHub Actions.
- Creates realistic worker and workplace records for development and staging.
- Executes Bash scripts to trigger the Generate Seed Data workflow.
- Selects environment targets based on user requests for seed or setup.
- Outputs generated records directly into the specified test environment.
SKILL.md
.github/skills/seed-dataView on GitHub ↗
---
name: seed-data
description: Trigger seed data generation for test environments via GitHub Actions. Use when asked to seed, create test data, or set up HCPs/facilities/shifts.
allowed-tools: Bash
---
# Seed Data Generation
Trigger the `Generate Seed Data` GitHub Actions workflow to create test data in development, staging, or prod-shadow environments.
## Glossary
These terms appear in scenario names and user requests:
| Term | Meaning | Also known as |
| ---------- | ------------------------------------------------------------------------------------------- | ---------------------------- |
| **HCP** | Healthcare Professional — a worker on the supply side of the marketplace (nurse, CNA, etc.) | worker, professional, nurse |
| **HCF** | Healthcare Facility — a workplace on the demand side that posts shifts | workplace, facility |
| **LTC** | Long-Term Care — a type of workplace (nursing homes, skilled nursing facilities) | nursing home, care home, SNF |
| **CNA** | Certified Nursing Assistant — a worker qualification | nursing assistant |
| **RN** | Registered Nurse — a worker qualification | nurse |
| **LPN** | Licensed Practical Nurse — a worker qualification | LVN |
| **Stripe** | Payment processing account used to pay workers | payment account |
| **Shift** | A time slot at a workplace that a worker can book and work | |
## Step-by-Step Instructions
1. **Match the user's intent** to a scenario using the lookup table below. If the request is ambiguous, present the top matches and ask the user to pick one.
2. **Determine environment** — default to `development` unless the user specifies otherwise. Valid options: `development`, `staging`, `prod-shadow`.
3. **Determine count** — default to `1` unless the user specifies a different number.
4. **Collect input data** — if the matched scenario requires `input_data` (see Input Data Requirements below), ask the user for the required fields before proceeding. Never fabricate IDs — always ask.
5. **Construct the `gh workflow run` command.** If the scenario requires `input_data` or the user specified a non-default environment/count, show the command and ask for confirmation. Otherwise, execute immediately.
6. **Execute** the command. The `gh workflow run` command prints the run URL directly — capture and display it.
7. **Wait for completion** — poll the run until it finishes, then download and display the results:
```bash
# Get the run ID from the URL (last path segment), then watch it
gh run watch <RUN_ID> --repo ClipboardHealth/cbh-core --exit-status
```
- If the run **succeeds**, download the logs artifact and display its contents:
```bash
gh run download <RUN_ID> --repo ClipboardHealth/cbh-core --name seed-data-logs --dir /tmp/seed-data-logs
cat /tmp/seed-data-logs/logs.json
```
Parse the JSON and present the key results to the user (e.g., created entity IDs, names, environment).
- If the run **fails**, fetch the failed step logs and surface the error:
```bash
gh run view <RUN_ID> --repo ClipboardHealth/cbh-core --log-failed
```
## Command Templates
### Without input_data
```bash
gh workflow run "Generate Seed Data" \
--repo ClipboardHealth/cbh-core \
-f environment=<ENVIRONMENT> \
-f numberOfTestData=<COUNT> \
-f scenario=<SCENARIO_KEY>
```
### With input_data
```bash
gh workflow run "Generate Seed Data" \
--repo ClipboardHealth/cbh-core \
-f environment=<ENVIRONMENT> \
-f numberOfTestData=<COUNT> \
-f scenario=<SCENARIO_KEY> \
-f 'input_data=<JSON_STRING>'
```
## Scenario Lookup Table
<!-- cspell:ignore usecase -->
> **Note:** Scenario numbers 13 and 18 do not exist. If a user references them, let them know and present the full list below.
| Key | Description | Keyword Hints |
| -------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ----------------------------------------------------------------------- |
| `scenario-1-create-hcp-without-stripe` | Create a worker (HCP) without a Stripe payment account | hcp, worker, nurse, no stripe, basic hcp, create a nurse |
| `scenario-2-create-surgery-facility` | Create a surgery center workplace | surgery, surgical, facility, center |
| `scenario-3-create-ltc-facility` | Create a long-term care workplace (nursing home) | ltc, long term care, nursing home, care home, facility |
| `scenario-4-create-hcp-with-stripe` | Create a worker (HCP) with a Stripe payment account | hcp with stripe, worker stripe, paid worker, nurse with payment |
| `scenario-5-create-hcp-hcf-and-shift` | Create a worker + workplace + shift together (full test setup) | hcp facility shift, full setup, end to end, everything, full test setup |
| `scenario-6-create-hcp-with-multiple-licenses` | Create a worker with multiple license types | multiple licenses, multi-license, hcp licenses |
| `scenario-7-create-shift-at-clock-in-stage` | Create a shift that is ready to clock in | clock in, shift ready, check in, shift about to start |
| `scenario-8-create-rate-negotiation-hcf-multiple-hcp-pair` | Create a rate negotiation scenario with a workplace and multiple workers | rate negotiation, pricing, negotiation |
| `scenario-9-create-shift-and-perform-until-clock-out` | Create a shift and run through the full lifecycle to clock out | clock out, full shift, complete shift |
| `scenario-10-create-shift-and-perform-until-clock-out-for-given-hcf` | Same as scenario 9 but at a specific workplace (requires facility ID) | clock out given facility, specific facility shift |
| `scenario-11-create-hcp-with-stripe-near-given-facility` | Create a worker with Stripe near a specific workplace (requires facility ID) | hcp near facility, nearby hcp, stripe near, worker near |
| `scenario-12-create-shift-at-clock-in-stage-for-given-hcf` | Create a clock-in-ready shift at a specific workplace (requires facility ID) | clock in specific facility, shift at facility |
| `scenario-14-move-shifts-back-or-forth` | Move existing shifts forward or backward in time | move shifts, reschedule, shift time, back forth |
| `scenario-15-clean-old-test-data` | **DESTRUCTIVE** — delete old test data | clean, cleanup, delete test data, purge |
| `scenario-16-create-hcf-hcp-and-shifts-in-past-week` | Create workplace + worker + shifts dated in the past week | past week, historical, backfill, past shifts |
| `scenario-17-recreate-hcf-hcp-and-shifts-sales-demo-usecase` | Set up a sales demo with workplace, worker, and shifts | sales demo, demo, showcase, demo data, sales presentation |
| `scenario-19-create-shift-ready-to-clock-out` | Create a shift that is ready to clock out | ready clock out, pending clock out |
| `scenario-20-seed-workplace-review-data` | Seed workplace review / rating data | workplace review, ratings, reviews |
| `scenario-21-seed-attrition-data` | Seed attrition analytics data | attrition, churn, retention |
## Input Data Requirements
Some scenarios accept or require a JSON `input_data` field. Ask the user for these values — **never fabricate IDs**.
### Scenario 10 — Clock out shift at a specific workplace
Required fields:
- `facilityId` (string) — the target workplace's ID
- `hcpWorkerType` (string) — one of `CNA`, `RN`, `LPN`
Example:
```json
{ "facilityId": "<FACILITY_ID>", "hcpWorkerType": "CNA" }
```
### Scenario 11 — Create worker with Stripe near a specific workplace
Required fields:
- `facilityId` (string) — the workplace to create the worker near
- `hcpWorkerType` (string) — one of `CNA`, `RN`, `LPN`
Example:
```json
{ "facilityId": "<FACILITY_ID>", "hcpWorkerType": "RN" }
```
### Scenario 12 — Clock-in-ready shift at a specific workplace
Required fields:
- `facilityId` (string) — the workplace to create the shift at
- `hcpWorkerType` (string) — one of `CNA`, `RN`, `LPN`
Example:
```json
{ "facilityId": "<FACILITY_ID>", "hcpWorkerType": "LPN" }
```
### Scenario 14 — Move shifts
Required fields:
- `shiftIds` (string[]) — array of shift IDs to move
Optional fields:
- `duration` (number) — hours to move shifts by. **Positive = forward in time, negative = backward in time.**
Example:
```json
{ "shiftIds": ["<SHIFT_ID_1>", "<SHIFT_ID_2>"], "duration": 24 }
```
### Scenario 15 — Clean old test data
All fields optional:
- `emailPattern` (string) — pattern to match test emails
- `ageThreshold` (number) — age in days beyond which to clean
Example:
```json
{ "emailPattern": "+test", "ageThreshold": 30 }
```
### Scenario 21 — Seed attrition data
Optional fields:
- `facilityId` (string) — scope to a specific workplace
Example:
```json
{ "facilityId": "<FACILITY_ID>" }
```
## Behavioral Rules
1. **Default environment is `development`** — 87% of actual usage targets development. Only use other environments when explicitly requested.
2. **Default count is `1`** — override only when the user specifies a number.
3. **Never fabricate IDs** — if a scenario requires a `facilityId`, `shiftId`, or other identifier, ask the user to provide it.
4. **Confirm before executing** — show the full `gh workflow run` command and get user approval **only** when the scenario requires `input_data` or the user specified a non-default environment or count. If the scenario needs no `input_data` and defaults are used, execute immediately without confirmation.
5. **Handle ambiguity** — if the user's request matches multiple scenarios, present the top candidates with descriptions and ask them to pick.
6. **Auth errors** — if `gh` returns an authentication error, instruct the user to run `gh auth login` and retry.
7. **No `input_data` when not needed** — omit the `-f input_data=...` flag entirely for scenarios that don't require it.
8. **"Run all scenarios" is not supported via this skill** — if the user asks to run all scenarios at once, explain that this is only available through the [GitHub Actions UI](https://github.com/ClipboardHealth/cbh-core/actions/workflows/generate-seed-data.yml) by leaving the scenario dropdown blank. Do not omit the `-f scenario=...` flag to trigger all scenarios.
9. **Destructive scenario warning** — for scenario 15 (clean old test data), always display an explicit warning that this **deletes data**, confirm the target environment twice, and never run it with all optional fields left empty (require the user to specify at least `emailPattern` or `ageThreshold`).
10. **Failure handling** — always wait for the run to complete (step 7). Never just print the URL and stop.
More from ClipboardHealth/core-utils
- adversarial-reviewPerform an adversarial review of proposed work. Use ONLY when the user explicitly types /adversarial-review. Never auto-trigger, even if the user mentions reviewing, questioning, or challenging their approach.
- clipboard-testingEnd-to-end testing playbook for Clipboard Health changes. Use when the user wants to verify, exercise, or set up test data for a backend or frontend change against a live environment — "test my change end-to-end", "verify this works in dev", "create a test workplace / worker / shift", "get a shift through to paid / invoiced", "prove the API change works". Defaults to the `development` AWS environment, API-first (cbh CLI tokens + curl). The skill knows enough to run the core happy-path flow (workplace → worker → shift → clock in/out → pay → invoice) autonomously; for anything else, it orients around the codebase and asks the user for missing directories.
- cognito-user-analysisUse when looking up Cognito user details by sub UUID, finding duplicate accounts sharing phone or email, analyzing which duplicates to keep vs delete, or fixing orphaned UNCONFIRMED signups. Symptoms include 403 Forbidden on login, multiple accounts for same phone, backend sync issues.
- datadog-investigateInvestigate production issues by querying Datadog logs, metrics, and APM traces, then correlating findings with the codebase. Use this skill whenever the user mentions production errors, Datadog, observability, log investigation, latency spikes, error rate increases, 500s, trace IDs, monitor alerts, or wants to debug any service issue in a deployed environment.
- flaky-test-debuggerDebug and fix flaky tests including Playwright E2E, NestJS service/integration, React component, and unit tests. Use this skill when investigating intermittent test failures, triaging flaky tests, or fixing test instability.
- interview-featureUse when clarifying requirements for a feature ticket. Iteratively researches and interviews the user until the problem is well-understood, then produces a structured problem brief. Dispatched by write-feature-ticket when context is insufficient.
- investigate-ticketUse when investigating a bug, incident, or issue before implementation. Researches codebase, queries Datadog, and presents structured findings with handoff options. Also use when asked to "look into" or "investigate" something.
- local-packageUse Clipboard's internal CLI to link and unlink @clipboard-health packages across repositories for local development. Use when testing local package changes, linking @clipboard-health packages between repos, or using the cbh CLI local-package command.
- write-bug-ticketUse when creating a Linear bug report ticket from conversation context, investigation findings, or user-provided evidence. Focuses on structuring and writing — not investigating.
- write-feature-ticketUse when creating a Linear feature request ticket from conversation context, a brief description, or code/PR analysis. Interviews the user for clarity when context is insufficient.