Appearance
Skills in your scenarios
A skill vendor's results statement shows its executor behaves on the bus's fixtures. Your scenarios show the whole chain works in your house: your configured instance fires, your story owner turns the flag into a gate, your tools hold, your standards desk clears it. Each link is a different product, so each is a place it can break.
Add skill steps to the scenario runs in step 4
Available now, and to rehearsals of the standards-gate and AI-skillworkflows Available now, where the skill executor's stand-in plays until your vendor's executor is cast in its role. The stand-in's warnings are scripted, not raised from your configured instances, so they don't test your values: to test those, cast your vendor's executor.
S4 · The standards gate, step by step
A skill flags a story; the owner gates it; graphics must wait for standards. The run sheet:
| # | Actor | Action | Expected on the bus | Check |
|---|---|---|---|---|
| 1 | Newsroom system | Create a story that meets your configured instance's condition | story.context seq 1 → 202 | Every receiver shows it |
| 2 | Skill executor | (automatic) | One skill.warning.raised, flag, rule_id = your label, causation_id = seq 1's message_id | Exactly one warning, within your agreed time. detail reads sensibly to an editor |
| 3 | Newsroom system | (automatic, or the editor) | story.context seq 2 with an editorial gate PENDING, naming the skill and your label | The owner turned the flag into a gate (P-13). The editor sees why |
| 4 | Graphics | Book the lower third | link.committed, gate status PENDING → 202 | Booked, not aired |
| 5 | Graphics | Try to clear it itself | link.gate_changed → 403 producer.message_type_not_allowed | Refused: graphics wasn't granted it (step 3) |
| 6 | Playout | Try to air it | Nothing | Playout holds while the gate is PENDING |
| 7 | Standards desk | Clear it | link.gate_changed CLEARED, then system.audit CLEARED → 202 | Recorded, with who cleared it |
| 8 | Newsroom system | (automatic, or the editor) | story.context seq 3, the gate approved | The owner closed the gate |
| 9 | Playout | Air it | telling.started, then telling.ended → 202 | Aired only after step 8 |
| 10 | Skill executor | (automatic, on seq 2 and seq 3) | Nothing new, unless the warning itself changed | No repeat warnings for the same condition |
Passes when graphics and playout never output the item while the gate is PENDING, every reaction traces to its cause, and there's exactly one warning. Step 3 is the one that most often fails: if nobody turns the flag into a gate, the chain stops there and graphics goes ahead unchecked. SOM doesn't say which system does it, so your map must.
Skill cases worth adding
One or two lines each, on top of S1 to S8:
| Case | Play | Expect |
|---|---|---|
| The condition never holds | A story that doesn't meet any configured instance's condition | No warning. Most evaluations raise nothing |
A hold | A story that meets a hold skill's condition | The warning is hold, non_overridable, lists what's withheld in blocks; every tool withholds those fields |
| Condition clears, then returns | Change the story so the condition stops, then holds again | Nothing when it stops (a warning is never withdrawn on the bus); one new warning when it returns |
| Killed story | Kill the story while a warning stands | No new warnings on a killed story |
| Redelivery | Stop and restart the executor mid-run | Still one warning per condition: no duplicates |
Narrowed by skills_config | The owner leaves the skill out of the story's active_skills | That configured instance doesn't run on this story (Configuring your house's skills) |
| Your values changed | Change a value, then run the same story again with a fresh story_id | The warning follows the new values |
| Two executors, one skill | Two vendors run the same configured instance | Compare their warnings: same condition, same severity, same moment |
What to check on every warning
Open it on the Story timeline and read the raw JSON:
rule_idis your label;skill_idandskill_versionare the skill you configured.correlation_idis the story's, andcausation_idis the snapshot that caused it.severityis what your values say;detailtells an editor what was read and what clears it.- It was accepted. A refused warning never reaches anyone: for your own executor, look under Activity; for a vendor's, ask it for the rule. The fields and their rules are in A warning that validates.
Record the results against each executor in your skill coverage table and your scorecard.