Skip to content

DOM-MBR-STR-001Association Hierarchy

Markdown

DOM-MBR-STR-001

Association Hierarchy

Markdown
  • DocumentDraft
  • ImplementationObserved

Planning

Specified by
CON-MBR-STR-001

Design

Owned by
SVC-MBR-STR-structure

KindDomain objectProduct areaMembershipModuleOrganizational Structure, Membership Configuration and TermsRevision1

Read atservices-membership 5994c270react-console baf6dae3

Relationships

ToCardinalityOwnershipCrosses a serviceOn archive or delete
DOM-MBR-STR-002A kind may classify many units; Each unit has zero or one current parent and many parent periodsStructure owns the kind catalogue and placement history; each unit retains its own descriptive record.no
DOM-MBR-STR-003many programs to many unit kindsConfiguration owns the program's references and requirements; structure owns the referenced kinds and protects them from deletion while referenced.yes
DOM-MBR-STR-004many package unit requirements to one kind eachConfiguration owns package requirements, whose references prevent removal of the named kind.yes

Invariants

InvariantProtectsEnforced atProvenance
INV-DOM-MBR-STR-001-01
Placement requires an allowed parent kind, or a root-enabled unit kind when no parent is supplied; service validation is backed by the declared database trigger.
service, databasetest
services-membership:tests/e2e/structure-api.e2e.spec.ts#the structure API, end to end in process › refuses a parent of a type not allowed, 409 parent_type_not_allowed
INV-DOM-MBR-STR-001-02
Ordinary placement validation rejects ancestry cycles and branches that reach depth 32.
servicetest
services-membership:modules/structure/tests/integration/services/persistence/organizational-units.integration.spec.ts#organizational units in the database › the refusals › refuses a move under the unit’s own descendant as a cycle
INV-DOM-MBR-STR-001-03
Creation, moves and merges commit ancestry and depths consistent with parent references under the tree lock; loads defer rebuilding and deletion removes only the deleted unit's pairs.
servicetest
services-membership:modules/structure/tests/unit/services/tree-edits.spec.ts#the tree edits › move › locks, validates against the current closure, changes the parent, records history, rebuilds, updates depths and checks the cap, in that order
INV-DOM-MBR-STR-001-04
Parent periods recorded through the placement service join without gaps or overlap from first placement, with one latest open period.
serviceobserved
INV-DOM-MBR-STR-001-05
Kind replacement preserves root and parent permissions used by current units; deletion fails while units, other kinds, programs or package requirements reference the kind.
service, databasetest
services-membership:tests/e2e/structure-api.e2e.spec.ts#the structure API, end to end in process › refuses to delete a unit type in use, 409 unit_type_in_use
INV-DOM-MBR-STR-001-06
Published ancestry functions and workspace-scoped structure reads cannot return another workspace's records.
databasetest
services-membership:modules/structure/tests/integration/services/persistence/organizational-units.integration.spec.ts#organizational units in the database › the published functions › answers nothing of a tenant other than the reader’s own
INV-DOM-MBR-STR-001-07
Ordinary application access cannot rewrite parent-period versions; workspace removal uses the owner's designated function.
databaseobserved

The Markdown files under specs/ in rhythmsoftware/rhythm-v2-docs are the canonical source of truth. This reader is a generated, read-only projection of them.