08Some descriptions stop mid-sentence. What is the 32,767 number?
Cloud's hard cap on the serialized ADF JSON length for a description or comment. Anything longer arrives cut at exactly that length — a detectable, exact signature.
Because the cut is at an exact length, it is detectable with certainty rather than heuristically: recover_truncated_content scans every Cloud issue and flags any description or comment whose JSON.stringify(body).length is exactly 32767. No guessing about whether a document "looks" truncated.
What it does with them
- 1Recovers the full text from the matching Data Center issue, using
expand=renderedFieldsto get HTML and keep rich-text fidelity. - 2Generates
.docxfiles:{KEY}_description.docxwhen the description was cut, and{KEY}_comment.docxcontaining all comments on that issue in chronological order when any comment was cut — so the reviewer reads full context, not a fragment. - 3Splits anything over 10 MB into
{KEY}_comment_1.docx,_2.docx, and so on. - 4In
--applymode, uploads each.docxas an attachment on the matching Cloud issue.
09My comments migrated but they are full of ";;;;" and "@unknown". Can that be repaired?
Yes, and both defects have a deterministic fix. mend_comments repairs comments in place; it touches comments only, never descriptions, never any other field.
The two defects
| Symptom | Cause | Fix |
|---|---|---|
Runs of ;;;; where DC has a single ; | Escape-doubling during migration | The DC comment body is the source of truth; Cloud runs are collapsed to match it exactly. |
@unknown where a mention used to be | DC [~username] mentions arrived as unresolved ADF mention nodes | Resolve by DC user email: GET /rest/api/2/user?username=… → email → Cloud /user/search?query=<email> → exact email match → accountId, then rewrite the ADF mention node. |
@<displayName> and logged, so the reader still sees who was meant while the log tells you exactly which accounts need attention.MEND_CREATOR_ACCOUNT_IDS — a comma-separated list of the Cloud accountIds whose created issues you want mended, which in practice means the migration service accounts. That keeps the tool off issues created by real users after the cutover.10Some issues lost comments entirely. How do I put them back without duplicating?
sync_issue_comments injects the missing DC comments and tags each one it creates with migration.dc_comment_id, so the next run skips it. Visibility is preserved per comment.
The tagging is what makes this safely re-runnable. Every comment the tool creates carries a property naming its DC origin, so a second run over the same JQL is a no-op rather than a duplication event — which matters, because the natural instinct after a partial failure is to run it again.
Visibility is preserved with the fidelity DC reports
- JSM internal/public
- The
sd.public.commentflag is carried across, so an internal note does not become customer-visible. - Classic role and group restrictions
- The
visibilityobject is preserved per comment.
11How are missing attachments matched and re-uploaded?
By filename plus byte size — precise enough not to re-upload a file that is already there, loose enough to survive the author and timestamp rewriting migration does.
Two phases
- 1Plan. Walk the Cloud JQL result set, read the DC and Cloud attachment lists for each issue, diff them, write a plan and a missing-attachments report. Read-only.
- 2Execute. Download each pending DC file to a temp path and
POST /rest/api/3/issue/{key}/attachments. Every row is re-checked live immediately before the upload, so a stale plan cannot duplicate a file.