Estimate: 45m · Type: code
Add an archived-item variant to the shipped DeleteWorkItemDialog (components/issues/actions/DeleteWorkItemDialog.tsx, 2.8.4) so deleting from the archived surfaces (list 2.9.5, detail 2.9.11) shows the right confirm. Reuse the same Modal (role="alertdialog", the 5.3.6 count grammar, the atomic-failure error state, the deletedToast) — a variant, NOT a new modal.
Two changes vs the active variant, per delete-confirm.mock.html panels 6-7 + design-notes.md §2.9.7:
onArchiveInstead) is meaningless once the item is already archived — hide it in the archived variant (make onArchiveInstead optional / variant-gated). NB the active dialog currently HARDCODES this callout + a required onArchiveInstead prop.liveDescendantCount + liveByKind: when liveDescendantCount > 0, render a peach/amber caution callout (--el-tint-peach bg + --el-warning border/icon + --el-text-strong, lucide triangle-alert, role="note") under the body and ABOVE the cascade dep-list — headline "Some of what's beneath this isn't archived." + body naming the live count + kind breakdown ("…also permanently removes N active work items that aren't archived — …. They're still live on your boards and lists. (Archiving an item never archives its children.)"). Drop the now-redundant "N descendants" dep-list row; keep history + links rows; button unchanged. When liveDescendantCount === 0, suppress the warning and show the calm all-archived row ("N descendants will also be deleted — …. All of them are already archived — nothing here is live on your boards."). An archived leaf reuses the leaf dialog unchanged.Gate with an archived?: boolean prop; the active path is byte-for-byte unchanged when false (default).
Copy (workItemActions namespace, messages/en.json + messages/zh.json — only en/zh ship): the warning headline/body + all-archived row from §2.9.7 "Copy strings". (Delete… / {key} deleted exist, reused.)
Design: delete-confirm.mock.html panels 6-7 + design-notes.md §2.9.7. Colour only via --el-* (peach = --el-tint-peach, the third distinct callout tone), shape via element-semantic tokens.
DeleteWorkItemDialog accepts an archived variant: Archive-instead gone; liveDescendantCount > 0 → peach warning (count + breakdown in words) with the redundant descendant row dropped; liveDescendantCount === 0 → calm all-archived row.en.json and zh.json.components/issues/actions/DeleteWorkItemDialog.tsx; components/issues/actions/workItemActionsClient.ts (fetchDeletePreview, deleteWorkItem)liveDescendantCount, liveByKind)messages/en.json, messages/zh.json (workItemActions)delete-confirm.mock.html panels 6-7, design-notes.md §2.9.7 ("Copy strings")