SemanticChangeType.java

package com.taxonomy.dsl.diff;

/**
 * Categorizes architectural changes at a semantic level.
 *
 * <p>Unlike raw line-based diffs, these types describe the <em>meaning</em>
 * of a change in domain terms—useful for reviewability, change documentation,
 * release notes, and impact analysis.
 */
public enum SemanticChangeType {

    // ── Element lifecycle ────────────────────────────────────────────
    ELEMENT_ADDED("Element added"),
    ELEMENT_REMOVED("Element removed"),
    ELEMENT_TITLE_CHANGED("Element title changed"),
    ELEMENT_DESCRIPTION_CHANGED("Element description changed"),
    ELEMENT_TYPE_CHANGED("Element type changed"),
    ELEMENT_TAXONOMY_CHANGED("Element taxonomy changed"),
    ELEMENT_EXTENSIONS_CHANGED("Element extensions changed"),

    // ── Relation lifecycle ───────────────────────────────────────────
    RELATION_ADDED("Relation added"),
    RELATION_REMOVED("Relation removed"),
    RELATION_STATUS_CHANGED("Relation status changed"),
    RELATION_CONFIDENCE_CHANGED("Relation confidence changed"),
    RELATION_PROVENANCE_CHANGED("Relation provenance changed"),
    RELATION_EXTENSIONS_CHANGED("Relation extensions changed");

    private final String label;

    SemanticChangeType(String label) {
        this.label = label;
    }

    /** Human-readable label for display purposes. */
    public String getLabel() {
        return label;
    }
}