Classification Types Service Module
What This Service Is For
The classification host serves the configuration vocabulary staff use throughout person and organization work. Contact and organization types shape presentation, affiliation types define kinds of ties and sharing defaults, contact roles define responsibility meaning, and address or phone types define contact-point purposes. The separate route host does not introduce a second product owner.
Our reading is that one configuration surface makes definitions reusable while preserving their different effects. An association can define Chapter, Billing Contact and Work Address once and use them across many records. Ownership remains with Entities, and Platform continues to own notice content and presentation definitions referenced by that vocabulary.
Boundary
The host exposes permissioned catalogue operations and a public health response. Most catalogue routes use the console channel; contact-role reads also declare the portal access channel. That channel declaration does not give Portal Member a CRM grant: callers still need the named permission under Platform’s evaluated execution context.
Entities owns the catalogues and their policy or mapping children. Platform owns form and layout definitions, file management, security evaluation and the organization type’s notice template. Bulk orchestration belongs to the Data Job Engine and CRM job handlers, rather than being implied by these individual catalogue operations.
What It Owns
This host has no separate domain-object owner entries because it serves catalogue definitions belonging to Entities. Contact and organization classifications hold their presentation assignments; organization types additionally hold role policy and notice configuration. Affiliation types hold sharing mappings, and roles and contact-point types supply reusable local vocabulary.
Ownership means callers use these operation and persistence boundaries to change a definition, rather than write its storage directly or treat the hosting function as another module. Platform holds the composed notice template and the referenced forms and layouts. Catalogue locks, references and supported inactivity continue to apply even when another record screen consumes the definitions.
Operations in Words
getConfigurationTypesHealth
Operations tooling uses the public classification-host health route to identify the available deployment. No record grant is required, and the response does not expose classification administration data. This health check is separate from permissioned catalogue reads and does not establish that Platform template writes are functioning.
Permission: none; the public response is limited to host health information. Access channel: public. The dispatcher enforces route authority independently of console visibility.
createOrganizationType
Catalogue administrators or other callers holding the create grant add organization type with role restrictions, coverage bounds, notice settings and per-slot presentation assignments. The route validates identity and record shape; an occupied identity or invalid reference refuses creation. Notice content is validated before CRM persistence and written to Platform afterward, with attempted compensation on later failure.
Permission: crm.organization-types.create (Administrator, Power User, Standard User). Access channel: console. The dispatcher enforces route authority independently of console visibility.
listOrganizationTypes
Catalogue readers and consuming selectors request a cursor-paged organization types list. Saved display positions precede remaining entries in name order. Invalid cursor or scope inputs and missing read authority are refused. Inactive definitions can remain readable even when consuming new-choice pickers omit them.
Permission: crm.organization-types.read (Administrator, Power User, Standard User, Read Only). Access channel: console. The dispatcher enforces route authority independently of console visibility.
reorderOrganizationTypes
A catalogue updater supplies the complete ordered identity list for organization types. All positions commit together, affecting later catalogue choices. Missing, duplicated or foreign identities and persistence errors refuse the whole reorder, preserving the previous order. The update grant controls this action; dragging a row on screen does not bypass completeness or workspace checks.
Permission: crm.organization-types.update (Administrator, Power User, Standard User). Access channel: console. The dispatcher enforces route authority independently of console visibility.
getOrganizationType
A configuration editor or consuming reader retrieves one organization type definition with role restrictions, coverage bounds, notice settings and per-slot presentation assignments. The request uses the workspace identity and can project supported fields. Missing read authority or an absent definition is refused rather than returning another workspace’s configuration. Owned notice content is read from Platform-backed template storage and remains distinct from the CRM policy row.
Permission: crm.organization-types.read (Administrator, Power User, Standard User, Read Only). Access channel: console. The dispatcher enforces route authority independently of console visibility.
updateOrganizationType
A catalogue updater replaces the definition at its submitted read version, including role restrictions, coverage bounds, notice settings and per-slot presentation assignments. Stale reads, mutation locks and invalid record or reference values refuse the write. Platform notice changes follow the CRM transaction; compensation can fail, and existing organization assessments await another trigger or reprocess.
Permission: crm.organization-types.update (Administrator, Power User, Standard User). Access channel: console. The dispatcher enforces route authority independently of console visibility.
patchOrganizationType
A catalogue updater applies version-tested directives to selected fields, including role restrictions, coverage bounds, notice settings and per-slot presentation assignments. Stale reads, mutation locks and invalid record or reference values refuse the write. Platform notice changes follow the CRM transaction; compensation can fail, and existing organization assessments await another trigger or reprocess.
Permission: crm.organization-types.update (Administrator, Power User, Standard User). Access channel: console. The dispatcher enforces route authority independently of console visibility.
deleteOrganizationType
A catalogue delete operator removes an unused organization type. Lock and protected dependency checks can refuse it so existing values retain their definition. Organization references block removal; Platform template cleanup follows CRM commit and a cleanup failure is logged without restoring the type.
Permission: crm.organization-types.delete (Administrator, Power User). Access channel: console. The dispatcher enforces route authority independently of console visibility.
createContactRole
Catalogue administrators or other callers holding the create grant add contact role with responsibility name, description, availability and automatic-assignment settings. The route validates identity and record shape; an occupied identity or invalid reference refuses creation. The created definition becomes available to consuming choices according to its availability and order.
Permission: crm.contact-roles.create (Administrator, Power User, Standard User). Access channel: console. The dispatcher enforces route authority independently of console visibility.
listContactRoles
Catalogue readers and consuming selectors request a cursor-paged contact roles list. Saved display positions precede remaining entries in name order. Invalid cursor or scope inputs and missing read authority are refused. Inactive definitions can remain readable even when consuming new-choice pickers omit them.
Permission: crm.contact-roles.read (Administrator, Power User, Standard User, Read Only). Access channel: portal. The dispatcher enforces route authority independently of console visibility.
reorderContactRoles
A catalogue updater supplies the complete ordered identity list for contact roles. All positions commit together, affecting later catalogue choices. Missing, duplicated or foreign identities and persistence errors refuse the whole reorder, preserving the previous order. The update grant controls this action; dragging a row on screen does not bypass completeness or workspace checks.
Permission: crm.contact-roles.update (Administrator, Power User, Standard User). Access channel: console. The dispatcher enforces route authority independently of console visibility.
getContactRole
A configuration editor or consuming reader retrieves one contact role definition with responsibility name, description, availability and automatic-assignment settings. The request uses the workspace identity and can project supported fields. Missing read authority or an absent definition is refused rather than returning another workspace’s configuration. Reading the definition alone does not authorize editing existing records that use it.
Permission: crm.contact-roles.read (Administrator, Power User, Standard User, Read Only). Access channel: portal. The dispatcher enforces route authority independently of console visibility.
updateContactRole
A catalogue updater replaces the definition at its submitted read version, including responsibility name, description, availability and automatic-assignment settings. Stale reads, mutation locks and invalid record or reference values refuse the write. Automatic-setting changes do not create security authority for role holders; dedicated lock administration has its own action.
Permission: crm.contact-roles.update (Administrator, Power User, Standard User). Access channel: console. The dispatcher enforces route authority independently of console visibility.
patchContactRole
A catalogue updater applies version-tested directives to selected fields, including responsibility name, description, availability and automatic-assignment settings. Stale reads, mutation locks and invalid record or reference values refuse the write. Automatic-setting changes do not create security authority for role holders; dedicated lock administration has its own action.
Permission: crm.contact-roles.update (Administrator, Power User, Standard User). Access channel: console. The dispatcher enforces route authority independently of console visibility.
lockContactRole
An authorized lock operator sets or strengthens the customer restriction with a current read version and required explanation. The dedicated operation can change a full customer lock, but cannot change Rhythm protection. Invalid reasons, lock values, absent subjects or stale versions are refused. The committed audit records actual changed restrictions rather than every unchanged request.
Permission: crm.contact-roles.lock (Administrator, Power User). Access channel: console. The dispatcher enforces route authority independently of console visibility.
unlockContactRole
An authorized unlock operator releases the contact role’s owner restriction using its current version and a nonblank explanation. This operation has no nested-element selection: address and phone element unlocking belongs to contact and organization actions. A stale version or Rhythm protection refuses release. A changed restriction advances the role and records its dedicated lock audit; an unchanged request does not manufacture a lock change.
Permission: crm.contact-roles.unlock (Administrator, Power User). Access channel: console. The dispatcher checks this authority when the request arrives.
listContactRoleLockChanges
A reader inspects the subject’s lock audit with actor, time, explanation and before-and-after restrictions. These entries explain dedicated safeguard changes rather than all ordinary profile corrections. The corresponding read grant is required; malformed paging or absent subject context can be refused. Reading an audit does not grant lock or unlock authority.
Permission: crm.contact-roles.read (Administrator, Power User, Standard User, Read Only). Access channel: console. The dispatcher enforces route authority independently of console visibility.
deleteContactRole
A catalogue delete operator removes an unused contact role. Lock and protected dependency checks can refuse it so existing values retain their definition. Role periods and compliance-rule references block removal. Recipient-role arrays lack equivalent dependency protection, which remains a finding.
Permission: crm.contact-roles.delete (Administrator, Power User). Access channel: console. The dispatcher enforces route authority independently of console visibility.
createContactType
Catalogue administrators or other callers holding the create grant add contact type with classification name, availability, description and per-slot presentation assignments. The route validates identity and record shape; an occupied identity or invalid reference refuses creation. The created definition becomes available to consuming choices according to its availability and order.
Permission: crm.contact-types.create (Administrator, Power User, Standard User). Access channel: console. The dispatcher enforces route authority independently of console visibility.
listContactTypes
Catalogue readers and consuming selectors request a cursor-paged contact types list. Saved display positions precede remaining entries in name order. Invalid cursor or scope inputs and missing read authority are refused. Inactive definitions can remain readable even when consuming new-choice pickers omit them.
Permission: crm.contact-types.read (Administrator, Power User, Standard User, Read Only). Access channel: console. The dispatcher enforces route authority independently of console visibility.
reorderContactTypes
A catalogue updater supplies the complete ordered identity list for contact types. All positions commit together, affecting later catalogue choices. Missing, duplicated or foreign identities and persistence errors refuse the whole reorder, preserving the previous order. The update grant controls this action; dragging a row on screen does not bypass completeness or workspace checks.
Permission: crm.contact-types.update (Administrator, Power User, Standard User). Access channel: console. The dispatcher enforces route authority independently of console visibility.
getContactType
A configuration editor or consuming reader retrieves one contact type definition with classification name, availability, description and per-slot presentation assignments. The request uses the workspace identity and can project supported fields. Missing read authority or an absent definition is refused rather than returning another workspace’s configuration. Reading the definition alone does not authorize editing existing records that use it.
Permission: crm.contact-types.read (Administrator, Power User, Standard User, Read Only). Access channel: console. The dispatcher enforces route authority independently of console visibility.
updateContactType
A catalogue updater replaces the definition at its submitted read version, including classification name, availability, description and per-slot presentation assignments. Stale reads, mutation locks and invalid record or reference values refuse the write. Existing references retain meaning, and classification mutation does not change the person or organization identity.
Permission: crm.contact-types.update (Administrator, Power User, Standard User). Access channel: console. The dispatcher enforces route authority independently of console visibility.
patchContactType
A catalogue updater applies version-tested directives to selected fields, including classification name, availability, description and per-slot presentation assignments. Stale reads, mutation locks and invalid record or reference values refuse the write. Existing references retain meaning, and classification mutation does not change the person or organization identity.
Permission: crm.contact-types.update (Administrator, Power User, Standard User). Access channel: console. The dispatcher enforces route authority independently of console visibility.
deleteContactType
A catalogue delete operator removes an unused contact type. Lock and protected dependency checks can refuse it so existing values retain their definition. Contacts that still reference the classification block removal, including preserved records whose labels remain meaningful.
Permission: crm.contact-types.delete (Administrator, Power User). Access channel: console. The dispatcher enforces route authority independently of console visibility.
createAffiliationType
Catalogue administrators or other callers holding the create grant add affiliation type with relationship name, availability, description and supported default contact-point mappings. The route validates identity and record shape; an occupied identity or invalid reference refuses creation. Default mappings require compatible local types and unambiguous destinations.
Permission: crm.affiliation-types.create (Administrator, Power User, Standard User). Access channel: console. The dispatcher enforces route authority independently of console visibility.
listAffiliationTypes
Catalogue readers and consuming selectors request a cursor-paged affiliation types list. This catalogue is alphabetical and has no reorder operation. Invalid cursor or scope inputs and missing read authority are refused. Inactive definitions can remain readable even when consuming new-choice pickers omit them.
Permission: crm.affiliation-types.read (Administrator, Power User, Standard User, Read Only). Access channel: console. The dispatcher enforces route authority independently of console visibility.
getAffiliationType
A configuration editor or consuming reader retrieves one affiliation type definition with relationship name, availability, description and supported default contact-point mappings. The request uses the workspace identity and can project supported fields. Missing read authority or an absent definition is refused rather than returning another workspace’s configuration. Reading the definition alone does not authorize editing existing records that use it.
Permission: crm.affiliation-types.read (Administrator, Power User, Standard User, Read Only). Access channel: console. The dispatcher enforces route authority independently of console visibility.
updateAffiliationType
A catalogue updater replaces the definition at its submitted read version, including relationship name, availability, description and supported default contact-point mappings. Stale reads, mutation locks and invalid record or reference values refuse the write. Changed defaults apply through later eligible actions and do not rewrite every existing person.
Permission: crm.affiliation-types.update (Administrator, Power User, Standard User). Access channel: console. The dispatcher enforces route authority independently of console visibility.
patchAffiliationType
A catalogue updater applies version-tested directives to selected fields, including relationship name, availability, description and supported default contact-point mappings. Stale reads, mutation locks and invalid record or reference values refuse the write. Changed defaults apply through later eligible actions and do not rewrite every existing person.
Permission: crm.affiliation-types.update (Administrator, Power User, Standard User). Access channel: console. The dispatcher enforces route authority independently of console visibility.
deleteAffiliationType
A catalogue delete operator removes an unused affiliation type. Lock and protected dependency checks can refuse it so existing values retain their definition. Any referencing affiliation or workspace default selection blocks removal; deactivation preserves existing references when the type is being retired from new choices.
Permission: crm.affiliation-types.delete (Administrator, Power User). Access channel: console. The dispatcher enforces route authority independently of console visibility.
createAddressType
Catalogue administrators or other callers holding the create grant add address type with purpose name, applicability and saved order, without an editable inactive choice. The route validates identity and record shape; an occupied identity or invalid reference refuses creation. The created definition becomes available to consuming choices according to its availability and order.
Permission: crm.address-types.create (Administrator, Power User). Access channel: console. The dispatcher enforces route authority independently of console visibility.
listAddressTypes
Catalogue readers and consuming selectors request a cursor-paged address types list. Saved display positions precede remaining entries in name order. Invalid cursor or scope inputs and missing read authority are refused. Applicability filtering distinguishes choices usable by contacts or organizations.
Permission: crm.address-types.read (Administrator, Power User, Standard User, Read Only). Access channel: console. The dispatcher enforces route authority independently of console visibility.
reorderAddressTypes
A catalogue updater supplies the complete ordered identity list for address types. All positions commit together, affecting later catalogue choices. Missing, duplicated or foreign identities and persistence errors refuse the whole reorder, preserving the previous order. The update grant controls this action; dragging a row on screen does not bypass completeness or workspace checks.
Permission: crm.address-types.update (Administrator, Power User). Access channel: console. The dispatcher enforces route authority independently of console visibility.
getAddressType
A configuration editor or consuming reader retrieves one address type definition with purpose name, applicability and saved order, without an editable inactive choice. The request uses the workspace identity and can project supported fields. Missing read authority or an absent definition is refused rather than returning another workspace’s configuration. Reading the definition alone does not authorize editing existing records that use it.
Permission: crm.address-types.read (Administrator, Power User, Standard User, Read Only). Access channel: console. The dispatcher enforces route authority independently of console visibility.
updateAddressType
A catalogue updater replaces the definition at its submitted read version, including purpose name, applicability and saved order, without an editable inactive choice. Stale reads, mutation locks and invalid record or reference values refuse the write. Existing references retain meaning, and classification mutation does not change the person or organization identity.
Permission: crm.address-types.update (Administrator, Power User). Access channel: console. The dispatcher enforces route authority independently of console visibility.
patchAddressType
A catalogue updater applies version-tested directives to selected fields, including purpose name, applicability and saved order, without an editable inactive choice. Stale reads, mutation locks and invalid record or reference values refuse the write. Existing references retain meaning, and classification mutation does not change the person or organization identity.
Permission: crm.address-types.update (Administrator, Power User). Access channel: console. The dispatcher enforces route authority independently of console visibility.
deleteAddressType
A catalogue delete operator removes an unused address type. Lock and protected dependency checks can refuse it so existing values retain their definition. Contact and organization details and supported mapping references prevent deleting a purpose still in use.
Permission: crm.address-types.delete (Administrator, Power User). Access channel: console. The dispatcher enforces route authority independently of console visibility.
createPhoneNumberType
Catalogue administrators or other callers holding the create grant add phone number type with purpose name, applicability and saved order, without an editable inactive choice. The route validates identity and record shape; an occupied identity or invalid reference refuses creation. The created definition becomes available to consuming choices according to its availability and order.
Permission: crm.phone-number-types.create (Administrator, Power User). Access channel: console. The dispatcher enforces route authority independently of console visibility.
listPhoneNumberTypes
Catalogue readers and consuming selectors request a cursor-paged phone number types list. Saved display positions precede remaining entries in name order. Invalid cursor or scope inputs and missing read authority are refused. Applicability filtering distinguishes choices usable by contacts or organizations.
Permission: crm.phone-number-types.read (Administrator, Power User, Standard User, Read Only). Access channel: console. The dispatcher enforces route authority independently of console visibility.
reorderPhoneNumberTypes
A catalogue updater supplies the complete ordered identity list for phone number types. All positions commit together, affecting later catalogue choices. Missing, duplicated or foreign identities and persistence errors refuse the whole reorder, preserving the previous order. The update grant controls this action; dragging a row on screen does not bypass completeness or workspace checks.
Permission: crm.phone-number-types.update (Administrator, Power User). Access channel: console. The dispatcher enforces route authority independently of console visibility.
getPhoneNumberType
A configuration editor or consuming reader retrieves one phone number type definition with purpose name, applicability and saved order, without an editable inactive choice. The request uses the workspace identity and can project supported fields. Missing read authority or an absent definition is refused rather than returning another workspace’s configuration. Reading the definition alone does not authorize editing existing records that use it.
Permission: crm.phone-number-types.read (Administrator, Power User, Standard User, Read Only). Access channel: console. The dispatcher enforces route authority independently of console visibility.
updatePhoneNumberType
A catalogue updater replaces the definition at its submitted read version, including purpose name, applicability and saved order, without an editable inactive choice. Stale reads, mutation locks and invalid record or reference values refuse the write. Existing references retain meaning, and classification mutation does not change the person or organization identity.
Permission: crm.phone-number-types.update (Administrator, Power User). Access channel: console. The dispatcher enforces route authority independently of console visibility.
patchPhoneNumberType
A catalogue updater applies version-tested directives to selected fields, including purpose name, applicability and saved order, without an editable inactive choice. Stale reads, mutation locks and invalid record or reference values refuse the write. Existing references retain meaning, and classification mutation does not change the person or organization identity.
Permission: crm.phone-number-types.update (Administrator, Power User). Access channel: console. The dispatcher enforces route authority independently of console visibility.
deletePhoneNumberType
A catalogue delete operator removes an unused phone number type. Lock and protected dependency checks can refuse it so existing values retain their definition. Contact and organization details and supported mapping references prevent deleting a purpose still in use.
Permission: crm.phone-number-types.delete (Administrator, Power User). Access channel: console. The dispatcher enforces route authority independently of console visibility.
Permissions
The CRM authorization model is the source of built-in grants. Administrator and Power User receive the administrative operations listed here; Standard User and Read Only receive narrower grants according to the table. A business Contact Role such as Billing Contact grants none of these security permissions, and Portal Member has no built-in CRM grants.
| Permission | What it protects | Built-in roles | Checked at |
|---|---|---|---|
crm.address-types.create | Create address classifications. | Administrator, Power User | createAddressType |
crm.address-types.delete | Remove address classifications. | Administrator, Power User | deleteAddressType |
crm.address-types.read | Read address classifications. | Administrator, Power User, Standard User, Read Only | listAddressTypes, getAddressType |
crm.address-types.update | Maintain address classifications. | Administrator, Power User | reorderAddressTypes, updateAddressType, patchAddressType |
crm.affiliation-types.create | Create affiliation classifications. | Administrator, Power User, Standard User | createAffiliationType |
crm.affiliation-types.delete | Remove affiliation classifications. | Administrator, Power User | deleteAffiliationType |
crm.affiliation-types.read | Read affiliation classifications. | Administrator, Power User, Standard User, Read Only | listAffiliationTypes, getAffiliationType |
crm.affiliation-types.update | Maintain affiliation classifications. | Administrator, Power User, Standard User | updateAffiliationType, patchAffiliationType |
crm.contact-roles.create | Create organizational contact roles. | Administrator, Power User, Standard User | createContactRole |
crm.contact-roles.delete | Remove organizational contact roles. | Administrator, Power User | deleteContactRole |
crm.contact-roles.lock | Apply record locks to organizational contact roles. | Administrator, Power User | lockContactRole |
crm.contact-roles.read | Read organizational contact roles. | Administrator, Power User, Standard User, Read Only | listContactRoles, getContactRole, listContactRoleLockChanges |
crm.contact-roles.unlock | Release record locks on organizational contact roles. | Administrator, Power User | unlockContactRole |
crm.contact-roles.update | Maintain organizational contact roles. | Administrator, Power User, Standard User | reorderContactRoles, updateContactRole, patchContactRole |
crm.contact-types.create | Create contact classifications. | Administrator, Power User, Standard User | createContactType |
crm.contact-types.delete | Remove contact classifications. | Administrator, Power User | deleteContactType |
crm.contact-types.read | Read contact classifications. | Administrator, Power User, Standard User, Read Only | listContactTypes, getContactType |
crm.contact-types.update | Maintain contact classifications. | Administrator, Power User, Standard User | reorderContactTypes, updateContactType, patchContactType |
crm.organization-types.create | Create organization classifications. | Administrator, Power User, Standard User | createOrganizationType |
crm.organization-types.delete | Remove organization classifications. | Administrator, Power User | deleteOrganizationType |
crm.organization-types.read | Read organization classifications. | Administrator, Power User, Standard User, Read Only | listOrganizationTypes, getOrganizationType |
crm.organization-types.update | Maintain organization classifications. | Administrator, Power User, Standard User | reorderOrganizationTypes, updateOrganizationType, patchOrganizationType |
crm.phone-number-types.create | Create phone classifications. | Administrator, Power User | createPhoneNumberType |
crm.phone-number-types.delete | Remove phone classifications. | Administrator, Power User | deletePhoneNumberType |
crm.phone-number-types.read | Read phone classifications. | Administrator, Power User, Standard User, Read Only | listPhoneNumberTypes, getPhoneNumberType |
crm.phone-number-types.update | Maintain phone classifications. | Administrator, Power User | reorderPhoneNumberTypes, updatePhoneNumberType, patchPhoneNumberType |
A route permission is only the entry decision. Version comparison, archive, customer restrictions, Rhythm protection, valid references and dependencies can still refuse an authorized actor. History evaluates record-read authority as well as history authority. Settings and effective-definition handlers check the particular requested section or kind, preventing an alternative-grant route gate from exposing everything.
Events and Jobs
This classification host declares no independent produced event stream or scheduled job. Its catalogue writes do not acquire the contact and organization history guarantee simply because those records have revisions. Ordinary reordering and policy administration return their synchronous result; updating organization policy does not trigger immediate reevaluation of all existing organizations.
The organization-type workflow calls Platform synchronously for template validation and mutation after the local type commit. The template is not stored as another CRM copy. If administration requires refreshed organization assessments, the record service’s explicit reprocess initiates durable asynchronous work. Individual catalogue operations remain distinct from bulk orchestration.
Consistency Guarantees
The guarantees below describe the verified persistence and handoff boundaries. Transactional means the named local writes share a commit; eventual means later work can remain pending. Our reading is that this distinction is essential when interpreting an error or a saved record, because a rollback does not undo every prepared file or external request object.
transactional boundary. Classification rows and their owned policy or mapping rows commit together under the submitted version. Recovery: Rollback removes all database changes in the classification transaction.
transactional boundary. A catalogue reorder submits every required identity and commits all positions together. Recovery: Validation or persistence failure leaves the prior order intact.
eventual boundary. The type commits before its owned template mutation. Recovery: A failed template write attempts deletion or versioned restore, which can also fail. Failed template cleanup after deletion is logged without reversal.
transactional boundary. References prevent deleting catalogue entries still used by the protected dependency kinds. Recovery: The deletion transaction fails and retains the catalogue record; notification-role arrays lack equivalent protection.