Splunk SOAR · maintainer’s tool

The incidents nobody saw

When a Splunk SOAR playbook stops halfway, the cases it drops don’t error. They just never reach the queue. This design shows it first to the person who maintains the playbooks, inside the screens they already use.

Splunk SOAR’s playbook editor with a Runs tab added: today’s runs counted on every connection, the block where eleven stopped, and the steps they never reached.

What it is

Two surfaces Splunk SOAR already has, the case list and the playbook editor, each extended to cover what happens after a playbook ships. The structure is Splunk SOAR’s; the visual treatment and the additions are mine.

Where it comes from

The failure, the debugging loop and the constraints are from my own work maintaining these playbooks. The screens are designed.

Project

Self-initiated concept · Desktop web · Product design · Aug–Sep 2026

What’s at stake

Cases that silently miss the queue have no owner and no SLA, the clock on how fast a response is due, and nobody sees them until someone searches by hand.

In Splunk SOAR, a playbook is an automated workflow that runs on incoming events. Here it also assigned each event into the response queue, and that assignment is what made it work someone owned.

The automation that should have put them in the response queue had stopped. The first anyone heard was a colleague asking why they couldn’t work an incident.

I spent four and a half years building and maintaining the automation layer in a bank’s security operations. About seventy percent of that time went on fixing playbooks that already existed. The product is built almost entirely for the other thirty. None of this is specific to security. Any automation that reports on runs rather than results has the same gap, and AI agents are the newest example.

Tines lets you trace individual story runs and, like Torq, tracks case SLAs. Cortex XSOAR records playbook task errors. In the documentation I reviewed (Oct 2026), I didn’t find a built-in check of each case against a declared minimum of expected automation.

Fixing one playbook crosses six surfaces.

Dashed tiles are sketches, not screenshots.

1Someone tells you

hey why can’t I work this incident?

2The case view

As it ships: the case activity feed, with enrich_artifact erroredAs it ships · case view crop

3The playbooks list

Find playbook
ipr_main↗

4The playbook editor

enrich_artifact

5A debug run

Run asyourself
real actions
production writes
notifications

6Pre-production → QA → production

Pre-prod→QA→Production
Approval required
Step 1 of 6

Someone tells you

A colleague asks why they can’t work an incident. You carry the case ID.

You carrycase ID

Dashed tiles are sketches, not screenshots.

Step 1 of 6

Someone tells you

hey why can’t I work this incident?

A colleague asks why they can’t work an incident. You carry the case ID.

You carrycase ID
Step 2 of 6

The case view

As it ships: the case activity feed, with enrich_artifact erroredAs it ships · case view crop

Which playbooks ran, with a red cross on the one that errored. You carry the playbook.

You carrycase IDplaybook
Step 3 of 6

The playbooks list

Find playbook
ipr_main↗

A lookup screen to find the thing to edit. You carry the block.

You carrycase IDplaybookblock
Step 4 of 6

The playbook editor

enrich_artifact

It shows what a playbook is, never what it did. You carry the change.

You carrycase IDplaybookblockchange
Step 5 of 6

A debug run

Run asyourself
real actions
production writes
notifications

Switch the playbook off, fire real actions, run as yourself. You carry the fix.

You carrycase IDplaybookblockchangefix
Step 6 of 6

Pre-production → QA → production

Pre-prod→QA→Production
Approval required

Mandatory approval, and a rollback needs the engineering team.

You carrycase IDplaybookblockchangefix
The designed flow

The case list and case view

The list notices. The case view keeps the consequence with the failure.

The playbook editor

The run evidence stays with the replay and the fix.

QA stays separate

Pre-prod→QA→Production
Approval required

Pre-production → QA → production. Approval is still mandatory.

The context stays with the case and the editor. QA still gates production.

The product treats them as unrelated screens, so the person doing the job carries the context between each one.

From a stalled case to a fix ready for QA.

The case list shows incidents, owners and ages. It does not show where automation stopped.

As Splunk SOAR ships it

The case list shows incidents, owners and ages. It does not show where automation stopped.

The original SOAR case list: status, severity, Created and Opened, without the added Automation column or coloured ages
What I added

The failure and its consequence were on different screens, so nobody owned noticing.

One column added, Automation, and rows grouped by where it stopped. Created and Opened, aged in colour, separate a stalled case from a new one. From here on, an outline marks what I added.

The real case list with Automation added: stopped cases beside Created and Opened; cream outlines identify the added column and coloured ages
The case view

The unit of failure is cases, not runs.

The error opens where it happened, and the consequence is stated across the top: enrich_artifact failed, so nothing after it ran, including the two steps this label declares as its minimum. The feed shows the step that failed and, below it, the two that never ran, which is where the harm is.

enrich_artifact failed, so nothing after it ran — including the two steps this label declares as its minimum.
The case activity feed: enrich_artifact failed and the following assign_to_queue and add_workbooks steps did not run
The case view

“It ran” and “it worked” are different questions.

The design reports against a declared minimum, assignment and workbooks, that every case under this label must get. So the case gets an Expected group: 1 of 4 expected, 0 of 2 expected, not started.

The whole Expected group: Playbooks Run 1 of 4 expected, Workbooks Added 0 of 2 expected, and SLA not started
The runs

Where eleven stopped

The editor's graph carrying the last twelve hours: 251 events into enrich_artifact, 240 out, and the three steps the other eleven never reached.

The hero’s original phone graph slice: enrich_artifact stopped, then child_entity_lookup, assign_to_queue and add_workbooks not reached. Runs counted on every connection. Where eleven stopped. What they never reached.
The editor

Diagnosing the failure made more of it.

Debugging a live playbook meant switching it off, so investigating made more stopped cases. Here the fix is written in pre-production and replayed as an analyst, with the playbook still active.

Run as the analyst who hit it. Today the choice is you or the automation user.

Outbound actions: Will not fire

Before it goes to QA, the change shows what it would affect: three child playbooks and about 250 events a day.

The existing Python editor with the approved legal_entity_2 to entity FIELD_MAP line added in success green
This replay runs case 44412 as analyst.ir with outbound actions withheld. If this ships: three child playbooks and about 250 events a day
Awaiting QA

Waiting on QA · lived.

The fix is written and tested, and eleven events are still stopped. Nothing ships without QA approval, and rollback needs another team.

The existing If this ships panel: submitted for QA, with eleven events still stopped until QA approves

QA still gates production.

What I rejected

A new dashboard. The responders’ dashboards are filled by the automation, so when it fails they show less work, not a fault. The check belongs on the case list, which every event reaches either way.

Writing playbooks from plain English. It would help with the smaller part of the job. The design spends its effort after a playbook ships.

Drawing the steps that never ran. With branches, what would have run depends on data that never arrived, so a minimum is declared instead.

The same screens on a normal day, and when the fix is blocked.

Nothing stopped · designed. The same list on a normal day. Three events that arrived minutes ago say so, and the completed work sits open underneath. A monitoring surface should be almost invisible most of the time.

The replay refused: role analyst cannot use asset entity-directory, halted at 3 of 8 blocks
The replay, run as analyst.ir: this role cannot reach the asset. Your admin account can, and that difference is the bug the analyst was hitting
The replay, run as analyst.ir: this role cannot reach the asset. Your admin account can, and that difference is the bug the analyst was hitting

Replay refused · lived, indirectly. The analyst’s role can’t reach the directory the enrichment calls. My admin account could, which is exactly why debugging as myself never reproduced it. The refusal is the finding, not a fault.

The playbook switched off forty-two minutes ago by a colleague, with eighteen events waiting
The playbook in Runs view: switched off 42 minutes ago by a.okafor. Nothing has run since
The playbook in Runs view: switched off 42 minutes ago by a.okafor. Nothing has run since

Switched off by someone else · lived, one extension. Eighteen events waiting and nothing running, because the playbook was deactivated forty-two minutes ago and nobody switched it back. I did this to myself while debugging; a colleague doing it is the extension.

Available for new work

Get in touch

Hi Luke, I’m

from

We’re building

and want help with

Reach me at

Luke Norris

Available for new work

Get in touch

Hi Luke, I’m

from

We’re building

and want help with

Reach me at

Luke Norris

Available for new work

Get in touch

Hi Luke, I’m

from

We’re building

and want help with

Reach me at

Luke Norris