Tangential gradient operator error: invalid ranks 1 and 1 in product

You need to use the outer projection for the tangential projection:

def tangential_proj(u, n):
    return (ufl.Identity(u.ufl_shape[0]) - ufl.outer(n, n)) * u
def sym_grad(u):
    return ufl.sym(ufl.grad(u))
def T(u, p):
    return 2 * mu * sym_grad(u) - p * ufl.Identity(u.ufl_shape[0])
g_tau = tangential_proj(T(u_ex, p0)*n, n)