Architecture overview
Universal Data Generator is one engine with many faces. The Core library does all the work, and four thin hosts call into it. This page covers the components, the data flow of a run, and the deployment topology.
Components
graph TD
subgraph Hosts
PS[PowerShell module]
FN[Azure Functions]
WF[WinForms client]
FT[Foundry agent tool]
end
subgraph Core["UniDataGen.Core"]
ORCH[Generation Orchestrator]
SCHED[Scheduling and Boost Engine]
VALGEN[Value Coordinator]
end
CFG[UniDataGen.Configuration]
AB[UniDataGen.Abstractions]
FOUND[UniDataGen.Generation.Foundry]
TGT[UniDataGen.Targets]
OBS[UniDataGen.Observability]
PS --> ORCH
FN --> ORCH
WF --> ORCH
FT --> ORCH
ORCH --> SCHED
ORCH --> VALGEN
ORCH --> CFG
VALGEN --> AB
FOUND -. implements .-> AB
TGT -. implements .-> AB
VALGEN --> FOUND
ORCH --> TGT
PS --> OBS
FN --> OBS
WF --> OBS
FT --> OBS
| Project | Responsibility |
|---|---|
UniDataGen.Abstractions |
The profile and catalog model, the interfaces, and the generated-data types. No dependencies. |
UniDataGen.Core |
Scheduling, boost math, accrual, batch cadence, the orchestrator, and the value coordinator. |
UniDataGen.Configuration |
The embedded JSON catalog store, the run-config loader, and the validator. |
UniDataGen.Generation.Foundry |
The IValueProvider backed by Azure AI Foundry. |
UniDataGen.Targets |
The ISink factory and the target adapters. |
UniDataGen.Observability |
Application Insights logging helpers. |
Data flow of a run
sequenceDiagram
participant Host
participant Orchestrator
participant Scheduler as Scheduling and Boost
participant Coordinator as Value Coordinator
participant Foundry
participant Sink
Host->>Orchestrator: RunAsync(config)
Orchestrator->>Sink: OpenAsync
loop each tick or batch fire
Orchestrator->>Scheduler: effective multiplier at time
Scheduler-->>Orchestrator: owed counts
Orchestrator->>Coordinator: BuildAsync(owed counts)
Coordinator->>Foundry: GenerateAsync(semantic fields)
Foundry-->>Coordinator: values
Coordinator-->>Orchestrator: EntityBatch
Orchestrator->>Sink: WriteAsync(batch)
end
The scheduling and boost engine is pure: it has no I/O, so it is unit-tested to the exact record. The value coordinator splits each record into engine-stamped system fields (keys, audit stamps, state) and provider-supplied semantic fields. See ADR-0005.
Deployment topology
graph LR
CAT[(Embedded JSON catalog)] --> CFG[Configuration]
RC[(run-config.json)] --> CFG
CFG --> CORE[UniDataGen.Core]
CORE --> FND[(Azure AI Foundry)]
CORE --> SINKS[(Targets: ADLS, Event Hubs, ...)]
CORE --> AI[(Application Insights)]
Design decisions
The substantive decisions are recorded as ADRs in decisions/. Start with ADR-0001 for the framework choice and ADR-0002 through ADR-0004 for the scheduling behavior.