I’ve spent two hours on this issue and here’s my insight:
canvas size (width, height) should be in pixel, integer, and most importantly EVEN NUMBER
canvas position (x, y values) should be in pixel and integer
all of above apply for shapes too
For precision, move shapes by their xy values instead of snapping
no gap
another route:
create shapes
manually move each shape so that they overlap by 1 px
no gap
Outline precision be damned
tl;dr
you can get rid of the gap but at what cost? Time? Precision? Ugliness (add a same colour background to disguise the gap)?
Everyday I doubt the reliability of affinity products in a professional setting and yet I still work with them. Guess the frustration is just part of the process.