SOC export (OCSF)

record_siem=True keeps the full stream. export_ocsf writes JSONL.

from netforge_rl.environment.parallel_env import NetForgeRLEnv
from netforge_rl.siem.export import export_ocsf, siem_to_ocsf

env = NetForgeRLEnv(
    {'scenario_type': 'ransomware', 'max_ticks': 100, 'record_siem': True}
)
env.reset(seed=0)
export_ocsf(env, 'runs/episode.ocsf.jsonl')
siem_to_ocsf(log_line, subnet='10.0.0.0/24', tick=42)

EventID

OCSF

4624 / 4625 / 4648 / 4768 / 4776

Authentication (3002)

4688 / Sysmon 1 / 10

Process (1007)

Sysmon 3

Network (4001)

Sysmon 22

DNS (4003)

Raw XML stays in raw_event. Honeytoken / incident → higher severity_id.