I checked level.c since it seems to be the best source.
line 292 (last line of terrain_fence):
c_updatehull(terrain,0); // adjust normal collision hull
my above mentioned problem (no hull update on chunk borders) is an A7 only phenomenon (since at my workplace I can use only A7 free), maybe caused by using ent_status(terrain,0) and not ent_status(terrain,1) for determining vertex quantity (results are 161*161 and 165*165 respectively if chunk size is 32 i.e. 5*5 chunks). but I don't know how to manage the duplicated vertices of chunk border edges... in A8 hull is updated properly by c_updatehull.
for fixing normals you can use simply c_trace, which sets hit.nx/y/z (or normal.x/y/z) and you can store it to c.v.nx/z/y. but it is not too fast at all, especially if you do not trace only the vertices, but all the neighouring faces and calculate an average of them. moreover, as I know if you want to get the same shading as produced by fixnormals or MED, there are 160 default normal vectors used for approximating real normals.