Skip to content

Commit 1c2ce7d

Browse files
committed
visualize composite schema check
1 parent 44eee3e commit 1c2ce7d

1 file changed

Lines changed: 96 additions & 0 deletions

File tree

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
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

Comments
 (0)