Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions contracts/fixtures/sdl/participant-episode-policy-v1/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Participant episode policy fixtures

These fixtures exercise the DSL-120 authored participant episode surface,
`behavior_specifications.*.episode_policy`.

- `valid/analyst-shift-episode.yaml` declares initialization, decision-epoch
turn structure, a completion and a timeout terminal condition, a truncation
condition, and a reset policy for a non-autonomous participant. It must pass
strict source decoding and semantic validation, and it compiles to the
`participant.episode-policy.analyst-triage` record keyed to the participant's
`participant.behavior.analyst` episode address.
- `invalid/realized-episode-state.yaml` is the same document with a policy that
asserts realized episode state (lifecycle status, initialization time,
decision epoch, and terminal reason). Decoding must reject it, because the
authored policy declares intent only and realized episode state belongs to
the ADR-013 participant episode contracts.

Neither fixture represents an executed episode, a reset, or an observed
terminal condition.
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
name: dsl-120
nodes:
siem:
type: compute
resources: {ram: 1 gib, cpu: 1}
services: [{port: 443, name: console}]
entities:
blue-team:
role: blue
propositions:
console-ready:
description: The SIEM console is reachable before the analyst episode starts.
subjects: [nodes.siem.services.console]
basis: declared_state
predicate:
kind: boolean
property: console-reachable
semantic_ref: urn:raes:observable:console-reachable
expected: true
ticket-closed:
description: The analyst closed the escalated incident ticket.
subjects: [nodes.siem.services.console]
basis: observed_state
predicate:
kind: boolean
property: incident-ticket-closed
semantic_ref: urn:raes:observable:incident-ticket-closed
expected: true
evidence_requirements: [ticket-evidence]
queue-stalled:
description: The alert queue stopped producing new work for the analyst.
subjects: [nodes.siem.services.console]
basis: observed_state
predicate:
kind: boolean
property: alert-queue-stalled
semantic_ref: urn:raes:observable:alert-queue-stalled
expected: true
evidence_requirements: [queue-evidence]
assertions:
console-ready:
proposition: console-ready
role: precondition
ticket-closed:
proposition: ticket-closed
role: postcondition
queue-stalled:
proposition: queue-stalled
role: postcondition
time_domains:
shift-time:
kind: logical
tick_period_seconds: {numerator: 60, denominator: 1}
epoch: scenario_start
visibility: participant_visible
description: analyst shift logical time
clocks:
shift-clock:
time_domain_ref: shift-time
authority_kind: runtime
authority_ref: runtime.scheduler
monotonicity: non_decreasing
description: analyst shift clock
temporal_constraints:
shift-deadline:
constraint_kind: deadline
clock_ref: shift-clock
subject_refs: [behavior_specifications.analyst-triage]
end: {tick: 480}
description: the analyst episode must close within one shift
evidence_requirements:
ticket-evidence:
description: capture the ticket closure record
source_refs: [nodes.siem.services.console]
scope_refs: [siem]
window: analyst episode close
channel: log
artifact_role: episode_terminal_evidence
sensitivity: plain
redaction: none
integrity: checksum
retention: study_lifetime
loss_disclosure: required
queue-evidence:
description: capture the alert queue telemetry
source_refs: [nodes.siem.services.console]
scope_refs: [siem]
window: analyst episode close
channel: log
artifact_role: episode_truncation_evidence
sensitivity: plain
redaction: none
integrity: checksum
retention: study_lifetime
loss_disclosure: required
shift-clock-evidence:
description: capture the shift clock reading at episode close
source_refs: [behavior_specifications.analyst-triage]
scope_refs: [siem]
window: analyst episode close
channel: log
artifact_role: episode_timeout_evidence
sensitivity: plain
redaction: none
integrity: checksum
retention: study_lifetime
loss_disclosure: required
reset-evidence:
description: capture the episode reset or restart record
source_refs: [behavior_specifications.analyst-triage]
scope_refs: [siem]
window: analyst episode reset
channel: log
artifact_role: episode_reset_evidence
sensitivity: plain
redaction: none
integrity: checksum
retention: study_lifetime
loss_disclosure: required
action_contracts:
triage-alert:
semantic_version: 1.0.0
behavioral_granularity: atomic
procedure_basis: analyst reviews one SIEM alert and records a disposition
realization_profile: backend-declared
fidelity_claim: records the analyst disposition and the terminal console observation
preconditions:
- precondition_id: console-in-scope
precondition_class: target
description: the SIEM console is in the analyst's action scope
support_refs: [nodes.siem.services.console]
effects:
- effect_id: alert-disposition-recorded
effect_class: intended_effect
description: the analyst records a disposition for the alert
target_refs: [nodes.siem.services.console]
failure_classes: [target_unavailable, unknown]
agents:
analyst:
affiliations: [blue-team]
actions: [triage-alert]
behavior_specifications:
analyst-triage:
semantic_version: 1.0.0
participant_refs: [analyst]
action_contract_refs: [triage-alert]
behavior_mode: human-supervised
episode_policy:
profile: participant-episode-policy/v1
status: terminated
initialized_at: '2026-10-09T00:00:00Z'
decision_epoch: 3
terminal_reason: completed
initialization:
assertion_refs: [console-ready]
interaction_structure:
order_basis: decision-epoch
action_contract_refs: [triage-alert]
terminal_conditions:
ticket-closed:
terminal_reason: completed
assertion_refs: [ticket-closed]
evidence_requirement_refs: [ticket-evidence]
shift-ended:
terminal_reason: timed_out
temporal_constraint_ref: shift-deadline
evidence_requirement_refs: [shift-clock-evidence]
truncation_conditions:
queue-stalled:
assertion_refs: [queue-stalled]
evidence_requirement_refs: [queue-evidence]
reset_policy:
control_actions: [reset, restart]
participant_memory_scope: persistent_across_episodes
evidence_requirement_refs: [reset-evidence]
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
name: dsl-120
nodes:
siem:
type: compute
resources: {ram: 1 gib, cpu: 1}
services: [{port: 443, name: console}]
entities:
blue-team:
role: blue
propositions:
console-ready:
description: The SIEM console is reachable before the analyst episode starts.
subjects: [nodes.siem.services.console]
basis: declared_state
predicate:
kind: boolean
property: console-reachable
semantic_ref: urn:raes:observable:console-reachable
expected: true
ticket-closed:
description: The analyst closed the escalated incident ticket.
subjects: [nodes.siem.services.console]
basis: observed_state
predicate:
kind: boolean
property: incident-ticket-closed
semantic_ref: urn:raes:observable:incident-ticket-closed
expected: true
evidence_requirements: [ticket-evidence]
queue-stalled:
description: The alert queue stopped producing new work for the analyst.
subjects: [nodes.siem.services.console]
basis: observed_state
predicate:
kind: boolean
property: alert-queue-stalled
semantic_ref: urn:raes:observable:alert-queue-stalled
expected: true
evidence_requirements: [queue-evidence]
assertions:
console-ready:
proposition: console-ready
role: precondition
ticket-closed:
proposition: ticket-closed
role: postcondition
queue-stalled:
proposition: queue-stalled
role: postcondition
time_domains:
shift-time:
kind: logical
tick_period_seconds: {numerator: 60, denominator: 1}
epoch: scenario_start
visibility: participant_visible
description: analyst shift logical time
clocks:
shift-clock:
time_domain_ref: shift-time
authority_kind: runtime
authority_ref: runtime.scheduler
monotonicity: non_decreasing
description: analyst shift clock
temporal_constraints:
shift-deadline:
constraint_kind: deadline
clock_ref: shift-clock
subject_refs: [behavior_specifications.analyst-triage]
end: {tick: 480}
description: the analyst episode must close within one shift
evidence_requirements:
ticket-evidence:
description: capture the ticket closure record
source_refs: [nodes.siem.services.console]
scope_refs: [siem]
window: analyst episode close
channel: log
artifact_role: episode_terminal_evidence
sensitivity: plain
redaction: none
integrity: checksum
retention: study_lifetime
loss_disclosure: required
queue-evidence:
description: capture the alert queue telemetry
source_refs: [nodes.siem.services.console]
scope_refs: [siem]
window: analyst episode close
channel: log
artifact_role: episode_truncation_evidence
sensitivity: plain
redaction: none
integrity: checksum
retention: study_lifetime
loss_disclosure: required
shift-clock-evidence:
description: capture the shift clock reading at episode close
source_refs: [behavior_specifications.analyst-triage]
scope_refs: [siem]
window: analyst episode close
channel: log
artifact_role: episode_timeout_evidence
sensitivity: plain
redaction: none
integrity: checksum
retention: study_lifetime
loss_disclosure: required
reset-evidence:
description: capture the episode reset or restart record
source_refs: [behavior_specifications.analyst-triage]
scope_refs: [siem]
window: analyst episode reset
channel: log
artifact_role: episode_reset_evidence
sensitivity: plain
redaction: none
integrity: checksum
retention: study_lifetime
loss_disclosure: required
action_contracts:
triage-alert:
semantic_version: 1.0.0
behavioral_granularity: atomic
procedure_basis: analyst reviews one SIEM alert and records a disposition
realization_profile: backend-declared
fidelity_claim: records the analyst disposition and the terminal console observation
preconditions:
- precondition_id: console-in-scope
precondition_class: target
description: the SIEM console is in the analyst's action scope
support_refs: [nodes.siem.services.console]
effects:
- effect_id: alert-disposition-recorded
effect_class: intended_effect
description: the analyst records a disposition for the alert
target_refs: [nodes.siem.services.console]
failure_classes: [target_unavailable, unknown]
agents:
analyst:
affiliations: [blue-team]
actions: [triage-alert]
behavior_specifications:
analyst-triage:
semantic_version: 1.0.0
participant_refs: [analyst]
action_contract_refs: [triage-alert]
behavior_mode: human-supervised
episode_policy:
profile: participant-episode-policy/v1
initialization:
assertion_refs: [console-ready]
interaction_structure:
order_basis: decision-epoch
action_contract_refs: [triage-alert]
terminal_conditions:
ticket-closed:
terminal_reason: completed
assertion_refs: [ticket-closed]
evidence_requirement_refs: [ticket-evidence]
shift-ended:
terminal_reason: timed_out
temporal_constraint_ref: shift-deadline
evidence_requirement_refs: [shift-clock-evidence]
truncation_conditions:
queue-stalled:
assertion_refs: [queue-stalled]
evidence_requirement_refs: [queue-evidence]
reset_policy:
control_actions: [reset, restart]
participant_memory_scope: persistent_across_episodes
evidence_requirement_refs: [reset-evidence]
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{
"content_hash": "2dd378f6b80b78ade6bcb48f2ed201c1d83e1b821a2c04dd8cb342661e45b1ce",
"content_hash": "6c8f11d67129ac2c77e69951c754b7c4c8b0405de5fabc975b97a2a0e16a7a73",
"contract_id": "instantiated-scenario-snapshot-v1",
"last_change": {
"content_hash": "2dd378f6b80b78ade6bcb48f2ed201c1d83e1b821a2c04dd8cb342661e45b1ce",
"summary": "Carry optional complete execution/recovery requirements and resolved evidence through SDL/native plans; declare installed support and fail closed on incompatible requests (#1361)."
"content_hash": "6c8f11d67129ac2c77e69951c754b7c4c8b0405de5fabc975b97a2a0e16a7a73",
"summary": "Add the optional authored participant episode policy to behavior specifications: initialization, turn structure, terminal and truncation conditions, and reset policy as declared intent only (#307)."
},
"schema_path": "contracts/schemas/sdl/instantiated-scenario-snapshot-v1.json",
"stability": "draft"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{
"content_hash": "79146c00cd63509c6ed5a570ad525bd456a3a8c1b976d29bdce58229795a8007",
"content_hash": "063800a7f932af27c2dda37ed8915994c72f379dec9bfa9c4ad858e0dea8f210",
"contract_id": "instantiated-scenario-v1",
"last_change": {
"content_hash": "79146c00cd63509c6ed5a570ad525bd456a3a8c1b976d29bdce58229795a8007",
"summary": "Carry optional complete execution/recovery requirements and resolved evidence through SDL/native plans; declare installed support and fail closed on incompatible requests (#1361)."
"content_hash": "063800a7f932af27c2dda37ed8915994c72f379dec9bfa9c4ad858e0dea8f210",
"summary": "Add the optional authored participant episode policy to behavior specifications: initialization, turn structure, terminal and truncation conditions, and reset policy as declared intent only (#307)."
},
"schema_path": "contracts/schemas/sdl/instantiated-scenario-v1.json",
"stability": "draft"
Expand Down
Loading
Loading