I reviewed the srfi-19.scm reference implementation again, and I'm now sure that the nanoseconds field must be non-negative. tm:add-duration and tm:subtract-duration make sure to keep it non-negative, and time=?, time<?, etc. won't be correct if both negative and non-negative were allowed (because although times would be logically equal their fields won't).
I reviewed the srfi-19.scm reference implementation again, and I'm now sure that the nanoseconds field must be non-negative. tm:add-duration and tm:subtract- duration make sure to keep it non-negative, and time=?, time<?, etc. won't be correct if both negative and non-negative were allowed (because although times would be logically equal their fields won't).