diff --git a/.jules/palette.md b/.jules/palette.md
index d892e2f9..ed7f6bc2 100644
--- a/.jules/palette.md
+++ b/.jules/palette.md
@@ -54,3 +54,6 @@
## 2024-07-13 - [Table Node Accessibility]
**Learning:** Adding `aria-hidden="true"` inside `abbr` elements with `aria-label` prevents screen readers from redundantly announcing short abbreviations like "PK" or "NN" along with their full label.
**Action:** When creating short, domain-specific abbreviations with tooltips, use `aria-label` on the wrapper and hide the visual text from screen readers using `aria-hidden="true"` to create a cleaner auditory experience.
+## 2026-07-27 - [Descriptive ARIA labels for modal buttons]
+**Learning:** Adding dynamic, contextual `aria-label` attributes to generic buttons (like Save, Cancel, Delete) inside modals significantly improves screen reader navigation and clarity, ensuring users understand exactly what action they are taking.
+**Action:** Always provide contextual `aria-label`s for generic action buttons in dialogs using dynamic data like node or edge names.
diff --git a/frontend/src/components/modals/EditEdgeModal.tsx b/frontend/src/components/modals/EditEdgeModal.tsx
index c34b7e55..b3a3ae65 100644
--- a/frontend/src/components/modals/EditEdgeModal.tsx
+++ b/frontend/src/components/modals/EditEdgeModal.tsx
@@ -83,14 +83,16 @@ export function EditEdgeModal({
type="button"
onClick={onRelDelete}
style={{ color: "#b91c1c", borderColor: "#fca5a5" }}
+ aria-label={`관계 삭제 (${editingEdge.source}에서 ${editingEdge.target})`}
>
삭제