Japanese eras are not all the same length; consequently, the behavior I'd expect from the following snippet is not what actually occurs.
(Current date: Jul 23, 20 Heisei)
Expected date: Jul 23, 15 Taishō
Actual result date: Jul 23, 6 Shōwa
In other words, the year is interpreted as "20 Taishō", which doesn't exist, and it rolls over to 6 Shōwa. (Japanese eras are one-based, but don't necessarily start on January 1st.) The behavior of ucal_roll is the same.
This is inconsistent with the behavior for handling months and days of months; going back a month from March 30 gives February 28, not March 2.
As a note, adding a "pinField(UCAL_YEAR, status);" to Calendar::add does not fix the problem, since the date's components are updated using the GregorianCalendar implementation before the maximum year is retrieved.
A separate problem is how the month and day components are pinned. Are they pinned ''with'' the year:
or ''after'' the year has been pinned:
or even affecting the year itself to preserve the month/day:
? (This is probably a resolution order problem.)