- Shipped
- September 2, 2026 at 2:51 AM UTC
- Author
- Kamo
- Commit
- fa979f8
A status label had no way to be removed. The settings screen saved through an upsert-only bulk write, so the only thing a request could say was "this status is called X" — never "this status has no custom name any more". The cleared box dropped out of the payload, the stored row survived untouched, and the response put the old label straight back in the box the org had just emptied. syncLabels replaces bulkUpsertLabels and reads the list as the org's whole set rather than a patch: a status arriving blank and a status not arriving at all both mean the label is gone, and both delete the row so the status resolves back to its system wording. An empty list clears everything the org has. upsertLabel now refuses a blank label outright. CUSTOM_LABEL is NOT NULL and every screen falls back to the default only when no row exists, so a row holding an empty string would render a blank status everywhere instead of the default — worse than the bug being fixed. Removal is a delete, never an empty write.