I noticed a small inconsistency between the atom ordering described in protein.py and the actual ordering in residue_constants.py.
In protein.py:
# Cartesian coordinates of atoms in angstroms. The atom types correspond to
# residue_constants.atom_types, i.e. the first three are N, CA, CB.
atom_positions: np.ndarray # [num_res, num_atom_type, 3]
But in residue_constants.py:
atom_types = [
"N",
"CA",
"C",
"CB",
...
so CB is the 4th item in the atom_types array, not the third.
Fix would just be to change the comment from N, CA, CB to N, CA, C.