Follow-up to #631 (shipped in #641). Two cases can leave objects under a retired prefix while the rotate response still says `rotated: true`:
- an upload/promotion in flight during the sweep lands under the old prefix after it was listed (docs say re-run; the response doesn't hint at it)
- the `MAX_LIST_PAGES` ceiling (50 pages) stops the sweep silently on very large prefixes
Add an `incomplete: true` (or `remaining`/`resyncFailed` counts) field so operators know to re-run, and have the CLI print the nudge. The resumable retired-id sweep already makes a re-run drain leftovers, so this is purely a reporting gap.
Follow-up to #631 (shipped in #641). Two cases can leave objects under a retired prefix while the rotate response still says `rotated: true`:
Add an `incomplete: true` (or `remaining`/`resyncFailed` counts) field so operators know to re-run, and have the CLI print the nudge. The resumable retired-id sweep already makes a re-run drain leftovers, so this is purely a reporting gap.