Unfortunately this is a limitation of Builder right now - it can’t figure out from code whether it should be non-slip or relative, so it defaults to relative timing. Although the timing is still fixed and known before-hand, builder doesn’t realize this. In general we recommend that people time by frames whenever precision is required, which is almost always, so it’s not a bad thing to do. And since standard displays are 60Hz, it’s usually straightforward - just use 16 and 2/3ms for the frame duration and calculate frames/times from that.
The trade-off between relative and non-slip timing has to do with whether you care more about getting the exact timing of stimuli or the exact total run-length to be correct. Relative timing is better for psychophysics/vision research as the exact number of frames for a stimulus are displayed, but there are possibly a few frames of “setup” timing that can extend the total length of the experiment. Non-slip timing ensures that the total duration will be set exactly, but can cut trials/stimuli a few frames short to make sure that the total duration will be constant, which is important if you need to stay in sync with scanner TRs / reps.
We were planning to add a non-slip max time for a routine during our code sprint last week, but didn’t get to it. If people are interested in that feature we could bump up its priority, and it could realistically show up in the next release. Unfortunately the last time we discussed it was quite some time ago on our development list here: https://groups.google.com/forum/#!topic/psychopy-dev/C7Lp1GSk974 ), but it’s on the list of features that will hopefully be added soon.
In lieu of a fix in builder itself, you could write your experiment in coder, or switch out relative timing for non-slip timing in the script that gets compiled from builder. Hopefully we’ll get a fixed pushed up relatively shortly, though!
Hope you can hold out, or adjust your script manually. When we incorporate the changes I'll post an update to the question to let you know.