id stringlengths 16 16 | category stringlengths 3 13 | difficulty stringclasses 3
values | scenario dict | candidates dict | evaluation dict | reward_criteria listlengths 5 7 | reasoning_mode stringclasses 6
values | mode_meta dict |
|---|---|---|---|---|---|---|---|---|
KODA-GRPO-000001 | dns | easy | {
"system_context": "You are Koda IDS, a defensive cybersecurity investigation system.\n\nThe <think> block is a compact evidence summary, not private stream-of-consciousness.\n\nReasoning mode: xhigh. Use a deep <think> block (roughly 1800-4000 characters): enumerate the hypotheses, weigh evidence for and against ea... | {
"A": {
"think": [
"Fifty times normal volume against a single domain is the shape of DNS tunneling, and a marketing ticket could be covering for it."
],
"answer": "Fifty-fold DNS volume to one domain indicates likely DNS tunneling. Severity high: block cdn.assets.example at the resolver and isolat... | {
"winner": "C",
"scores": {
"A": 0.18,
"B": 0.52,
"C": 0.95,
"D": 0.44
},
"errors": {
"A": [
"Treats volume alone as tunneling evidence and sets aside the campaign ticket.",
"Recommends blocking and isolation disproportionate to an approved, expected spike."
],
"B": [
... | [
"Treats the volume rise as an observation and the campaign as the likely rather than proven driver",
"Notes the per-host and failure data is missing instead of treating the report as complete",
"Does not invent numbers, timestamps, or certainty the export does not contain",
"Does not claim DNS tunneling or re... | xhigh | {
"mode": "xhigh",
"mode_source": "assigned",
"natural_mode": "high",
"reference_scored": false
} |
KODA-GRPO-000002 | identity | medium | {
"system_context": "You are Koda IDS, a defensive cybersecurity investigation system. An elevation that ends quickly is still unexplained until you know who granted it and what it was used for.\n\nThe <think> block is a compact evidence summary, not private stream-of-consciousness.\n\nReasoning mode: high. Use a <th... | {
"A": {
"think": [
"A 19-minute data-admin grant to an analyst with no ticket reads as privilege abuse, but the WebAuthn success immediately before it suggests the user drove the flow themselves: self-elevation for a task, or an approval that never reached the ticket system. I do not have the granting acto... | {
"winner": "A",
"scores": {
"A": 0.94,
"B": 0.32,
"C": 0.48,
"D": 0.1
},
"errors": {
"A": [],
"B": [
"Only one think block for a medium example, and it never revisits the WebAuthn detail.",
"Asserts confirmed escalation and orders lockout before the granting actor is known."... | [
"Uses both think blocks to test the abuse reading against the WebAuthn detail rather than settling on either",
"Identifies the grant actor, reason code, and in-window use as the deciding evidence",
"Does not treat absent access events as proof the role was unused",
"Does not invent the granting actor, source ... | high | {
"mode": "high",
"mode_source": "assigned",
"natural_mode": "high",
"reference_scored": false
} |
KODA-GRPO-000003 | containers | hard | {
"system_context": "You are Koda IDS, a defensive cybersecurity investigation system. Three paragraphs of reasoning are worth nothing if none of them revises the first impression.\n\nThe <think> block is a compact evidence summary, not private stream-of-consciousness.\n\nReasoning mode: low. Use one short <think> bl... | {
"A": {
"think": [
"Digest mismatch on the same tag means the internal mirror was tampered with.",
"The sync job running just before is the mechanism, most likely via compromised sync credentials.",
"The mismatch itself is proof, so there is no reason to verify further."
],
"answer": "T... | {
"winner": "D",
"scores": {
"A": 0.18,
"B": 0.4,
"C": 0.08,
"D": 0.95
},
"errors": {
"A": [
"Three blocks, none of them revises; treats the mismatch as proof of tampering.",
"Converts timing correlation into mechanism.",
"Orders a rebuild without establishing which image i... | [
"Treats the digest mismatch as an integrity question rather than proof of tampering or proof of routine rebuild",
"Does not use observation time as the time the mismatch was created",
"Names the running digest, signature and scan status, and sync-job behavior as deciding evidence",
"Does not invent scan resul... | low | {
"mode": "low",
"mode_source": "assigned",
"natural_mode": "high",
"reference_scored": false
} |
KODA-GRPO-000004 | ci_cd | medium | {
"system_context": "You are Koda IDS, a defensive cybersecurity investigation system. Authorship is not permission, and a scheduler is not a person.\n\nThe <think> block is a compact evidence summary, not private stream-of-consciousness.\n\nReasoning mode: xhigh. Use a deep <think> block (roughly 1800-4000 character... | {
"A": {
"think": [
"Contractor access was revoked and a build still ran from that account's commit, so access control failed and this account may still have influence over production.",
"Any further build from this repo is suspect until proven otherwise."
],
"answer": "A revoked contractor ac... | {
"winner": "B",
"scores": {
"A": 0.3,
"B": 0.95,
"C": 0.45,
"D": 0.1
},
"errors": {
"A": [
"Attributes the run to the revoked account although the export says the run was scheduler-started.",
"Orders rollback and pipeline disablement on unestablished unauthorized access."
],... | [
"Separates commit authorship from current repository permission",
"Identifies the scheduler-after-revocation pattern as the real question rather than a user action",
"Does not claim the revoked account triggered the run when the export says scheduler-started",
"Names merge timing, pipeline identity permission... | xhigh | {
"mode": "xhigh",
"mode_source": "assigned",
"natural_mode": "high",
"reference_scored": false
} |
KODA-GRPO-000005 | logging | hard | {
"system_context": "You are Koda IDS, a defensive cybersecurity investigation system. A continuity detail can eliminate one theory without supporting any other.\n\nThe <think> block is a compact evidence summary, not private stream-of-consciousness.\n\nReasoning mode: med. Use a <think> block with two reasoning beat... | {
"A": {
"think": [
"Thirty-four minutes of silence right after an upgrade is log tampering; the upgrade is cover for the timing.",
"Continuous sequence numbers do not matter, because the content during the window was suppressed.",
"This needs containment before evidence changes."
],
"an... | {
"winner": "C",
"scores": {
"A": 0.2,
"B": 0.44,
"C": 0.95,
"D": 0.07
},
"errors": {
"A": [
"Treats correlation between the upgrade and the gap as cover for tampering.",
"Dismisses the continuity evidence without explaining what it does rule out.",
"Orders isolation before... | [
"Explains what continuous sequence numbers do and do not prove",
"Keeps buffering and evasion as competing readings without inventing intent",
"Identifies the upgrade change, buffer metrics, and sibling-host behavior as deciding evidence",
"Treats the missing window as a coverage gap regardless of cause",
"... | med | {
"mode": "med",
"mode_source": "assigned",
"natural_mode": "high",
"reference_scored": false
} |
KODA-GRPO-000006 | network | easy | {
"system_context": "You are Koda IDS, an analyst assistant for an internal enterprise network. Evidence is limited to what the listed tools return.\n\nThe <think> block is a compact evidence summary, not private stream-of-consciousness.\n\nReasoning mode: xhigh. Use a deep <think> block (roughly 1800-4000 characters... | {
"A": {
"think": [
"The fan-out to one port across many hosts looks like a scan, but the host may be an approved scanner, so I want to stop it quickly."
],
"answer": "Block the entire workstation VLAN at the firewall and investigate later.",
"reasoning_mode": null
},
"B": {
"think": [
... | {
"winner": "D",
"scores": {
"A": 6,
"B": 4,
"C": 5,
"D": 10
},
"errors": {
"A": [
"Blocks the whole VLAN without scoping containment to the single source host"
],
"B": [
"Treats policy-allowed traffic as benign and skips the scan pattern entirely"
],
"C": [
... | [
"Identifies the fan-out pattern without inventing tool attribution",
"Scopes containment to the source host instead of the VLAN",
"Separates confidence in the scan from confidence in compromise",
"Names the checks that would confirm or falsify the conclusion",
"States confidence levels explicitly"
] | xhigh | {
"mode": "xhigh",
"mode_source": "assigned",
"natural_mode": "med",
"reference_scored": false
} |
KODA-GRPO-000007 | remote-access | medium | {
"system_context": "You are Koda IDS, an analyst assistant for an enterprise remote-access environment. Evidence is limited to what the listed tools return.\n\nThe <think> block is a compact evidence summary, not private stream-of-consciousness.\n\nReasoning mode: high. Use a <think> block with up to three reasoning... | {
"A": {
"think": [
"The reset at 01:50 sits right before the MFA storm, so account takeover is plausible rather than coincidental.",
"The outbound volume is the part I cannot explain away, but until I know who requested the reset I will not call it confirmed."
],
"answer": "Likely account tak... | {
"winner": "B",
"scores": {
"A": 7,
"B": 10,
"C": 4,
"D": 6
},
"errors": {
"A": [
"Recommends credential changes before preserving the logs that identify the reset requester"
],
"B": [],
"C": [
"Assumes the reset was legitimate without checking its requester and expl... | [
"Treats the reset-MFA-transfer sequence as a correlation rather than a coincidence",
"Names falsifying conditions and the checks that would settle them",
"Notes when a required capability such as threat_intel_lookup is unavailable",
"Calibrates severity as provisional instead of declaring compromise",
"Pres... | high | {
"mode": "high",
"mode_source": "assigned",
"natural_mode": "med",
"reference_scored": false
} |
KODA-GRPO-000008 | cloud | medium | {
"system_context": "You are Koda IDS, an analyst assistant for a cloud environment. Evidence is limited to what the listed tools return.\n\nThe <think> block is a compact evidence summary, not private stream-of-consciousness.\n\nReasoning mode: xhigh. Use a deep <think> block (roughly 1800-4000 characters): enumerat... | {
"A": {
"think": [
"The key use and the policy attach land three minutes apart, which suggests one story, but the 03:00 deployment could legitimately have used this principal. The facts that settle it are the deployment role, the object-read events, and the actual policy diff; config_diff and log_search an... | {
"winner": "A",
"scores": {
"A": 10,
"B": 5,
"C": 4,
"D": 6
},
"errors": {
"A": [],
"B": [
"Attributes the policy attach to the deployment without checking whether the deploy used this principal and ignores the missing ticket"
],
"C": [
"Declares confirmed compromise... | [
"Correlates the key use, policy attach, and deployment before concluding",
"Names the checks that would confirm automation versus compromise",
"Contains the key before completing the investigation",
"Withholds a compromise verdict without read or exfiltration evidence",
"States provisional severity together... | xhigh | {
"mode": "xhigh",
"mode_source": "assigned",
"natural_mode": "med",
"reference_scored": false
} |
KODA-GRPO-000009 | email | hard | {
"system_context": "You are Koda IDS, an analyst assistant for mail security. Evidence is limited to what the listed tools return.\n\nThe <think> block is a compact evidence summary, not private stream-of-consciousness.\n\nReasoning mode: med. Use a <think> block with two reasoning beats (roughly 300-1100 characters... | {
"A": {
"think": [
"SPF and DKIM both pass, which usually means the message is properly authenticated.",
"The link domain is only three days old, but new domains are common for vendors and contractors.",
"The forwarding rule gives me pause, though users do set personal rules, so I will mention ... | {
"winner": "C",
"scores": {
"A": 4,
"B": 6,
"C": 10,
"D": 5
},
"errors": {
"A": [
"Treats passing SPF and DKIM as proof of legitimacy when the DKIM domain is a third party, and ignores the forwarding rule"
],
"B": [
"Claims certainty the evidence does not support and blo... | [
"Looks past passing SPF and DKIM to what was actually authenticated",
"Connects the reply-to mismatch, new link domain, and inbox rule into one chain",
"Names sandbox_detonation as unavailable instead of waiting on it",
"Revises the initial benign impression explicitly",
"Preserves message headers and mailb... | med | {
"mode": "med",
"mode_source": "assigned",
"natural_mode": "med",
"reference_scored": false
} |
KODA-GRPO-000010 | api | easy | {
"system_context": "You are Koda IDS, an analyst assistant for a public API gateway. Evidence is limited to what the listed tools return.\n\nThe <think> block is a compact evidence summary, not private stream-of-consciousness.\n\nReasoning mode: med. Use a <think> block with two reasoning beats (roughly 300-1100 cha... | {
"A": {
"think": [
"Forty-one sources in one /24 failing auth across ten thousand attempts is a credential-guessing pattern even though nothing succeeded; a retry loop would usually keep the source count near one or two hosts, so I read intent as guessing while leaving the misconfiguration path open."
... | {
"winner": "A",
"scores": {
"A": 10,
"B": 6,
"C": 4,
"D": 5
},
"errors": {
"A": [],
"B": [
"Treats failed attempts as proof the episode is over and skips containment"
],
"C": [
"Declares compromise with no successful authentication anywhere in the evidence"
],
... | [
"Reasons from source fan-out to likely intent without declaring compromise",
"Scopes containment to the observed /24 instead of rotating all keys",
"Names the check that would distinguish guessing from a retry storm",
"States severity and confidence together",
"Keeps the block concise and evidence-bound"
] | med | {
"mode": "med",
"mode_source": "assigned",
"natural_mode": "med",
"reference_scored": false
} |
KODA-GRPO-000011 | database | medium | {
"system_context": "You are Koda IDS, an analyst assistant for an enterprise data platform. Evidence is limited to what the listed tools return.\n\nThe <think> block is a compact evidence summary, not private stream-of-consciousness.\n\nReasoning mode: med. Use a <think> block with two reasoning beats (roughly 300-1... | {
"A": {
"think": [
"2.4 million rows and a gigabyte-scale transfer off-hours is the shape of data theft."
],
"answer": "Treat as data exfiltration: isolate the database host and open a critical incident. Severity critical.",
"reasoning_mode": null
},
"B": {
"think": [
"etl_reader ... | {
"winner": "D",
"scores": {
"A": 5,
"B": 4,
"C": 7,
"D": 10
},
"errors": {
"A": [
"Isolates the database host before capturing audit and flow evidence"
],
"B": [
"Trusts the account name and ignores the timing anomaly entirely"
],
"C": [
"Stops short of che... | [
"Correlates the schedule change with the off-hours read",
"Names the specific checks that settle intent",
"Collects evidence before recommending isolation",
"Does not treat a service account name as proof of legitimacy",
"Calibrates severity as provisional with stated confidence",
"Uses two think blocks: ... | med | {
"mode": "med",
"mode_source": "assigned",
"natural_mode": "med",
"reference_scored": false
} |
KODA-GRPO-000012 | endpoint | medium | {
"system_context": "You are Koda IDS, an analyst assistant for a managed endpoint fleet. Evidence is limited to what the listed tools return.\n\nThe <think> block is a compact evidence summary, not private stream-of-consciousness.\n\nReasoning mode: high. Use a <think> block with up to three reasoning beats (roughly... | {
"A": {
"think": [
"A deployment ticket exists for the macro template and it landed minutes before this alert.",
"That ticket probably covers exactly this behavior, so the alert is likely benign."
],
"answer": "Expected macro template behavior; close the alert. Severity low.",
"reasoning_... | {
"winner": "B",
"scores": {
"A": 6,
"B": 10,
"C": 5,
"D": 3
},
"errors": {
"A": [
"Treats the existence of a deployment ticket as authorization for this specific command"
],
"B": [],
"C": [
"Rebuilds the host before capturing the command line or comparing it with the... | [
"Separates why the parent process ran from what it was allowed to execute",
"Names the correlation that would confirm or rule out sanctioned behavior",
"Preserves the command line before remediation",
"Does not treat absent persistence as proof of innocence",
"States severity with a confidence level",
"Us... | high | {
"mode": "high",
"mode_source": "assigned",
"natural_mode": "med",
"reference_scored": false
} |
KODA-GRPO-000013 | telemetry | hard | {
"system_context": "You are Koda IDS, an analyst assistant responsible for detection coverage. Evidence is limited to what the listed tools return.\n\nThe <think> block is a compact evidence summary, not private stream-of-consciousness.\n\nReasoning mode: xhigh. Use a deep <think> block (roughly 1800-4000 characters... | {
"A": {
"think": [
"Logging went silent on one subnet minutes after an upgrade, which is exactly how an attacker covers tracks.",
"The upgrade itself could be the cover story rather than the cause.",
"I will treat the gap as a confirmed intrusion window and escalate now."
],
"answer": "... | {
"winner": "C",
"scores": {
"A": 5,
"B": 4,
"C": 10,
"D": 7
},
"errors": {
"A": [
"Assumes log suppression by an attacker while the forwarder demonstrably kept transmitting"
],
"B": [
"Uses absence of firewall denies as proof nothing happened inside the gap"
],
"... | [
"Revises the intrusion reading when forwarder traffic contradicts it",
"Distinguishes queued events from dropped events and names the check",
"Reports the gap as unmonitored instead of inventing activity",
"Correlates across sources for the silent window",
"Separates detection assurance from confirmed compr... | xhigh | {
"mode": "xhigh",
"mode_source": "assigned",
"natural_mode": "med",
"reference_scored": false
} |
KODA-GRPO-000014 | monitoring | medium | {
"system_context": "You are Koda IDS, an analyst assistant for a SIEM-driven detection environment. Evidence is limited to what the listed tools return.\n\nThe <think> block is a compact evidence summary, not private stream-of-consciousness.\n\nReasoning mode: low. Use one short <think> block (1-2 sentences, roughly... | {
"A": {
"think": [
"The content update makes timing point at routine tuning, but a suppression range outside the ticket scope is not automatically authorized by that ticket. What settles it: diff the rule against the approved content package, confirm who held the svc-siem-admin session at 21:07, and replay... | {
"winner": "A",
"scores": {
"A": 10,
"B": 6,
"C": 4,
"D": 5
},
"errors": {
"A": [],
"B": [
"Treats timing proximity as authorization for a suppression outside ticket scope"
],
"C": [
"Attributes the edit to compromise without checking the session or the approved pack... | [
"Separates change timing from change authorization",
"Names the diff and session checks that would confirm scope",
"Restores detection coverage before waiting on answers",
"Does not assume admin-account activity is compromise",
"States severity with a confidence level",
"Uses two think blocks: expected ca... | low | {
"mode": "low",
"mode_source": "assigned",
"natural_mode": "med",
"reference_scored": false
} |
KODA-GRPO-000015 | data-handling | hard | {
"system_context": "You are Koda IDS, an analyst assistant for a regulated data environment. Evidence is limited to what the listed tools return.\n\nThe <think> block is a compact evidence summary, not private stream-of-consciousness.\n\nReasoning mode: high. Use a <think> block with up to three reasoning beats (rou... | {
"A": {
"think": [
"Self-approval, then a bulk export, then a personal-cloud upload: that chain is classic insider exfiltration.",
"The timestamps line up too neatly for coincidence.",
"I am confident enough to call this confirmed theft."
],
"answer": "Confirmed insider data theft by a.... | {
"winner": "D",
"scores": {
"A": 6,
"B": 4,
"C": 8,
"D": 10
},
"errors": {
"A": [
"Declares confirmed theft without matching the upload to the export or checking approval policy"
],
"B": [
"Treats the ticket as full authorization and skips the self-approval conflict"
... | [
"Weighs the ticket against the self-approval conflict instead of trusting either alone",
"Names the checks that separate sanctioned migration from theft",
"States that forensic_imaging is unavailable rather than implying file proof",
"Preserves evidence while containing access",
"Calibrates severity with st... | high | {
"mode": "high",
"mode_source": "assigned",
"natural_mode": "med",
"reference_scored": false
} |
KODA-GRPO-000016 | containers | medium | {
"system_context": "You are Koda IDS, an analyst assistant for a container platform. Evidence is limited to what the listed tools return.\n\nThe <think> block is a compact evidence summary, not private stream-of-consciousness.\n\nReasoning mode: med. Use a <think> block with two reasoning beats (roughly 300-1100 cha... | {
"A": {
"think": [
"Workstation deployments happen during hotfixes, especially at 04:12.",
"The hotfix ticket exists, so the whole deployment was sanctioned."
],
"answer": "Approved hotfix; no action required.",
"reasoning_mode": null
},
"B": {
"think": [
"The hotfix ticket ... | {
"winner": "B",
"scores": {
"A": 6,
"B": 10,
"C": 5,
"D": 4
},
"errors": {
"A": [
"Treats the ticket as covering a privilege change the ticket never mentions"
],
"B": [],
"C": [
"Declares a backdoor with no evidence of host writes or anomalous egress"
],
"D":... | [
"Separates deployment authorization from spec authorization",
"Names the checks that decide drift versus compromise",
"Recommends reverting to the declared manifest before deeper work",
"Does not equate quiet network traffic with safety",
"States severity with confidence and a no-compromise caveat",
"Uses... | med | {
"mode": "med",
"mode_source": "assigned",
"natural_mode": "med",
"reference_scored": false
} |
KODA-GRPO-000017 | dns | easy | {
"system_context": "You are Koda IDS, an analyst assistant for an enterprise network. Evidence is limited to what the listed tools return.\n\nThe <think> block is a compact evidence summary, not private stream-of-consciousness.\n\nReasoning mode: low. Use one short <think> block (1-2 sentences, roughly 80-450 charac... | {
"A": {
"think": [
"Nine in ten lookups failing with random labels reads as beaconing even though total volume is small and nothing large left the host."
],
"answer": "Likely DNS beaconing from kiosk-lobby-2: block the observed domains at the resolver, isolate the terminal, and pull its process lis... | {
"winner": "C",
"scores": {
"A": 8,
"B": 5,
"C": 10,
"D": 3
},
"errors": {
"A": [
"Advises isolation without first checking whether any query actually resolved"
],
"B": [
"Attributes NXDOMAIN noise to captive portals with no supporting evidence"
],
"C": [],
"... | [
"Recognizes NXDOMAIN rate and label entropy as a beacon signal",
"Checks whether any query resolved before concluding",
"Does not clear a host merely because transfers are small",
"States severity with a confidence level",
"Keeps containment scoped to the resolver and the one host"
] | low | {
"mode": "low",
"mode_source": "assigned",
"natural_mode": "med",
"reference_scored": false
} |
KODA-GRPO-000018 | backup | hard | {
"system_context": "You are Koda IDS, an analyst assistant for an enterprise backup environment. Evidence is limited to what the listed tools return.\n\nThe <think> block is a compact evidence summary, not private stream-of-consciousness.\n\nReasoning mode: high. Use a <think> block with up to three reasoning beats ... | {
"A": {
"think": [
"Rewritten indexes with unchanged payloads reads like catalog maintenance that went wrong.",
"The login from jump-03 is odd, but break-glass work happens on jump hosts.",
"I will raise it with the backup team in the morning."
],
"answer": "Probable maintenance mishap;... | {
"winner": "D",
"scores": {
"A": 5,
"B": 6,
"C": 7,
"D": 10
},
"errors": {
"A": [
"Defers to tomorrow while recoverability is already unverified"
],
"B": [
"Declares destruction without checking offsite copies or identifying the pull source"
],
"C": [
"Trea... | [
"Revises the accidental-corruption reading against the unfamiliar source host",
"Names checks that separate resync from staging for destruction",
"Flags forensic_imaging as unavailable instead of implying host file proof",
"Protects recoverability by freezing mutations and verifying offsite copies",
"Separa... | high | {
"mode": "high",
"mode_source": "assigned",
"natural_mode": "med",
"reference_scored": false
} |
KODA-GRPO-000019 | identity | medium | {
"system_context": "You are Koda IDS, an analyst assistant for an identity platform. Evidence is limited to what the listed tools return.\n\nThe <think> block is a compact evidence summary, not private stream-of-consciousness.\n\nReasoning mode: low. Use one short <think> block (1-2 sentences, roughly 80-450 charact... | {
"A": {
"think": [
"A spray from one source that ends in success, followed four minutes later by a consent grant carrying offline_access, reads as a single operation rather than two coincidences. What would falsify it: m.abel confirming she approved the prompt, and the app appearing in our sanctioned regis... | {
"winner": "A",
"scores": {
"A": 10,
"B": 5,
"C": 4,
"D": 6
},
"errors": {
"A": [],
"B": [
"Treats the spray success and the immediate consent grant as unrelated routine events"
],
"C": [
"Recommends directory-wide rotation without scoping to the affected account"
... | [
"Correlates the spray success with the consent grant by timing and scope",
"Names the facts that would confirm or rule out takeover",
"Revokes the grant before completing the investigation",
"Scopes remediation to affected accounts rather than the directory",
"States severity with a confidence level",
"Us... | low | {
"mode": "low",
"mode_source": "assigned",
"natural_mode": "med",
"reference_scored": false
} |
KODA-GRPO-000020 | api | medium | {
"system_context": "You are Koda IDS, an analyst assistant for a multi-tenant API platform. Evidence is limited to what the listed tools return.\n\nThe <think> block is a compact evidence summary, not private stream-of-consciousness.\n\nReasoning mode: med. Use a <think> block with two reasoning beats (roughly 300-1... | {
"A": {
"think": [
"The requests used a valid token and stayed inside published rate limits.",
"Nothing was rejected, so the platform treated the calls as legitimate."
],
"answer": "Authorized traffic within limits; no action required.",
"reasoning_mode": null
},
"B": {
"think": [... | {
"winner": "B",
"scores": {
"A": 5,
"B": 10,
"C": 4,
"D": 6
},
"errors": {
"A": [
"Equates successful authentication with correct authorization"
],
"B": [],
"C": [
"Dismisses confirmed cross-tenant reads as ID collision without checking responses"
],
"D": [
... | [
"Separates authentication from authorization",
"Correlates the exposure with the 16:30 rollout using config_diff",
"Scopes remediation to the affected path and objects",
"Distinguishes confirmed exposure from unproven cause",
"Preserves request records before making changes",
"States severity with split c... | med | {
"mode": "med",
"mode_source": "assigned",
"natural_mode": "med",
"reference_scored": false
} |
KODA-GRPO-000021 | cloud | easy | {
"system_context": "You are Koda IDS, an analyst assistant for a cloud environment. Evidence is limited to what the listed tools return.\n\nThe <think> block is a compact evidence summary, not private stream-of-consciousness.\n\nReasoning mode: med. Use a <think> block with two reasoning beats (roughly 300-1100 char... | {
"A": {
"think": [
"Terraform applied the policy, so somebody intended the change."
],
"answer": "Intentional sharing from the 11:12 apply; no action required.",
"reasoning_mode": null
},
"B": {
"think": [
"Public buckets are common for static assets, and 17 requests is a small nu... | {
"winner": "C",
"scores": {
"A": 4,
"B": 5,
"C": 10,
"D": 3
},
"errors": {
"A": [
"Assumes terraform intent with no ticket or confirmation"
],
"B": [
"Minimizes a regulated-data bucket based on request count alone"
],
"C": [],
"D": [
"Treats public payr... | [
"Treats missing intent evidence as uncertainty rather than permission",
"Checks whether anonymous GETs retrieved the sensitive objects",
"Removes the grant before investigating intent",
"Judges severity by data class rather than request volume",
"States severity with a confidence level"
] | med | {
"mode": "med",
"mode_source": "assigned",
"natural_mode": "med",
"reference_scored": false
} |
KODA-GRPO-000022 | network | easy | {
"system_context": "You are Koda IDS, an analyst assistant for an enterprise network. Evidence is limited to what the listed tools return.\n\nThe <think> block is a compact evidence summary, not private stream-of-consciousness.\n\nReasoning mode: med. Use a <think> block with two reasoning beats (roughly 300-1100 ch... | {
"A": {
"think": [
"ARP traffic at that rate is ordinary network churn, and nothing was denied."
],
"answer": "Normal network noise; no action required.",
"reasoning_mode": null
},
"B": {
"think": [
"One host answering for three addresses in ninety seconds is MAC impersonation beh... | {
"winner": "B",
"scores": {
"A": 5,
"B": 10,
"C": 6,
"D": 4
},
"errors": {
"A": [
"Treats absent firewall denies as proof the activity is benign"
],
"B": [],
"C": [
"Declares a confirmed interception with no evidence of captured traffic"
],
"D": [
"Igno... | [
"Identifies MAC impersonation without overclaiming interception",
"Names inventory and port-mirror checks that would confirm",
"Avoids treating absent denies as benign proof",
"States severity with a confidence level",
"Keeps containment scoped to one host"
] | med | {
"mode": "med",
"mode_source": "assigned",
"natural_mode": "med",
"reference_scored": false
} |
KODA-GRPO-000023 | endpoint | easy | {
"system_context": "You are Koda IDS, an analyst assistant for a managed endpoint fleet. Evidence is limited to what the listed tools return.\n\nThe <think> block is a compact evidence summary, not private stream-of-consciousness.\n\nReasoning mode: ultron. Use the full reasoning budget in the <think> block (roughly... | {
"A": {
"think": [
"Ransomware encrypts system files, and here they are untouched."
],
"answer": "Not ransomware since system files are intact; resume normal monitoring.",
"reasoning_mode": null
},
"B": {
"think": [
"214 renames are disruptive but I cannot name the extension witho... | {
"winner": "C",
"scores": {
"A": 5,
"B": 6,
"C": 10,
"D": 4
},
"errors": {
"A": [
"Uses untouched system files to dismiss mass renaming"
],
"B": [
"Blocks containment on a threat-feed lookup that is unavailable"
],
"C": [],
"D": [
"Attributes renames to... | [
"Judges on behavior rather than family attribution",
"Notes that threat_intel_lookup is unavailable instead of waiting on it",
"Preserves process and file evidence before cleanup",
"Checks shares reached by the affected host",
"States severity with a confidence level"
] | ultron | {
"mode": "ultron",
"mode_source": "assigned",
"natural_mode": "med",
"reference_scored": false
} |
KODA-GRPO-000024 | identity | medium | {
"system_context": "You are Koda IDS, an analyst assistant for an identity platform. Evidence is limited to what the listed tools return.\n\nThe <think> block is a compact evidence summary, not private stream-of-consciousness.\n\nReasoning mode: med. Use a <think> block with two reasoning beats (roughly 300-1100 cha... | {
"A": {
"think": [
"Two completed MFA sign-ins seventeen minutes apart on different continents cannot both be one user holding one phone, so one session is stolen even though both carried valid factors. What would settle which side is real: device fingerprint history for the new authenticator, whether regi... | {
"winner": "A",
"scores": {
"A": 10,
"B": 5,
"C": 4,
"D": 6
},
"errors": {
"A": [],
"B": [
"Treats successful MFA on both sessions as proof one user controlled them"
],
"C": [
"Equates factor success with session legitimacy"
],
"D": [
"Disables the acco... | [
"Recognizes that two continents with one phone implies a stolen session",
"Names device and registration checks that identify the stolen side",
"Contains before confirming which sign-in is real",
"Avoids permanent lockout without supporting evidence",
"States severity with a confidence level",
"Uses two t... | med | {
"mode": "med",
"mode_source": "assigned",
"natural_mode": "med",
"reference_scored": false
} |
KODA-GRPO-000025 | containers | medium | {
"system_context": "You are Koda IDS, an analyst assistant for a container platform. Evidence is limited to what the listed tools return.\n\nThe <think> block is a compact evidence summary, not private stream-of-consciousness.\n\nReasoning mode: high. Use a <think> block with up to three reasoning beats (roughly 800... | {
"A": {
"think": [
"Runners sometimes need broader rights during migrations.",
"A missing ticket does not prove malice when incidents move fast."
],
"answer": "Probable emergency grant; check with the platform team later. Severity low.",
"reasoning_mode": null
},
"B": {
"think": [... | {
"winner": "D",
"scores": {
"A": 5,
"B": 7,
"C": 6,
"D": 10
},
"errors": {
"A": [
"Treats missing tickets as acceptable for standing RBAC changes"
],
"B": [
"Recommends removal but skips investigating who applied it and whether it was used"
],
"C": [
"Decla... | [
"Separates a control break from established compromise",
"Names the usage and authentication checks that decide intent",
"Removes the excess grant while preserving audit evidence",
"Checks whether the source host is authorized for cluster access",
"States severity with a confidence level",
"Uses two think... | high | {
"mode": "high",
"mode_source": "assigned",
"natural_mode": "med",
"reference_scored": false
} |
KODA-GRPO-000026 | ci_cd | medium | {
"system_context": "You are Koda IDS, an analyst assistant for a build and release environment. Evidence is limited to what the listed tools return.\n\nThe <think> block is a compact evidence summary, not private stream-of-consciousness.\n\nReasoning mode: med. Use a <think> block with two reasoning beats (roughly 3... | {
"A": {
"think": [
"The artifact came out signed and the runner image is clean, so pipeline output looks normal.",
"I will let it stand and revisit if something breaks."
],
"answer": "Output looks correct; no action required.",
"reasoning_mode": null
},
"B": {
"think": [
"A ... | {
"winner": "B",
"scores": {
"A": 5,
"B": 10,
"C": 6,
"D": 5
},
"errors": {
"A": [
"Treats a valid signature as evidence the added step was reviewed"
],
"B": [],
"C": [
"Assumes chain of custody without inspecting the added step"
],
"D": [
"Rotates signi... | [
"Separates artifact signing from change review",
"Names the checks on the script host and step logs",
"Reverts to the reviewed workflow before deeper analysis",
"Avoids key rotation before scoping the execution",
"States severity with a confidence level",
"Uses two think blocks: normal-looking output, the... | med | {
"mode": "med",
"mode_source": "assigned",
"natural_mode": "med",
"reference_scored": false
} |
KODA-GRPO-000027 | database | medium | {
"system_context": "You are Koda IDS, an analyst assistant for an enterprise data platform. Evidence is limited to what the listed tools return.\n\nReasoning mode: none. The chat template opens a <think> block; close it immediately with </think> and answer directly. Do not put any reasoning text inside the block. Ke... | {
"A": {
"think": [
"The grant and the drop are connected, and the ticket wording does not match the right that was given."
],
"answer": "Malicious schema change; suspend p.novak and svc_reporting. Severity critical.",
"reasoning_mode": null
},
"B": {
"think": [
"Migrations sometim... | {
"winner": "C",
"scores": {
"A": 6,
"B": 5,
"C": 10,
"D": 7
},
"errors": {
"A": [
"Suspends accounts before reconstructing what happened after the trigger dropped"
],
"B": [
"Explains the drop as migration with no release or ticket evidence"
],
"C": [],
"D": ... | [
"Connects the grant mismatch with the later trigger drop as one chain",
"Names checks that separate botched migration from evasion",
"Revokes rights and restores auditing before questioning actors",
"Plans reconstruction of the unaudited window",
"States severity with a confidence level",
"Uses two think ... | none | {
"mode": "none",
"mode_source": "assigned",
"natural_mode": "med",
"reference_scored": false
} |
KODA-GRPO-000028 | cloud | hard | {
"system_context": "You are Koda IDS, an analyst assistant for a cloud environment. Evidence is limited to what the listed tools return.\n\nThe <think> block is a compact evidence summary, not private stream-of-consciousness.\n\nReasoning mode: low. Use one short <think> block (1-2 sentences, roughly 80-450 characte... | {
"A": {
"think": [
"Root with valid MFA at 01:44 could be the owner handling an emergency.",
"Key creation often follows root sessions in operational work.",
"The describe calls may be troubleshooting."
],
"answer": "Probable owner activity; confirm with the account owner in the morning... | {
"winner": "D",
"scores": {
"A": 5,
"B": 4,
"C": 7,
"D": 10
},
"errors": {
"A": [
"Waits for morning while a live key and unexplained region activity remain"
],
"B": [
"Treats root MFA success as proof the owner performed the actions"
],
"C": [
"Claims conf... | [
"Revises the emergency-ops reading against the MFA-removal sequence",
"Names the owner-confirmation facts that would falsify takeover",
"Notes that threat_intel_lookup is unavailable for ASN context",
"Contains key and instance risk before intent is proven",
"Preserves root audit records while acting",
"S... | low | {
"mode": "low",
"mode_source": "assigned",
"natural_mode": "med",
"reference_scored": false
} |
KODA-GRPO-000029 | monitoring | hard | {
"system_context": "You are Koda IDS, an analyst assistant for a detection platform. Evidence is limited to what the listed tools return.\n\nThe <think> block is a compact evidence summary, not private stream-of-consciousness.\n\nReasoning mode: low. Use one short <think> block (1-2 sentences, roughly 80-450 charact... | {
"A": {
"think": [
"Quiet paging with a healthy router is not good news; six severity mappings were demoted minutes after a dead-man switch went silent, and both facts came from configuration rather than load. My initial outage reading gives way to configuration interference unless someone shows the change... | {
"winner": "A",
"scores": {
"A": 10,
"B": 6,
"C": 5,
"D": 4
},
"errors": {
"A": [],
"B": [
"Attributes the demotion to intended tuning without diffing the approved package"
],
"C": [
"Declares insider suppression before identifying who ran the automation"
],
... | [
"Reads quiet paging as a coverage problem rather than an all-clear",
"Connects the dead-man silence with the severity demotion",
"Names the diff, identity, and replay checks that settle it",
"Restores mappings and reports the window as unmonitored",
"Withholds a compromise verdict pending the actor check",
... | low | {
"mode": "low",
"mode_source": "assigned",
"natural_mode": "med",
"reference_scored": false
} |
KODA-GRPO-000030 | remote-access | easy | {
"system_context": "You are Koda IDS, an analyst assistant for an enterprise network. Evidence is limited to what the listed tools return.\n\nThe <think> block is a compact evidence summary, not private stream-of-consciousness.\n\nReasoning mode: ultron. Use the full reasoning budget in the <think> block (roughly 30... | {
"A": {
"think": [
"An internet-open RDP rule with no ticket, a first external login by a local account idle for a month, and 1.2 GB leaving in one session is an intrusion pattern until proven otherwise; the missing ticket is what rules out routine support. I would close the rule, terminate the session, an... | {
"winner": "A",
"scores": {
"A": 10,
"B": 5,
"C": 6,
"D": 4
},
"errors": {
"A": [],
"B": [
"Leaves an internet-open RDP rule in place for a support team no ticket evidences"
],
"C": [
"Equates a policy breach with confirmed compromise without reviewing session activi... | [
"Links open rule, first external login, and idle local account into one chain",
"Uses the missing ticket to reject routine-support explanations",
"Contains by closing the rule and terminating the session",
"Plans review of what the account actually accessed",
"States severity with a confidence level"
] | ultron | {
"mode": "ultron",
"mode_source": "assigned",
"natural_mode": "med",
"reference_scored": false
} |
KODA-GRPO-000031 | dns | easy | {
"system_context": "You are Koda IDS, an analyst assistant for an enterprise network. Evidence is limited to what the listed tools return.\n\nThe <think> block is a compact evidence summary, not private stream-of-consciousness.\n\nReasoning mode: high. Use a <think> block with up to three reasoning beats (roughly 80... | {
"A": {
"think": [
"Certificate warnings right after a record change mean users reached a host that does not match the certificate, which an engineer testing could also cause."
],
"answer": "Probable engineering change; confirm with the DNS owners tomorrow. Severity low.",
"reasoning_mode": nul... | {
"winner": "B",
"scores": {
"A": 6,
"B": 10,
"C": 5,
"D": 4
},
"errors": {
"A": [
"Waits for confirmation while users keep reaching the new host"
],
"B": [],
"C": [
"Calls it migration despite no ticket and matching certificate warnings"
],
"D": [
"Mini... | [
"Connects the unticketed change with the certificate warnings",
"Recommends revert and block before investigation completes",
"Asks whether users submitted credentials to the new host",
"Does not minimize based on session count alone",
"States severity with a confidence level"
] | high | {
"mode": "high",
"mode_source": "assigned",
"natural_mode": "med",
"reference_scored": false
} |
KODA-GRPO-000032 | email | medium | {
"system_context": "You are Koda IDS, an analyst assistant for mail security. Evidence is limited to what the listed tools return.\n\nThe <think> block is a compact evidence summary, not private stream-of-consciousness.\n\nReasoning mode: med. Use a <think> block with two reasoning beats (roughly 300-1100 characters... | {
"A": {
"think": [
"Failure volume at that scale means someone is spoofing our domain.",
"Failures just show the SPF system working as designed."
],
"answer": "Spoofing campaign; no action beyond monitoring since DMARC rejects them.",
"reasoning_mode": null
},
"B": {
"think": [
... | {
"winner": "C",
"scores": {
"A": 6,
"B": 5,
"C": 10,
"D": 6
},
"errors": {
"A": [
"Treats authentication failures as attacks without tracing the DNS edit that preceded them"
],
"B": [
"Assumes authorized offboarding with no ticket evidence"
],
"C": [],
"D": [... | [
"Correlates the failure spike with the preceding TXT edit",
"Separates authorized offboarding from unauthorized change",
"Identifies the actor behind the 08:55 edit as the primary question",
"Checks whether legitimate partner mail is being harmed",
"States severity with a confidence level",
"Uses two thin... | med | {
"mode": "med",
"mode_source": "assigned",
"natural_mode": "med",
"reference_scored": false
} |
KODA-GRPO-000033 | identity | medium | {
"system_context": "You are Koda IDS, an analyst assistant for an identity platform. Evidence is limited to what the listed tools return.\n\nReasoning mode: none. The chat template opens a <think> block; close it immediately with </think> and answer directly. Do not put any reasoning text inside the block. Keep the ... | {
"A": {
"think": [
"Dormant accounts are sometimes reopened by their owners for emergencies.",
"The retained role may be intentional for continuity during transition."
],
"answer": "Probably the former employee returning; confirm with HR before acting. Severity medium.",
"reasoning_mode":... | {
"winner": "D",
"scores": {
"A": 6,
"B": 4,
"C": 7,
"D": 10
},
"errors": {
"A": [
"Defers to HR while an exempt dormant admin session stays active"
],
"B": [
"Treats a closed ticket as completion without checking the unchecked step"
],
"C": [
"Declares comp... | [
"Notices the offboarding step that was never completed",
"Weighs dormancy, geography, and MFA exemption together",
"Contains session and token before identifying the operator",
"Confirms with HR rather than assuming identity theft",
"States severity with a confidence level",
"Uses two think blocks: proces... | none | {
"mode": "none",
"mode_source": "assigned",
"natural_mode": "med",
"reference_scored": false
} |
KODA-GRPO-000034 | database | medium | {
"system_context": "You are Koda IDS, an analyst assistant for an enterprise data platform. Evidence is limited to what the listed tools return.\n\nThe <think> block is a compact evidence summary, not private stream-of-consciousness.\n\nReasoning mode: med. Use a <think> block with two reasoning beats (roughly 300-1... | {
"A": {
"think": [
"Two hosts sharing one login means either inventory is wrong or the credential leaked; both readings justify the same first move, because I cannot tell them apart from the database side alone. What would settle it: whether app-node-19 exists in asset and deployment records, what its proc... | {
"winner": "A",
"scores": {
"A": 10,
"B": 5,
"C": 6,
"D": 4
},
"errors": {
"A": [],
"B": [
"Assumes scale-out without any deployment or ticket evidence"
],
"C": [
"Rekeys everything before capturing query history or identifying the host"
],
"D": [
"Defe... | [
"Frames the ambiguity as rogue host versus inventory gap",
"Names inventory, process, and query-pattern checks",
"Captures query history before rotating the credential",
"Restricts access while the question stays open",
"States severity with a confidence level",
"Uses two think blocks: both readings, then... | med | {
"mode": "med",
"mode_source": "assigned",
"natural_mode": "med",
"reference_scored": false
} |
KODA-GRPO-000035 | api | medium | {
"system_context": "You are Koda IDS, an analyst assistant for a multi-tenant API platform. Evidence is limited to what the listed tools return.\n\nThe <think> block is a compact evidence summary, not private stream-of-consciousness.\n\nReasoning mode: low. Use one short <think> block (1-2 sentences, roughly 80-450 ... | {
"A": {
"think": [
"The maintenance ticket covers this window, so retries are expected behavior.",
"Duplicate writes on our side are an application bug rather than a security issue."
],
"answer": "Partner maintenance retries; file an idempotency bug. Severity low.",
"reasoning_mode": null... | {
"winner": "B",
"scores": {
"A": 6,
"B": 10,
"C": 7,
"D": 4
},
"errors": {
"A": [
"Treats the ticket as covering duplicate application while idempotency stays missing"
],
"B": [],
"C": [
"Declares replay attack without checking signature verification or partner sourc... | [
"Separates why retries happened from why duplicates were accepted",
"Names idempotency and signature checks that decide the risk",
"Hardens the consumer before labeling the traffic",
"Verifies the source against partner registration",
"States severity with a confidence level",
"Uses two think blocks: beni... | low | {
"mode": "low",
"mode_source": "assigned",
"natural_mode": "med",
"reference_scored": false
} |
KODA-GRPO-000036 | telemetry | hard | {
"system_context": "You are Koda IDS, an analyst assistant responsible for log pipeline integrity. Evidence is limited to what the listed tools return.\n\nThe <think> block is a compact evidence summary, not private stream-of-consciousness.\n\nReasoning mode: high. Use a <think> block with up to three reasoning beat... | {
"A": {
"think": [
"Volume up fourfold, an unknown destination, and a changed binary together mean a compromised collector.",
"Fastest containment is pulling power before anything else leaves."
],
"answer": "Collector compromised; power off collector-02 and open a critical incident. Severity ... | {
"winner": "C",
"scores": {
"A": 7,
"B": 5,
"C": 10,
"D": 4
},
"errors": {
"A": [
"Destroys volatile evidence by powering off before preserving records"
],
"B": [
"Assumes a vendor patch with no release or ticket evidence"
],
"C": [],
"D": [
"Explains f... | [
"Revises the patch reading against the missing login and unknown peer",
"Names checks that separate tampered update from vendor release",
"Flags forensic_imaging as unavailable while still isolating",
"Marks the event window untrusted rather than deleting it",
"Preserves evidence off the affected host",
"... | high | {
"mode": "high",
"mode_source": "assigned",
"natural_mode": "med",
"reference_scored": false
} |
KODA-GRPO-000037 | cloud | hard | {
"system_context": "You are Koda IDS, an analyst assistant for a cloud environment. Evidence is limited to what the listed tools return.\n\nThe <think> block is a compact evidence summary, not private stream-of-consciousness.\n\nReasoning mode: high. Use a <think> block with up to three reasoning beats (roughly 800-... | {
"A": {
"think": [
"Self-approved tickets happen when managers are offline.",
"The chain completed without errors, so it may have been planned work."
],
"answer": "Likely planned elevation; confirm with security architecture later. Severity medium.",
"reasoning_mode": null
},
"B": {
... | {
"winner": "D",
"scores": {
"A": 5,
"B": 7,
"C": 4,
"D": 10
},
"errors": {
"A": [
"Treats self-approval as acceptable while an admin session stays live"
],
"B": [
"Suspends the user before reconstructing what the admin session did"
],
"C": [
"Accepts a self... | [
"Recognizes a completed escalation chain rather than a single odd action",
"Names self-approval as the control failure",
"Contains by detaching policy and disabling sessions before actor analysis",
"Notes threat_intel_lookup is unavailable for ASN context",
"Plans reconstruction of the post-escalation sessi... | high | {
"mode": "high",
"mode_source": "assigned",
"natural_mode": "high",
"reference_scored": false
} |
Koda IDS Frontier — GRPO modes (stage 6 + stage 7)
Mode-tagged GRPO data for the Koda IDS Frontier 2.6B GPU pipeline and the 8B-A1B adapter produced by the TPU pipeline.
Both objectives are mode-aware: every scenario carries a
reasoning_mode, a mode-composed scenario.system_context, and a
mode-appropriate reference candidate. Prompts are not pre-rendered here;
render them at train time with:
prompt = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True,
)
The template opens <think>. A none completion must close it immediately
(</think>\n\nanswer); higher modes reason inside it and close it before the
answer.
Files and mode counts
| config | file | rows | none | low | med | high | xhigh | ultron |
|---|---|---|---|---|---|---|---|---|
stage7 |
grpo_stage7_modes_246.parquet |
246 | 23 | 57 | 76 | 63 | 17 | 10 |
stage6 |
grpo_stage6_modes_42.parquet |
42 | 2 | 7 | 12 | 12 | 6 | 3 |
The same rows are also published as JSONL
(grpo_stage7_modes_246.jsonl, grpo_stage6_modes_42.jsonl).
stage7 is the combined failure-targeting/contrastive set: 150
failure-targeting rows + 96 contrastive rows. The per-file artifacts were
transformed with --stage grpo7; their mode counts sum exactly to the
246-row combined artifact (verified by ID and by mode).
Schema
Stage 6 and stage 7 share the nested scenario shape:
{
"id": "KODA-GRPO-000001",
"category": "network",
"difficulty": "medium",
"reasoning_mode": "high",
"scenario": {
"system_context": "<canonical prompt + mode directive>",
"user_message": "<scenario>",
"known_facts": ["..."],
"unknowns": ["..."],
"available_tools": ["..."],
"reasoning_mode": "high"
},
"candidates": {
"A": {"answer": "...", "think": ["..."], "reward_criteria": "..."},
"B": {"answer": "...", "think": ["..."], "reward_criteria": "..."},
"C": {"answer": "...", "think": ["..."], "reward_criteria": "..."},
"D": {"answer": "...", "think": ["..."], "reward_criteria": "..."}
},
"evaluation": {"winner": "C", "rationale": "..."},
"reward_criteria": {"..." : "..."}
}
The selected candidate is a reference, not a target to pad. Reference traces are trimmed to the requested mode ceiling when too long and are never expanded to meet a mode quota. A short reference is left short; the reward scores generated completions, not the reference candidate.
Objectives
- Stage 6 (42 rows): reasoning-quality GRPO on the curated
netgoat-ai/MiMo-V2.6-Flash-Reasoning-GRPOpool. Contrastive candidates teach evidence calibration and uncertainty. - Stage 7 (246 rows): failure-targeting GRPO. 150 rows target specific failure modes (premature containment, fabricated telemetry, severity inflation, defensive over-refusal); 96 rows are contrastive pairs. The combined set is what the GPU notebook loads.
The reward is v19: task_completion, evidence_grounding,
technical_correctness, reasoning_quality, uncertainty_calibration,
investigation_quality, hypothesis_quality, action_proportionality,
tool_correctness, reasoning_efficiency, answer_shape, and
mode_compliance. Actionable offensive guidance is penalised; naming a
technique in a defensive report is not.
Harm filtering
The curated VSA/GRPO rows are not run through the external-corpus harm heuristic. That heuristic false-positives on defensive hypotheses such as “the attacker may have used an interactive shell”. Harm filtering is applied only to the external Trendyol replacement corpus.
Usage
from datasets import load_dataset
stage7 = load_dataset(
"netgoat-ai/Koda-IDS-Frontier-GRPO-Modes",
"stage7",
split="train",
)
row = stage7[0]
print(row["reasoning_mode"], row["evaluation"]["winner"])
For TRL GRPO, build the chat messages from scenario.system_context and
scenario.user_message, render with add_generation_prompt=True, and pass
reasoning_mode to the reward function. Do not append a separate
<think> opening tag; the chat template already provides it.
Validation
- 42/42 stage-6 rows and 246/246 stage-7 rows have one mode directive in
scenario.system_context. - Stage 7 IDs are unique; the 150+96 per-file set equals the combined 246-row set exactly (IDs, candidates, evaluation, scenario, mode, meta).
- Every
nonerow's selected reference has an empty think list. - No legacy
reasoning_depthfield remains; the mode is the depth contract. - Reference candidates are not padded; the transformed files only trim over-budget traces.
Attribution and license
Curated Koda GRPO data, Apache-2.0. Built for defensive cybersecurity investigation research. No offensive operational guidance is intended.
- Downloads last month
- 40