At its core, Darwinium decisioning answers a fundamental question: "Should we allow, challenge, or reject this event?"
Decisioning Components
- Features: Real-time variables that provide context by analyzing historical behavior. Defined in
<name>.feature.yamlfiles Features Overview - Rules: Binary conditions that generate signals when specific risk patterns are detected. Defined in
<name>.rulesfiles Rules and Signals - Decision Strategy: The final arbiter that determines the ultimate disposition. Defined in
<name>.strategyfiles. Can only be one per step. Decision Strategy

The decisioning components are added to Workflows of Steps within Darwinium journey.
Key Architectural Principles
- Event-Driven: Every decision is made in the context of a specific event with full historical context
- Parallel Execution: All features and rules run simultaneously for maximum performance
- Centralized Decision: The
strategy.yamlfile acts as the "CEO," making the final call - Git-Based Workflow: All policy changes are version-controlled and deployed through Git
1. Features: The Memory of the System
Features, defined in *.feature.yaml files, are numeric values computed from historical event data that provide real-time context about user behavior. They answer questions like:
- "How many times has this device logged in during the past hour?"
- "How many unique devices has this account used in the past 30 days?"
- "How long has it been since this IP address was first seen?"
Example Feature Types
| Feature Type | Purpose | Example |
|---|---|---|
| Velocity | Counts events for a specific identifier | Login attempts per device in 1 hour |
| Distinct Count | Counts unique items associated with an identifier | Number of devices per account |
| Time Since First/Last | Measures time elapsed since an event | Milliseconds since account creation |
| Statistic of Numeric | Computes statistical measures | Average transaction amount |
Example: Different emails used to log in to from this device

# File: example.feature.yaml
features:
- name: count_emails_for_dvcid_90days
default_value: -1
with_scope: same_node_instance
time_window:
days: 90
starting: immediately
find_the:
distinct_count_of:
attributes:
- identity['ACCOUNT'].email['PERSONAL'].email
for_events:
event_type:
- account_login_success
include_current_event: true
with_the_same:
- profiling.device.identifier
2. Rules: The Pattern Detectors
Rules, defined in *.rules files, are binary (yes/no) conditions that generate signals when specific risk patterns are detected. They use features, apply conditions to profiling data, and threshold model score outputs to classify suspicious behavior.
Rule Components
| Component | Description | Example |
|---|---|---|
| Rule Name | Becomes the signal name when rule fires | HIGH_LOGIN_VELOCITY |
| Condition | Boolean logic that triggers the rule | payment.amount > 100 |
| Category | Groups related signals for easier decisioning | ACCOUNT_TAKEOVER_RISK |
| Score | Numeric value added to ruleset model score | -50 |
| Remediations | Automated actions (add labels, set attributes) | Add label: account_takeover |
Referencing Features in Rules
Features can be referenced in rules using either of these syntax:
outcome[CHAMPION].features.general['myfeaturename']
feature('myfeaturename')
Example:

# File: example.rules
rules:
- type: condition
signal: MULTIPLE_EMAIL_SAME_DEVICE
condition: feature('count_emails_for_dvcid_90days') >= 2
category: ACCOUNT_TAKEOVER_RISK
score: -250
3. Decision Strategy: The Final Say
The *.strategy file is a special rule set that runs last and determines the final disposition of an event. It has access to all features, signals, categories, and scores generated by other Workflows. The output from the strategy is found in attribute group outcome[CHAMPION].decision_strategy.*. In particular outcome[CHAMPION].decision_strategy.result
Critical Behaviors:
- Terminate Flag: When enabled, this sets the final result / disposition and stops further evaluation.
- Priority Matters: The order of terminate rules defines your decision hierarchy
- Incidents: Incidents can be raised within the strategy
Example

# example.strategy.yaml
version: 2
checksum: 4+1DEFAULTuuoYfxCbTkCA==
decision_type: decisionOutcome
rules:
- type: condition
condition: has(outcome[CHAMPION].models.signal_categories, 'REJECT')
signal: REJECT_RULE
remediations:
- type: terminate
disposition: reject
- type: condition
condition: has(outcome[CHAMPION].models.signal_categories, 'CHALLENGE')
signal: CHALLENGE_RULE
remediations:
- type: terminate
disposition: challenge
- type: condition
condition: 'True'
signal: DEFAULT
comment: Default allow rule. Always true
remediations:
- type: terminate
disposition: pass
Available Result
| Result | Description | Typical Use Case |
|---|---|---|
| Pass | Event is trusted and allowed | Normal user behavior |
| Challenge | Require additional verification | Step-up authentication, MFA |
| Alert | Flag for monitoring but allow | Low-risk anomalies |
| Reject | Block the event | High-confidence fraud |
| Review | Queue for manual review | Medium-risk cases requiring human judgment |
Git-Based Workflow
All policy changes follow a Git-based deployment workflow to ensure version control, collaboration, and safe deployments. Git is an industry standard for version control and change management.
Deployment Process Steps
- Pull: Synchronize your local repository with the remote main branch
- Edit: Modify policy files in the Workflows pane
- Stage: Select which changes you want to include in your next commit
- Commit: Save changes locally with a descriptive message
- Sync (Push): Push changes to the remote repository
- Build: Automatic compilation and deployment triggers
- Deploy: Pushes (makes live) the compiled step & decisioning configuration to the target

Prevention Tools
- Rule Editor v2: Prevents saving rules with invalid syntax
- Terminal Command: Run
dwn_journey_checkerbefore committing to validate syntax - Deployments Log: Check for detailed error messages and file paths when builds fail
Investigations
The Investigations tab provides a complete view of how Darwinium processed an event:
Investigations
- Features Evaluated: All custom features and their computed values
- Features Darwinium: System-generated features from profiling
- Signals and Scores: Which rules fired, their individual scores, and categories
- Final Disposition: The ultimate decision made by the strategy
- Full Event Context: All data available at decision time
Best Practices
Feature Design
- Specify a time window
- Useful to set default values to
-1to distinguish from legitimate zero counts - Try to primarily filter by event_type for fastest execution, rather than a condition
- At least one identifier must be specified in a with_the_same pivot. Use approximate features when the attribute is not an identifier.
Rule Design
- Use categories to group similar rules
- Provide meaningful rule names that describe the risk
- Include score values that reflect risk severity
- Use automated actions (eg. add labels, attributes) to avoid manual effort
Deployment Workflow
- Always pull before editing, to avoid needing to resolve merge conflicts later
- Write descriptive commit messages
- (optional) Run
dwn_journey_checkerbefore committing - Monitor the Deployments log after pushing
Glossary
| Term | Definition |
|---|---|
| Attribute | A data point from an event (e.g., email address, IP address) |
| Category | A grouping of related signals for simplified decisioning |
| Decision Strategy | The final rule set that determines event disposition |
| Result (or Disposition) | The final outcome: Pass, Challenge, Alert, Reject, or Review |
| Feature | A computed numeric value based on historical event analysis |
| Identifier | A unique attribute used to track entities (e.g., device_id, customer_token). Important attribute type as can be used on their own in features |
| Pivot | The primary identifier used to aggregate data in features |
| Rule | A binary condition that generates a signal when true |
| Signal | The name of a rule that has fired |
| Rule Score | A numeric value assigned by rules, summed for total event risk |
| Model Score | A numeric value, either as a result of summed rule scores or output from ML model |
| Subject | A secondary attribute type in Darwinium's hierarchy. They can be included in feature pivots provided alongside an identifier |
| Terminate | A flag that stops strategy evaluation and sets final disposition |
| Velocity | A count of events within a time window |
| Workflow | The Git repository containing all policy files |