|
| 1 | +# Composite Schema Check Business Logic Breakdown |
| 2 | + |
| 3 | +```mermaid |
| 4 | +flowchart TD |
| 5 | + Start([CompositeModel.check]) --> Prepare["Build incoming service schema<br/>swap into latest schemas<br/>sort schemas<br/>collect contract names"] |
| 6 | +
|
| 7 | + Prepare --> Checksums["Run checksum checks in parallel"] |
| 8 | + Checksums --> BaselineChecksum{"Baseline SDL provided?"} |
| 9 | + BaselineChecksum -- No --> SkipBaselineChecksum["Skip baseline checksum"] |
| 10 | + BaselineChecksum -- Yes --> RunBaselineChecksum["Check baseline vs head checksum<br/>including contract names"] |
| 11 | +
|
| 12 | + Checksums --> RegistryChecksum["Check registry vs head checksum<br/>including contract names"] |
| 13 | +
|
| 14 | + SkipBaselineChecksum --> FullSkip |
| 15 | + RunBaselineChecksum --> FullSkip |
| 16 | + RegistryChecksum --> FullSkip |
| 17 | +
|
| 18 | + FullSkip{"Registry matches head<br/>AND baseline absent or matches head?"} |
| 19 | + FullSkip -- Yes --> StateSkip["SKIP<br/>No composition, diff, policy,<br/>or contract checks"] |
| 20 | + FullSkip -- No --> ContractInput["Build contract composition inputs"] |
| 21 | +
|
| 22 | + ContractInput --> HasBaseline{"Baseline provided?"} |
| 23 | + HasBaseline -- No --> NoBaselineComposition["Skip baseline composition"] |
| 24 | + HasBaseline -- Yes --> BaselineMatches{"Baseline matches head?"} |
| 25 | +
|
| 26 | + %% This reflects the current implementation in composite.ts. |
| 27 | + BaselineMatches -- No --> SkipBaselineComposition["Skip baseline composition<br/>as currently implemented"] |
| 28 | + BaselineMatches -- Yes --> StartBaselineComposition["Start baseline composition<br/>result is later replaced by head composition"] |
| 29 | +
|
| 30 | + NoBaselineComposition --> HeadComposition |
| 31 | + SkipBaselineComposition --> HeadComposition |
| 32 | + StartBaselineComposition --> HeadComposition |
| 33 | +
|
| 34 | + HeadComposition["Run head composition<br/>including contract compositions"] --> SelectBaselineState["Select baseline composition state:<br/>head result when baseline matches head;<br/>otherwise composed baseline result"] |
| 35 | +
|
| 36 | + SelectBaselineState --> CompositionFailure{"Baseline or head<br/>composition failed?"} |
| 37 | +
|
| 38 | + CompositionFailure -- Yes --> EarlyFailure["FAILURE"] |
| 39 | + EarlyFailure --> EarlyFailureState["State:<br/>baselineComposition = success, failure, or null<br/>composition = success or failure<br/>schemaChanges = null<br/>schemaPolicy = null<br/>contracts = null"] |
| 40 | + EarlyFailureState --> EarlySkipped["Skipped:<br/>main graph diff<br/>policy check<br/>contract diff checks"] |
| 41 | +
|
| 42 | + CompositionFailure -- No --> ExistingSDL{"Baseline composition<br/>state available?"} |
| 43 | + ExistingSDL -- Yes --> UseBaselineSDL["Use baseline composition SDL<br/>for the main diff"] |
| 44 | + ExistingSDL -- No --> RetrieveSDL["Retrieve latest composable SDL<br/>for the main diff"] |
| 45 | +
|
| 46 | + UseBaselineSDL --> ParallelChecks |
| 47 | + RetrieveSDL --> ParallelChecks |
| 48 | +
|
| 49 | + ParallelChecks["Run checks in parallel"] --> MainDiff["Main graph diff check<br/>breaking and dangerous changes<br/>approved changes<br/>affected deployments"] |
| 50 | + ParallelChecks --> PolicyCheck["Schema policy check"] |
| 51 | + ParallelChecks --> ContractChecks["Contract checks"] |
| 52 | +
|
| 53 | + ContractChecks --> ContractData{"Contracts and composition<br/>results available?"} |
| 54 | + ContractData -- No --> NoContractChecks["Skip contract checks<br/>contracts = null"] |
| 55 | + ContractData -- Yes --> EachContract["For each contract"] |
| 56 | +
|
| 57 | + EachContract --> ContractComposition{"Head contract composition failed<br/>OR baseline contract composition failed?"} |
| 58 | + ContractComposition -- Yes --> ContractCompositionFailure["Contract state: unsuccessful<br/>composition = success or failure<br/>schemaChanges = null<br/>contract diff skipped"] |
| 59 | +
|
| 60 | + ContractComposition -- No --> ContractDiffChoice{"Baseline matches head?"} |
| 61 | + ContractDiffChoice -- Yes --> SkipContractDiff["Skip contract diff<br/>schemaChanges = null"] |
| 62 | + ContractDiffChoice -- No --> ContractDiff["Run contract diff check"] |
| 63 | +
|
| 64 | + ContractDiff --> ContractDiffFailed{"Contract diff failed?"} |
| 65 | + ContractDiffFailed -- Yes --> ContractDiffFailure["Contract state: unsuccessful<br/>composition = success<br/>schemaChanges = failure reason"] |
| 66 | + ContractDiffFailed -- No --> ContractSuccess["Contract state: successful<br/>composition = success<br/>schemaChanges = diff result"] |
| 67 | +
|
| 68 | + SkipContractDiff --> ContractSuccess |
| 69 | +
|
| 70 | + MainDiff --> FinalDecision |
| 71 | + PolicyCheck --> FinalDecision |
| 72 | + NoContractChecks --> FinalDecision |
| 73 | + ContractCompositionFailure --> FinalDecision |
| 74 | + ContractDiffFailure --> FinalDecision |
| 75 | + ContractSuccess --> FinalDecision |
| 76 | +
|
| 77 | + FinalDecision{"Main diff failed<br/>OR policy failed<br/>OR any contract unsuccessful?"} |
| 78 | +
|
| 79 | + FinalDecision -- Yes --> StateFailure["FAILURE"] |
| 80 | + StateFailure --> FailureState["State:<br/>baselineComposition = success or null<br/>composition = success<br/>schemaChanges = result or failure reason<br/>schemaPolicy = result or failure reason<br/>contracts = success and failure states"] |
| 81 | +
|
| 82 | + FinalDecision -- No --> StateSuccess["SUCCESS"] |
| 83 | + StateSuccess --> SuccessState["State:<br/>baselineComposition = success or null<br/>composition = success<br/>schemaChanges = result or null when skipped<br/>schemaPolicy = result<br/>contracts = successful states or null"] |
| 84 | +
|
| 85 | + classDef check fill:#dbeafe,stroke:#2563eb,color:#172554 |
| 86 | + classDef skipped fill:#f3f4f6,stroke:#6b7280,color:#374151,stroke-dasharray:5 5 |
| 87 | + classDef success fill:#dcfce7,stroke:#16a34a,color:#14532d |
| 88 | + classDef failure fill:#fee2e2,stroke:#dc2626,color:#7f1d1d |
| 89 | + classDef warning fill:#fef3c7,stroke:#d97706,color:#78350f |
| 90 | +
|
| 91 | + class RunBaselineChecksum,RegistryChecksum,HeadComposition,StartBaselineComposition,MainDiff,PolicyCheck,ContractDiff check |
| 92 | + class StateSkip,SkipBaselineChecksum,SkipBaselineComposition,NoBaselineComposition,SkipContractDiff,NoContractChecks,EarlySkipped skipped |
| 93 | + class StateSuccess,SuccessState,ContractSuccess success |
| 94 | + class EarlyFailure,EarlyFailureState,StateFailure,FailureState,ContractCompositionFailure,ContractDiffFailure failure |
| 95 | + class SelectBaselineState warning |
| 96 | +``` |
0 commit comments