static type inference pass [ci skip]