Repository navigation
[UXD Spike] Confirmation dialogs for competency criteria edits and deletes #775
Description
This is a design spike. The deliverable is design artifacts and documented decisions, not working code.
User Story
As a course author or platform administrator, I want to be warned before I change or remove competency configuration, in order to understand what my change will and will not do to learners who have already been evaluated.
Delivery checklist
- Design the confirmation dialog shown on every edit of a
CompetencyCriteriaorCompetencyCriteriaGroup. Starting text to refine: "Change this rule? Changing this will only affect future evaluations of this competency. Learners who have already been evaluated against the current rule will keep their existing status." Buttons: Cancel / Save Changes. - Design the confirmation dialog shown on every delete of a
CompetencyCriteriaorCompetencyCriteriaGroup. Starting text to refine: "Delete this [criterion/group]? This action cannot be undone from this screen. Existing learner mastery statuses will not be affected." Buttons: Cancel / Delete. - Design the confirmation dialog shown when deleting an
ObjectTagassociation from the Competency Management page. Starting text to refine: "Delete this tag association? This action cannot be undone from this screen. Existing learner mastery statuses will not be affected." Buttons: Cancel / Delete. - Confirm all three read correctly for an author who does not know, and is not meant to know, whether the record will be archived or hard-deleted underneath.
- Specify responsive and small-screen behavior for each dialog.
- Specify accessible behavior for each: focus on open and on close, what a screen reader announces, keyboard dismissal, and which button takes initial focus.
- Update the Competency Criteria Figma file with all three dialogs and link it here.
- Document each resolved open question below as a decision with its rationale, in a form the implementation tickets can quote.
Description
Deleting or editing competency configuration on the Competency Management page happens immediately today, with no confirmation step at all. Underneath, a delete will soon either remove the record or archive it, depending on whether any learner has already been evaluated against it, and the author is deliberately not told which. One wording therefore has to be true in both cases.
#785 implements the edit dialog. The delete dialog for CompetencyCriteria/CompetencyCriteriaGroup is implemented by #709 and #710, which need updating to add it. #786 implements the ObjectTag association-delete dialog.
Context for the Designer
How the two outcomes differ underneath, and why the dialog cannot say which applies. When no learner has been evaluated against a record, deleting it removes it outright. Once any learner has a mastery status against it, deleting it hides it instead and keeps the row so learner statuses stay traceable. The author cannot tell which case they are in, and product decided they should not need to. So the wording can promise that existing learner statuses are unaffected, and that the action cannot be undone from this screen, without claiming the record is destroyed.
Edits behave differently from deletes. An edit never removes anything and never changes a learner's already-recorded status. Changes apply only to evaluations that happen afterwards. That is why the edit wording talks about future evaluations rather than about data loss.
The edit warning is unconditional, appearing on every criteria and group edit rather than only when learner statuses already exist. Product chose this so behavior is consistent rather than a dialog that appears unpredictably.
The edit dialog has no "do not show this again" option. Letting an author silence it after one click would recreate the same unpredictability product chose the unconditional warning to avoid. If this needs revisiting, it is a scope change for product to approve, not something the designer decides here.
Tag and Taxonomy edits get no warning at all. Renaming a tag or editing taxonomy metadata does not change how mastery is computed, so those flows are out of this spike.
Related tickets. #785 implements the edit dialog. The delete dialog for CompetencyCriteria/CompetencyCriteriaGroup is implemented by existing tickets #709 (group delete) and #710 (criterion delete), which currently delete with no confirmation step and need updating to match this spike. #786 implements the ObjectTag association-delete dialog.
Open Questions
- Should the delete wording differ between a
CompetencyCriteriaand aCompetencyCriteriaGroup? Deleting a group also removes every association inside it, which is materially more destructive, and the current single wording does not say so. Owner: designer, with the BA. - Is one shared dialog component right for all three, or should edit and delete look visibly different so an author does not confuse them? Owner: designer.
- Does the association-delete dialog need to name which competency and which content object the association joins, so an author deleting one of several can tell them apart? Owner: designer.
Metadata
Metadata
Assignees
Labels
Type
Projects
- StatusShow more project fieldsFinal Axim Review
- StatusShow more project fieldsNo status
Activity
[-][UXD Spike] The three confirmation dialogs for guardrails[/-][+][UXD Spike] Confirmation dialogs for competency criteria edits and deletes[/+]illiphilli commentedon Sep 30, 2026
@jmakowski1123 @thelmick-unicon: for this ticket I'm aligning the delete flow in Figma with #709/#710/#786 and the backend (#674/#675). Two things:
I'm also dropping the "can't delete the only rule/group" blocks in favor of #709/#710's behavior (the parent is removed too, with a placeholder fallback). The dialog will say when that's about to happen.
cc @AShatsila: please hold off on the rule-box trash and any disabled "can't delete" states in #709/#710 until this settles.
illiphilli commentedon Sep 30, 2026
@jmakowski1123 @thelmick-unicon: this follows up my comment above with the designs for this spike, plus a correction.
Figma (CBE Stories): Delete flow · Edit flow
Needs a decision
Open questions from this spike, answered
DeleteModal, which is Paragon'sAlertModal. Deletes get the red danger button, and edits get the blue primary "Save changes". Every title is a question that names what's changing.Delete: where it starts
Why a ⋮ menu:
IconButtonat Inline size (24px), to keep the nested rows light. Studio usessm(36px) in the tag list and the default (44px) in the course outline, if we'd rather match one of those.Delete: the dialogs
DeleteModal. There's no type-to-confirm. Studio reserves that for deleting a whole taxonomy, whereas here learner statuses survive, and removing content is a routine correction ([FE] Manage & Apply Competencies: delete a Competency Criteria Association #710).Edit: adding the Save step that #785 needs to intercept
#785 points out that there's no save step to intercept, because both edit controls apply as soon as they change. The designs add one:
When a delete or save fails
The dialog stays open with a danger Alert at the top, and the button can be pressed again to retry.
SaveErrorAlertin the taxonomy table.Ticket updates this needs
#833, and a correction to my comment above. I said no ticket covers deleting a rule box, but #833 does. A rule box isn't a record of its own: its score is stored on each criterion, and #672 draws one box for the criteria in a group that share a score. So deleting a box means deleting each criterion in it. There are two ways to do that:
If #833 stays, the design adds a third ⋮ on the rule box with "Delete rule", and a dialog that gives the count.
#786's scope paragraph needs updating if #833 stays. Suggested replacement:
#786 would also need a matching acceptance criterion: "Deleting a whole rule box shows the confirmation too."
#786's Figma link points at the sidebar frame ("2 Competencies applied to…"), but no ticket builds the sidebar. Could it point at the chip-removal dialog instead?
#785: the acceptance criterion that the author's unsaved edits are still on screen after Cancel holds for the score popover. It doesn't hold for the any/all dropdown, where Cancel restores the old value.
#709 and #710 error handling: both say to follow #672's error pattern, which is a toast. For failures inside a confirmation dialog, they should use the in-dialog Alert described above instead.
#709 and #710 Figma links: no change needed. The frames they link to now show the revised designs: #709 (group menu), #710 (chip ✕ entry points).
CC: @mgwozdz-unicon
illiphilli commentedon Oct 1, 2026
@jmakowski1123 @thelmick-unicon: a friction idea for the edit confirmation (#785). Most rule setup happens before a course starts, when no learner can have been evaluated, so the "only affects future evaluations" warning is noise there. Open edX knows each course run's start date (#669 already filters on it). Could we skip the edit confirmation for courses that haven't started, and show it once they have? We'd label each course block with its start date ("Starts Jan 6" / "Started Aug 15"), so authors can see why one course asks and another doesn't. Delete confirmations would stay on every delete. Caveat: beta testers and staff test submissions can create learner data before the start date.
mgwozdz-unicon commentedon Oct 5, 2026
fyi - The intention for #833 is for it to call #674's endpoint for each criterion in the group. If we wanted to remove some scope, we could delete this ticket, though it is part of the current sprint.
@thelmick-unicon and @illiphilli fyi - #775 is intended to only impact tickets in Epic 10 (#723 ). I'm not sure if all of the tickets Phil listed that "need updating" are in Epic 10 or if some of them are in Epic 5, but the intention is to leave Epic 5 alone and add these dialogs as part of Epic 10.
@illiphilli I think it would be scope creep to only show the edit confirmation for courses that have already started.
illiphilli commentedon Oct 8, 2026
@mgwozdz-unicon thanks, that clears things up. Here's the updated plan with your points and last week's sync folded in.
Start-date gating: dropped. The edit confirmation shows on every edit, as #785 says now.
Ticket updates are limited to Epic 10 (#723). In my 9/30 list, #709, #710 and #833 are in Epic 5 (#721), so I'm withdrawing those suggestions. Only #785 and #786 are left:
#833: one #674 call per criterion. Understood. #833 already says what to do if that partly fails: tell the author some of the box's content couldn't be removed, and show exactly what's stored. So the design needs no other change. Per the 10/7 sync, I'm adding a ⋮ menu to the rule box with a remove option, plus its dialog with the criteria count. I'll link it from #833 when it's done.
One question: at the 10/7 sync we agreed to swap the trash icons for ⋮ menus, but those trash icons come from Epic 5 tickets (#709, #833). Should those two tickets switch to ⋮ now? Or should Epic 5 ship the trash icons and #786 swap them for menus when it adds the dialogs? The first means less rework, but it changes Epic 5. Your call.
Wording: the sync settled on "Remove" across the interface, so I'm changing the "Delete group" and "Delete rule" labels and dialog buttons in Figma to "Remove". @jmakowski1123, this also answers my 9/30 Remove vs Delete question, and #709 already covers course-level groups, so I don't need anything else from you here.
mgwozdz-unicon commentedon Oct 8, 2026
@illiphilli Let's ship Epic 5 with the three dots because I think that will be a small change and easy switch. Could you please help get the screenshots updated in the impacted tickets?
illiphilli commentedon Oct 8, 2026
@mgwozdz-unicon done. The ⋮ is now part of the components in Figma, so every frame shows it at all three levels: course, group and rule box. Here's what changes in each Epic 5 ticket:
#709 (remove course and rule groups)
#833 (remove a rule box)
#710 (remove a criteria association)
#670 (course search/view)
Wording: every label and button now says "Remove", per the 10/7 sync.
Accessible names for the ⋮ button: "More actions for this group", "More actions for this rule", and "More actions for [course name]".