the reason frac does this is due to the continuous nature of UVs.
think of UVs like a continuous field of values, going 0->1->2->N, and interpolating the values in between.
“zoom in” and you’d see something like 0->0.25->0.5->0.75->1.0->1.25. zoom in closer to 1.0 and you’d see something like 0.98->0.99->1.0->1.1
now the moment you do frac you’re actually making it do 0.98->0.99->0.0->0.1, which means that in the span from 0.999999 to 0.0 due to its continuous nature it has to wrap around back and interpolate all values from 0.999999 back down to zero, which happens in the span of a single pixel.
what you see in the artifact area is a UV warping artifact. the entire texture is warp-squashed into a single pixel
I’m sure someone can find a more eloquent way to explain it but in [not so] short that’s the reason UV’s can’t just have cuts or jumps. and it doesn’t matter if you use frac, ceil, round, floor, if, etc. anything that causes a hard discontinuity in the field of values will cause a single-pixel UV warping artifact, similar to how using lerp on UVs will cause a UV warping artifact (just on a larger area)
a common workaround is to use the Derivative mipvalue mode. simply plug DDX and DDY nodes to your UVs and plug them to the derivative inputs of the texture sampler