[Feature] Add typed IDM groups and effective-dated relationship resolution #7

Closed
opened 2026-07-31 14:48:09 +02:00 by zemion · 2 comments
Owner

Goal

Model typed IDM groups and effective-dated identity relationships as reusable, tenant-safe facts for Distribution Lists and other capability consumers.

Boundary

  • Identity lifecycle status remains an account/identity lifecycle indicator such as active, suspended, or retired.
  • A business status used for audience selection is a typed group, organization function, or effective-dated relationship. It must not overload identity lifecycle state.
  • Organizations continues to own unit, structure, and function definitions.
  • IDM owns identity-to-group membership/relationship links and identity-to-function assignments.
  • Distribution Lists stores provider references and immutable expansion evidence, not copies of IDM records.

Scope

  • Define typed group references and relationship kinds with tenant scope.
  • Add effective valid_from/valid_until, active/revoked state, source revision, provenance, and typed properties to membership/relationship links.
  • Support direct and batch forward/reverse resolution at a caller-supplied effective time.
  • Preserve external-directory source references without making an external provider mandatory.
  • Emit versioned create/change/revoke/expire events for cache invalidation and downstream reconciliation.
  • Expose capability DTOs without leaking ORM models or granting application permissions implicitly.

Acceptance Criteria

  • Distribution Lists can resolve a typed group to its effective identities and explain every inclusion/exclusion.
  • Current, future, expired, and revoked relationships are deterministic and covered by tests.
  • Cross-tenant references are rejected.
  • Identity lifecycle changes and business group/function facts remain independently queryable.
  • The model works without Access, Campaign, or Distribution Lists installed.

Related: #5 and GovOPlaN/govoplan-dist-lists#5.

## Goal Model typed IDM groups and effective-dated identity relationships as reusable, tenant-safe facts for Distribution Lists and other capability consumers. ## Boundary - Identity lifecycle status remains an account/identity lifecycle indicator such as active, suspended, or retired. - A business status used for audience selection is a typed group, organization function, or effective-dated relationship. It must not overload identity lifecycle state. - Organizations continues to own unit, structure, and function definitions. - IDM owns identity-to-group membership/relationship links and identity-to-function assignments. - Distribution Lists stores provider references and immutable expansion evidence, not copies of IDM records. ## Scope - Define typed group references and relationship kinds with tenant scope. - Add effective `valid_from`/`valid_until`, active/revoked state, source revision, provenance, and typed properties to membership/relationship links. - Support direct and batch forward/reverse resolution at a caller-supplied effective time. - Preserve external-directory source references without making an external provider mandatory. - Emit versioned create/change/revoke/expire events for cache invalidation and downstream reconciliation. - Expose capability DTOs without leaking ORM models or granting application permissions implicitly. ## Acceptance Criteria - Distribution Lists can resolve a typed group to its effective identities and explain every inclusion/exclusion. - Current, future, expired, and revoked relationships are deterministic and covered by tests. - Cross-tenant references are rejected. - Identity lifecycle changes and business group/function facts remain independently queryable. - The model works without Access, Campaign, or Distribution Lists installed. Related: #5 and GovOPlaN/govoplan-dist-lists#5.
Author
Owner

Codex State: started

Summary

  • Implementing tenant-scoped typed groups, effective-dated identity relationships, batch forward/reverse resolution, lifecycle events, and the Distribution Lists provider integration.

Suggested status label: status/in-progress

## Codex State: started ### Summary - Implementing tenant-scoped typed groups, effective-dated identity relationships, batch forward/reverse resolution, lifecycle events, and the Distribution Lists provider integration. Suggested status label: `status/in-progress`
Author
Owner

Implemented and pushed the complete typed-group/effective-relationship vertical.\n\nCommits:\n- GovOPlaN/govoplan-core@c6ef644: provider-neutral typed group, relationship, decision, resolution, and capability contracts.\n- GovOPlaN/govoplan-idm@6f6c45f: tenant-scoped persistence and Alembic migration, CRUD/resolution API, optimistic revisions, external source/provenance fields, exact-once expiry processing, and versioned create/change/revoke/expire events.\n- GovOPlaN/govoplan-dist-lists@27a7909: typed-group catalogue and effective expansion with inclusion/exclusion explanations and immutable provider evidence.\n\nAcceptance covered:\n- direct and batch forward/reverse resolution;\n- deterministic current/future/expired/revoked and inactive-identity decisions;\n- cross-tenant rejection;\n- no implicit rights and no Access/Campaign/Distribution Lists hard dependency in IDM;\n- Distribution Lists degrades visibly when the optional capability is absent.\n\nVerification:\n- govoplan-idm full suite: 27 tests passed, including a real Alembic upgrade to b1c2d3e4f5a6;\n- govoplan-dist-lists full suite: 11 tests passed;\n- Core contract and IDM worker suites passed;\n- Ruff and diff checks passed;\n- tools/checks/check-focused.sh passed in full: static contracts, 65 manifests, module boundaries, backend composition, 46 WebUI permutations, and full-product bundle budgets.

Implemented and pushed the complete typed-group/effective-relationship vertical.\n\nCommits:\n- GovOPlaN/govoplan-core@c6ef644: provider-neutral typed group, relationship, decision, resolution, and capability contracts.\n- GovOPlaN/govoplan-idm@6f6c45f: tenant-scoped persistence and Alembic migration, CRUD/resolution API, optimistic revisions, external source/provenance fields, exact-once expiry processing, and versioned create/change/revoke/expire events.\n- GovOPlaN/govoplan-dist-lists@27a7909: typed-group catalogue and effective expansion with inclusion/exclusion explanations and immutable provider evidence.\n\nAcceptance covered:\n- direct and batch forward/reverse resolution;\n- deterministic current/future/expired/revoked and inactive-identity decisions;\n- cross-tenant rejection;\n- no implicit rights and no Access/Campaign/Distribution Lists hard dependency in IDM;\n- Distribution Lists degrades visibly when the optional capability is absent.\n\nVerification:\n- govoplan-idm full suite: 27 tests passed, including a real Alembic upgrade to b1c2d3e4f5a6;\n- govoplan-dist-lists full suite: 11 tests passed;\n- Core contract and IDM worker suites passed;\n- Ruff and diff checks passed;\n- tools/checks/check-focused.sh passed in full: static contracts, 65 manifests, module boundaries, backend composition, 46 WebUI permutations, and full-product bundle budgets.
zemion removed the
status
ready
label 2026-08-02 14:46:54 +02:00
zemion removed the codex/ready label 2026-08-02 17:32:15 +02:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: GovOPlaN/govoplan-idm#7