OpenGL task/mesh shader extension NV_mesh_shader not behaving as I expected
I managed to figure it out. A coworker told me that I was misinterpreting the documentation.
layout(max_vertices=3, max_primitives=1) out;
actually means max_vertices and max_primitives per workgroup, not per shader invocation. So I was always only outputting a single triangle, regardless of what I set local_size_x to.

Changing the values to proper numbers resulted in a proper rendering.