Not quite an off by one, think of the old days when a block blinking cursor was used in place of the I beam style cursor... the character immediately after the I beam would be blinking as the char to be replaced.
Code:
I-beam style cursor represented by the | char:
blah|</p>
versus old style blinking block character represented by []:
blah[<]/p>
both represent the exact same position.
But the days of the block flashing cursor are gone leading to changes is how positions in strings are thought about by the user.
But I can special case it for a future release.