Skip to content

gds_software.verification

Verification engine -- union dispatch across all software diagram types.

Run verification checks on any software architecture model.

Dispatches to the appropriate domain checks based on model type, then optionally compiles to SystemIR and runs GDS generic checks.

Source code in packages/gds-software/gds_software/verification/engine.py
def verify(
    model: Any,
    domain_checks: list[Callable[..., list[Finding]]] | None = None,
    include_gds_checks: bool = True,
) -> VerificationReport:
    """Run verification checks on any software architecture model.

    Dispatches to the appropriate domain checks based on model type,
    then optionally compiles to SystemIR and runs GDS generic checks.
    """
    from gds_software.c4.checks import ALL_C4_CHECKS
    from gds_software.c4.model import C4Model
    from gds_software.component.checks import ALL_CP_CHECKS
    from gds_software.component.model import ComponentModel
    from gds_software.dependency.checks import ALL_DG_CHECKS
    from gds_software.dependency.model import DependencyModel
    from gds_software.dfd.checks import ALL_DFD_CHECKS
    from gds_software.dfd.model import DFDModel
    from gds_software.erd.checks import ALL_ER_CHECKS
    from gds_software.erd.model import ERDModel
    from gds_software.statemachine.checks import ALL_SM_CHECKS
    from gds_software.statemachine.model import StateMachineModel

    # Dispatch to appropriate checks
    if domain_checks is not None:
        checks = domain_checks
    elif isinstance(model, DFDModel):
        checks = ALL_DFD_CHECKS
    elif isinstance(model, StateMachineModel):
        checks = ALL_SM_CHECKS
    elif isinstance(model, ComponentModel):
        checks = ALL_CP_CHECKS
    elif isinstance(model, C4Model):
        checks = ALL_C4_CHECKS
    elif isinstance(model, ERDModel):
        checks = ALL_ER_CHECKS
    elif isinstance(model, DependencyModel):
        checks = ALL_DG_CHECKS
    else:
        raise TypeError(f"Unknown model type: {type(model).__name__}")

    findings: list[Finding] = []

    # Phase 1: Domain checks on model
    for check_fn in checks:
        findings.extend(check_fn(model))

    # Phase 2: GDS generic checks on compiled SystemIR
    if include_gds_checks:
        from gds.verification.engine import ALL_CHECKS as GDS_ALL_CHECKS

        system_ir = model.compile_system()
        for gds_check in GDS_ALL_CHECKS:
            findings.extend(gds_check(system_ir))

    return VerificationReport(system_name=model.name, findings=findings)