Table of Contents

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.