Skip to content

Commit a5f09a7

Browse files
authored
Merge pull request #19 from StrategyLogic/dev
Refactor strategic actor simulation and improve scenario validation
2 parents dff447a + a53998f commit a5f09a7

52 files changed

Lines changed: 2972 additions & 677 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
**The Strategic Reasoning Engine.**
44

5-
[![Pylint](https://github.com/StrategyLogic/omen/actions/workflows/pylint.yml/badge.svg)](https://github.com/StrategyLogic/omen/actions/workflows/pylint.yml) [![Package](https://github.com/StrategyLogic/omen/actions/workflows/python-package.yml/badge.svg)](https://github.com/StrategyLogic/omen/actions/workflows/python-package.yml)
5+
[![Pylint](https://github.com/StrategyLogic/omen/actions/workflows/pylint.yml/badge.svg)](https://github.com/StrategyLogic/omen/actions/workflows/pylint.yml) [![Package](https://github.com/StrategyLogic/omen/actions/workflows/python-package.yml/badge.svg)](https://github.com/StrategyLogic/omen/actions/workflows/python-package.yml) ![](https://img.shields.io/pypi/l/omenai?timestamp=20260406) ![](https://img.shields.io/pepy/dt/omenai) ![](https://img.shields.io/pypi/v/omenai?label=%20) ![](https://img.shields.io/github/stars/StrategyLogic/omen?style=social)
66

77
> **Simulate the Signs. Reveal the Chaos.**
88

README.zh.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
**开源战略推演引擎。**
44

5-
[![Pylint](https://github.com/StrategyLogic/omen/actions/workflows/pylint.yml/badge.svg)](https://github.com/StrategyLogic/omen/actions/workflows/pylint.yml) [![Package](https://github.com/StrategyLogic/omen/actions/workflows/python-package.yml/badge.svg)](https://github.com/StrategyLogic/omen/actions/workflows/python-package.yml)
5+
[![Pylint](https://github.com/StrategyLogic/omen/actions/workflows/pylint.yml/badge.svg)](https://github.com/StrategyLogic/omen/actions/workflows/pylint.yml) [![Package](https://github.com/StrategyLogic/omen/actions/workflows/python-package.yml/badge.svg)](https://github.com/StrategyLogic/omen/actions/workflows/python-package.yml) ![](https://img.shields.io/pypi/l/omenai?timestamp=20260406) ![](https://img.shields.io/pepy/dt/omenai) ![](https://img.shields.io/pypi/v/omenai?label=%20) ![](https://img.shields.io/github/stars/StrategyLogic/omen?style=social)
66

77
> 模拟征兆,揭示混沌。
88

cases/situations/sap_reltio_acquisition.md

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,31 @@
11
# Situation Case: SAP looking to pull more external data into its AI platform with Reltio acquisition
22
- Source URL: https://www.theregister.com/2026/03/30/sap_reltio/
3-
- Capture Date: 2026-04-05
3+
- Capture Date: 2026-04-06
44
- Event Date: Mon 30 Mar 2026
55

66
**Context:** SAP is acquiring master data management and data integration specialist Reltio to help integrate data from outside SAP's application portfolio into its AI platform. The move is positioned to boost adoption of SAP's Business Data Cloud (BDC), a service launched in February 2025 in alliance with Databricks.
77

88
## The Story
9-
SAP announces its acquisition of Reltio, a master data management specialist, positioning it as a way to integrate external data into SAP's AI platform and boost its Business Data Cloud. The article details Reltio's technology and customer base, then contrasts the acquisition with SAP's prior BDC strategy, which faced low awareness and customer difficulties. Analysts frame the Reltio move as an expansion of SAP's data integration focus from sharing SAP data externally to also harmonizing non-SAP data for use within SAP.
9+
SAP announces its acquisition of Reltio, a master data management firm, positioning it as a way to integrate non-SAP data into its AI platform and boost its Business Data Cloud service. The article notes SAP's previous struggles with BDC adoption, citing user group research showing low familiarity. Analysts frame the acquisition as an extension of SAP's earlier strategy shift with BDC, moving from sharing SAP data externally to also harmonizing external data for use within SAP. A consultant highlights a critical finding from user research about customers stuck in mid-migration paying for unusable systems, noting this line 'is going to haunt SAP's sales deck for a while.'
1010

1111
### 1. Core Facts (The Facts)
1212
- SAP is to acquire master data management and data integration specialist Reltio.
13-
- The acquisition aims to help integrate data from outside SAP's application portfolio into its AI platform.
13+
- The acquisition aims to help integrate data from outside SAP's broad application portfolio into its AI platform.
1414
- The move may be aimed at boosting adoption of SAP's Business Data Cloud (BDC).
1515
- BDC was launched in February 2025 in an alliance with data lake and AI platform vendor Databricks.
16-
- Reltio was founded in 2011 and aimed to create a 'cloud-native' approach to data integration and MDM.
17-
- In 2024, Reltio migrated its underlying database from a self-managed instance of Cassandra to Spanner on Google Cloud.
16+
- Reltio uses an AI-based entity resolution system to find and merge related records into a 'golden record'.
17+
- SAP expects to use Reltio's system to integrate data across SAP and non-SAP applications.
1818
- Reltio customers include Pfizer, Radisson, and Warner Bros.
19-
- SAP expects to use Reltio's AI-based entity resolution system to integrate data across SAP and non-SAP applications.
19+
- Reltio migrated its underlying database from Cassandra to Spanner on Google Cloud in 2024.
2020

2121
### 2. Existing Data and Research Findings (Non-opinion)
22-
- Research from DSAG in December found that 83 percent of its members were only slightly familiar with BDC or not familiar with it at all.
22+
- In December, research from DSAG found that 83 percent of its members were only slightly familiar with BDC or not familiar with it at all.
2323
- DSAG found that BDC customers stuck mid-migration end up paying full cloud fees for a system they cannot use.
2424

2525
### 3. Raw Context
2626
- SAP argues the move will help make BDC 'fully interoperable' with other stores of enterprise data to support the development of AI agents by cleansing and harmonizing data.
27-
- Reltio uses an AI-based entity resolution system to find and merge related records from different formats and applications into a 'golden record' of data about customers, products, suppliers, locations, and employees.
28-
- SAP has ERP, HR, CRM, supply chain, and procurement systems.
27+
- BDC was set up to build 'insight apps' that use analytics tools and AI models connected to real-time data from applications.
28+
- Reltio aimed to create a 'cloud-native' approach to data integration and MDM.
2929
- SAP has so far struggled to grab users' attention with BDC.
3030

3131
### 4. Direct Quotes (Speaker / Role)
@@ -37,7 +37,7 @@ SAP announces its acquisition of Reltio, a master data management specialist, po
3737
- SAP has so far struggled to grab users' attention with BDC.
3838
- 83 percent of DSAG members were only slightly familiar with BDC or not familiar with it at all.
3939
- BDC customers stuck mid-migration end up paying full cloud fees for a system they cannot use.
40-
- The DSAG finding about mid-migration fees 'is going to haunt SAP's sales deck for a while.'
40+
- The finding about customers paying for unusable systems is noted as a line that 'is going to haunt SAP's sales deck for a while.'
4141

4242
### 6. Unknowns / Open Questions
4343
- Whether the move will successfully boost adoption of SAP's Business Data Cloud.
@@ -46,7 +46,7 @@ SAP announces its acquisition of Reltio, a master data management specialist, po
4646
4747
> SAP has so far struggled to grab users' attention with BDC. In December, research from DSAG, the German-speaking user group, found that 83 percent of its members were only slightly familiar with BDC or not familiar with it at all.
4848
49-
> While BDC was mainly about sharing SAP data externally, the Reltio move is about harmonizing data from non-SAP systems and sharing it with SAP, he said. Binoy James, SVP applications at SAP consultancy Protera, noted DSAG had found that BDC customers stuck mid-migration end up paying full cloud fees for a system they cannot use. 'That line is going to haunt SAP's sales deck for a while,' he said.
49+
> Binoy James, SVP applications at SAP consultancy Protera, noted DSAG had found that BDC customers stuck mid-migration end up paying full cloud fees for a system they cannot use. 'That line is going to haunt SAP's sales deck for a while,' he said.
5050
5151
---
5252

config/prompts/base.yaml

Lines changed: 64 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -250,15 +250,66 @@ prompts:
250250
- version must be '0.1.0'
251251
- id must equal provided situation_id
252252
- context must preserve all provided context fields
253-
- signals must be non-empty
254-
- uncertainty_space.overall_confidence must be in [0,1]
255-
- uncertainty_space.assumptions_explicit should include assumption objects with:
256-
target_unknown, assumption_text, quality_score (0..1), coverage_type
257-
- assumptions_explicit should map to known_unknowns when possible
253+
254+
=== SIGNAL EXTRACTION RULES (CRITICAL) ===
255+
256+
A "signal" is an independent environmental factor, NOT a restatement of the subject's actions or status.
257+
258+
Independence Test (must pass for every signal):
259+
- If the subject (e.g., SAP) disappeared tomorrow, would this factor still exist?
260+
- If YES → it's a signal. If NO → it's context or event, not a signal.
261+
262+
Examples of what signals ARE:
263+
- "Enterprise AI procurement shifting from model-first to data-first" (market trend)
264+
- "AI-native MDM replacing traditional MDM" (tech evolution)
265+
- "Customer tolerance for 'pay-during-migration' fees decreasing" (market sentiment shift)
266+
267+
Examples of what signals ARE NOT:
268+
- "SAP's BDC has low customer awareness" (subject's product status → put in context)
269+
- "SAP acquired Reltio" (subject's action → put in events)
270+
- "Analyst said X about SAP" (commentary on subject → not independent)
271+
272+
signals_template_json is a schema contract, not a prompt to summarize.
273+
274+
Each signal must include:
275+
- id: unique identifier (e.g., sig_tech_001, sig_market_002)
276+
- name: concise, factor-focused (not subject-focused)
277+
- domain: one of [tech, market, capital, standard, policy]
278+
- strength: numeric in [0,1] (confidence that this signal is real and impactful)
279+
- direction: one of [up, down, mixed] (direction of the signal's trend)
280+
- mapped_targets: array of objects, each with:
281+
- space: [TechSpace, MarketSpace]
282+
- element_key: string (what this signal affects)
283+
- impact_type: [driver, constraint, amplifier, dampener]
284+
- impact_strength: numeric in [0,1]
285+
- mechanism_conditions: object with impact_type-required fields:
286+
- driver: activation_condition, expected_effect
287+
- constraint: binding_condition, release_condition
288+
- amplifier/dampener: modulation_target, modulation_condition, modulation_factor
289+
- cascade_rules: array of {trigger_condition, next_signal_id, expected_lag} OR provide no_cascade_reason
290+
- market_constraints: array of {constraint_key, binding_strength in [0,1]}
291+
- evidence_basis: brief note on what evidence supports this signal (not the subject's response to it)
292+
293+
Signal Quantity: Prefer 3 to 7 high-quality, independent signals over many weak summary bullets.
294+
Signal Independence: Two signals that describe the same underlying factor from different angles should be merged.
295+
296+
=== CONTEXT PRESERVATION ===
297+
- context.current_state: describe subject's situation, NOT signals
298+
- context.known_unknowns: what subject doesn't know about the signals
299+
- signals: what is happening in the environment, independent of subject
300+
301+
=== UNCERTAINTY SPACE ===
302+
- overall_confidence: numeric in [0,1] (confidence in the situation assessment)
303+
- assumptions_explicit: array of {target_unknown, assumption_text, quality_score, coverage_type}
304+
- assumptions should map to known_unknowns when possible
305+
306+
=== OUTPUT ===
307+
Return ONLY valid JSON object matching the structure defined in signals_template_json.
258308
259309
situation_id: [[situation_id]]
260310
source_path: [[source_path]]
261311
context_json: [[context_json]]
312+
signals_template_json: [[signals_template_json]]
262313
263314
source_document:
264315
[[source_text]]
@@ -269,13 +320,18 @@ prompts:
269320
270321
Scenario requirements:
271322
- Must include exactly A, B, C each once
272-
- A intent: Aggressive/Alternative challenger, optimistic positive-signal assumptions
273-
- B intent: Baseline/Conservative maintainer, linear extrapolation from current state
274-
- C intent: Collapse/Contingency extreme-risk, negative-signal breakout
323+
- A intent: Offense (Breakthrough action), proactive rule-changing and asymmetric advantage capture
324+
- B intent: Defense (Protective action), survival and compliance under hard external constraints
325+
- C intent: Confrontation action, direct rivalry under rule-bounded resource competition
275326
- each scenario must include goal, target, objective, variables, constraints, tradeoff_pressure, resistance_assumptions, modeling_notes
327+
- constraints and tradeoff_pressure must reflect constraint-network and rival-network pressure when present
328+
- planning_template_json is a rule template input; do not treat it as a prompt
329+
- raw_prior_scores should be provided as array with A/B/C scenario_key and score values when available
276330
277331
pack_id: [[pack_id]]
278332
pack_version: [[pack_version]]
333+
planning_template_json: [[planning_template_json]]
334+
planning_query_json: [[planning_query_json]]
279335
situation_artifact_json: [[situation_artifact_json]]
280336
281337
situation_source_to_case_prompt: |

config/templates/planning.yaml

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
template_id: scenario_planning_template
2+
template_version: 0.1.0
3+
required_query_fields:
4+
- situation_id
5+
- actor_ref
6+
- space_inputs
7+
- constraint_signals
8+
- similarity_scores
9+
slot_policy:
10+
- scenario_key: A
11+
label: Offense
12+
intent: Breakthrough action, proactive rule-changing and asymmetric advantage capture
13+
default_prior: 0.4
14+
- scenario_key: B
15+
label: Defense
16+
intent: Protective action, survival and compliance under hard external constraints
17+
default_prior: 0.35
18+
- scenario_key: C
19+
label: Confrontation
20+
intent: Confrontation action, direct rivalry under rule-bounded resource competition
21+
default_prior: 0.25
22+
prompt_contract:
23+
objective: Keep deterministic A/B/C planning with stable priors
24+
notes:
25+
- This file is a planning rule template, not an LLM prompt.
26+
- Use it to constrain planning slots and prior defaults.
27+
output_keys:
28+
- pack_id
29+
- pack_version
30+
- derived_from_situation_id
31+
- ontology_version
32+
- scenarios
33+
- raw_prior_scores

config/templates/signals.yaml

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
template_id: situation_signals_v0_1_0
2+
template_version: 0.1.0
3+
description: Minimal mechanism-bearing signal schema for Situation_v0_1_0 artifacts.
4+
domain_values:
5+
- tech
6+
- market
7+
- capital
8+
- standard
9+
- policy
10+
direction_values:
11+
- up
12+
- down
13+
- mixed
14+
impact_types:
15+
- driver
16+
- constraint
17+
- amplifier
18+
- dampener
19+
expected_lag_values:
20+
- short
21+
- medium
22+
- long
23+
space_values:
24+
- TechSpace
25+
- MarketSpace
26+
signal_schema:
27+
required_fields:
28+
- id
29+
- name
30+
- domain
31+
- strength
32+
- direction
33+
- mapped_targets
34+
- cascade_rules
35+
- market_constraints
36+
- mechanism_note
37+
defaults:
38+
domain: market
39+
strength: 0.5
40+
impact_strength: 0.5
41+
direction_by_impact_type:
42+
driver: up
43+
constraint: down
44+
amplifier: up
45+
dampener: down
46+
market_binding_strength: 0.6
47+
expected_lag: medium
48+
mapped_target_space: MarketSpace
49+
no_cascade_reason: direct local effect in current horizon
50+
mapped_target_shape:
51+
required_fields:
52+
- space
53+
- element_key
54+
- impact_type
55+
- impact_strength
56+
- mechanism_conditions
57+
mechanism_conditions_shape:
58+
required_by_impact_type:
59+
driver:
60+
- activation_condition
61+
- expected_effect
62+
constraint:
63+
- binding_condition
64+
- release_condition
65+
- expected_effect
66+
amplifier:
67+
- modulation_target
68+
- modulation_condition
69+
- modulation_factor
70+
- expected_effect
71+
dampener:
72+
- modulation_target
73+
- modulation_condition
74+
- modulation_factor
75+
- expected_effect
76+
cascade_rule_shape:
77+
required_fields:
78+
- trigger_condition
79+
- next_signal_id
80+
- expected_lag
81+
market_constraint_shape:
82+
required_fields:
83+
- constraint_key
84+
- binding_strength
85+
authoring_rules:
86+
- Every signal must encode a mechanism, not a summary headline.
87+
- strength and impact_strength must be numeric values in [0,1].
88+
- direction must be one of up, down, mixed.
89+
- mapped_targets must use space plus element_key and classify impact_type as driver, constraint, amplifier, or dampener.
90+
- mapped_targets.mechanism_conditions must satisfy required fields by impact_type.
91+
- cascade_rules must include trigger_condition, next_signal_id, and expected_lag unless no_cascade_reason is provided.
92+
- constraints impact_type must link at least one market_constraints.constraint_key.
93+
- market_constraints must capture explicit external frictions or gating conditions and binding_strength in [0,1].
94+
- mechanism_note should explain why the signal matters to scenario planning.
95+
fallbacks:
96+
activation_condition: Active under the current situation context and source-grounded constraints.
97+
binding_condition: Constraint binds when external pressure dominates internal optionality.
98+
release_condition: Constraint relaxes when ecosystem leverage or policy pressure shifts.
99+
modulation_condition: Modulation appears when adjacent adoption and coordination signals move together.
100+
expected_effect: Moves the mapped target trajectory in the declared direction.
101+
modulation_target: primary_driver
102+
cascade_trigger: If the signal intensifies in the next planning window.
103+
market_constraint: Current market adoption and coordination frictions remain binding.
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
{
2+
"artifact_type": "situation_generation_trace",
3+
"situation_id": "nokia-elop-2010",
4+
"situation_artifact_path": "data/scenarios/nokia_v1/nokia-elop-2010_situation.json",
5+
"source_path": "cases/situations/nokia-elop-2010.md",
6+
"pack_id": "nokia_v1",
7+
"pack_version": "1.0.0",
8+
"generated_at": "2026-04-06T16:45:04.903200",
9+
"validation_passed": true,
10+
"validation_issues": [],
11+
"confidence": {
12+
"confidence_risk": 0.4,
13+
"confidence_overall": 0.6,
14+
"overall_confidence": 0.6,
15+
"coverage_ratio": 0.7125,
16+
"guardrail_applied": false
17+
},
18+
"metrics": {
19+
"known_unknowns_count": 4,
20+
"assumptions_filled_count": 4,
21+
"assumptions_quality_avg": 0.7125,
22+
"cognitive_coverage": 0.7125,
23+
"confidence_delta_cap": 0.5
24+
},
25+
"assumptions_explicit": [
26+
{
27+
"target_unknown": "The extent and nature of structural conflict between incumbent and transition teams.",
28+
"assumption_text": "Internal organizational conflict is significant and will create substantial friction during any strategic pivot.",
29+
"quality_score": 0.7,
30+
"coverage_type": "partial"
31+
},
32+
{
33+
"target_unknown": "The full impact of resource reallocation drag across platform programs.",
34+
"assumption_text": "Dividing resources between Symbian and MeeGo is causing execution delays and quality issues in both programs.",
35+
"quality_score": 0.8,
36+
"coverage_type": "high"
37+
},
38+
{
39+
"target_unknown": "The degree of cultural mismatch between historical operating model and new execution cadence.",
40+
"assumption_text": "Nokia's traditional hardware-focused, long-cycle development culture is incompatible with the rapid software iteration required for modern smartphone competition.",
41+
"quality_score": 0.75,
42+
"coverage_type": "high"
43+
},
44+
{
45+
"target_unknown": "The specific veto-node risk in key governance and partnership decisions.",
46+
"assumption_text": "Key stakeholders within Nokia's governance structure could block or significantly delay critical partnership decisions needed for platform strategy.",
47+
"quality_score": 0.6,
48+
"coverage_type": "partial"
49+
}
50+
]
51+
}

0 commit comments

Comments
 (0)