Applying a group never starts a run. It declares the group. A group runs when its
schedule fires, when someone presses Run now on it in the dashboard, or when you start it from the CLI or API.Fields
Which plans run
Each entry inplans resolves by name, in this order:
- A
kind: simulationPlanin the same bundle, or one config already manages. - A plan made in the dashboard with exactly that name. Write it as it appears in Roark, spaces and capitals included.
Running on a schedule
schedule takes exactly the same block as a plan’s: hourly, interval, daily, weekly, monthly or once, with timezone, enabled, endDate and maxRuns. See Running on a schedule for every field.
The ownership rules match too: declaring schedule puts the group’s schedule under config, removing the block deletes it, and enabled: false pauses it without deleting it.
Each fire is attempted once. Plans start one after another and a started run can’t be taken back, so a retry could start some plans twice. If a plan can’t start, the plans that did start are still grouped and reported on, and the fire is recorded as failed.
A scheduled run can’t prompt for a variable, so every variable the group’s plans use needs a default. See Variables.
Who gets the report
When every run in the group has finished, Roark writes the group report and announces it. The report PDF goes with every announcement, so a reader who never logs in to Roark still gets the whole report.
Each email carries the verdict, a link to the report in Roark, and the full report attached as a PDF. A list is the way to send the report straight to executives or stakeholders outside your Roark project.
email: []) is rejected rather than read as “nobody” or “everyone”. Write false or true.
Slack
notify.slack takes up to 10 channels, in the same { channelId, channelName } shape an alert uses. Each channel gets a summary message (the verdict, runs passed, calls, issue count and the top three issues, with a Read the report button), and the report PDF is posted in that message’s thread.
1
Connect Slack to the project
Slack is connected once, in the dashboard, under Settings → Project → Notifications. Connecting is an approval in Slack itself, so it can’t be done from config. A group that names a Slack channel fails to apply until the project has a Slack connection.
2
Find each channel's id
In Slack, open the channel, click its name, and copy the Channel ID at the bottom of the About tab (it looks like
C0123ABCXYZ). The id is what identifies the channel; channelName is only the label you’ll see in Roark.3
Invite Roark to private channels
Roark joins public channels on its own. For a private channel, add the Roark app to it first: open the channel’s details, then Integrations → Add apps.
Posting the PDF needs Slack’s file upload permission, which older Slack connections don’t have. On those, the summary message still arrives but without the PDF. Reconnect Slack under Settings → Project → Notifications to grant it.
When settings change
Each run copies the group’s notification settings when it starts. Changingnotify and re-applying affects the next run, never a report that’s already being written.
Like every other field, deleting the notify block (or one of its lines) reverts it to the default: email every project member, no Slack.
Running a group on demand
Applying never starts a run, so a one-off run is its own step. From the CLI, using the group’s id (fromroark simulation group list):
latestReport, the report’s progress. The report waits for every run to finish. Poll it until latestReport.status is READY (or FAILED):
POST /v1/simulation/group/{groupId}/run, then GET /v1/simulation/run-group/{runGroupId}) and in the Node.js and Python SDKs. A run started this way announces its report through notify exactly as a scheduled run does.
In the dashboard
Saved groups are listed under Simulations → Runs → Groups, above the history of group runs. Each row shows the group’s schedule and where its report goes, and has Run now. Each group run opens a page with the combined report and a PDF download. A group created by config shows Managed by config. You can still run it from the dashboard, but its plans and its Report delivery settings are read-only there: change them in your config and re-apply. A group made in the dashboard with the same name as akind: simulationGroup is adopted on the first apply rather than duplicated, as long as exactly one unmanaged group has that name.
Removing a group
Deleting a group from your config (with prune on, the default) deletes the group and its schedule. The group runs and reports it already produced stay, so past reports remain readable.Apply order
A group lists plans by name, so one apply resolves it after the plans and before the alerts:For the full field reference of every kind, see the Config DSL reference schema.