---
id: SVC-MBR-MEM-history
title: Membership History Service Module
product_area: membership
module: memberships
repository: services-membership
source_module: modules/history
revision: 1
status: draft
design_intent: proposed
implementation_evidence: partially-observed
inference: []
source_sha:
  services-membership: 5994c270e8a37a30f848e99ba5b5ee6b87c08893
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
owns:
  - DOM-MBR-MEM-006
does_not_own:
  - Memberships owns the live records and hosts the timeline routes.
  - Committees supplies appointment history when available.
  - >-
    The shared history package defines revision storage and timeline route
    shapes.
operations:
  - operation_id: listMembershipHistory
    intent: >-
      Page a holding’s attributed timeline in reverse chronology with actor and
      operation filters.
    access: console
    permission: membership.memberships.history and membership.members.read
    realises:
      - CAP-MBR-MEM-018
    published_to_submissions: >-
      not published: membership administration or reads; application decisions
      arrive through the separate Submissions handler
  - operation_id: getMembershipRevision
    intent: Read the changed sections of one holding revision.
    access: console
    permission: membership.memberships.history and membership.members.read
    realises:
      - CAP-MBR-MEM-018
    published_to_submissions: >-
      not published: membership administration or reads; application decisions
      arrive through the separate Submissions handler
  - operation_id: listMembershipHistoryActors
    intent: List distinct actors appearing in a holding’s timeline.
    access: console
    permission: membership.memberships.history and membership.members.read
    realises:
      - CAP-MBR-MEM-018
    published_to_submissions: >-
      not published: membership administration or reads; application decisions
      arrive through the separate Submissions handler
  - operation_id: listTermHistory
    intent: Page a period’s own attributed revisions.
    access: console
    permission: membership.memberships.history and membership.members.read
    realises:
      - CAP-MBR-MEM-018
    published_to_submissions: >-
      not published: membership administration or reads; application decisions
      arrive through the separate Submissions handler
  - operation_id: getTermRevision
    intent: Read one period revision and its changed sections.
    access: console
    permission: membership.memberships.history and membership.members.read
    realises:
      - CAP-MBR-MEM-018
    published_to_submissions: >-
      not published: membership administration or reads; application decisions
      arrive through the separate Submissions handler
  - operation_id: listTermHistoryActors
    intent: List distinct actors who changed a period.
    access: console
    permission: membership.memberships.history and membership.members.read
    realises:
      - CAP-MBR-MEM-018
    published_to_submissions: >-
      not published: membership administration or reads; application decisions
      arrive through the separate Submissions handler
  - operation_id: membershipAsOf
    intent: Reconstruct dated membership facts for record reads and monthly reporting.
    access: internal
    permission: 'none: an in-process call; the route is the memberships module''s'
    realises:
      - CAP-MBR-MEM-018
      - CAP-MBR-MEM-019
    published_to_submissions: >-
      not published: an internal service, partner or query contract; no intake
      route is registered
  - operation_id: live membership query datasets
    intent: >-
      Expose current holdings, periods, lifecycle entries and term connections
      through query permissions.
    access: internal
    permission: >-
      membership.memberships.query, membership.membership-terms.query,
      membership.lifecycle-events.query, membership.term-affiliations.query
    realises:
      - CAP-MBR-MEM-019
    published_to_submissions: >-
      not published: an internal service, partner or query contract; no intake
      route is registered
events: []
jobs: []
integrations:
  - system: Committees
    direction: inbound
    contract: >-
      Read available committee seat history and report its absence explicitly
      when unavailable.
consistency:
  - rule: Temporal evidence and attributed revisions commit with relevant changes.
    kind: transactional
    compensation: Attribution refusal aborts the complete business transaction.
  - rule: >-
      Reconstruction selects the recorded facts appropriate to the supplied
      instant.
    kind: transactional
    compensation: >-
      No repair is applied for precision lost when the supplied instant is
      reduced to milliseconds.
evidence:
  - >-
    services-membership at 5994c270: modules/history (aws/api/history.routes.ts,
    db, history configurations, services);
    modules/memberships/queries/memberships.query.ts;
    db/migrations/20261018034347_snapshots_and_history.sql;
    docs/migrations/history/README.md.
controls: [TC-AVL-002, TC-AVL-003, TC-AVL-004, TC-AZ-001, TC-AZ-002, TC-AZ-003, TC-AZ-004, TC-AZ-005, TC-AZ-006, TC-CHG-001, TC-CHG-002, TC-CHG-003, TC-CHG-004, TC-CRY-001, TC-CRY-002, TC-CRY-003, TC-DAT-001, TC-DAT-002, TC-DAT-003, TC-DAT-007, TC-IAM-001, TC-IAM-002, TC-IAM-004, TC-IAM-005, TC-IAM-006, TC-LOG-001, TC-LOG-002, TC-LOG-003, TC-LOG-004, TC-LOG-005, TC-MON-001, TC-MON-002, TC-MON-003, TC-MON-004, TC-PI-001, TC-PI-002, TC-PI-003, TC-PI-004, TC-PI-005, TC-PRV-001, TC-PRV-002, TC-SEC-001, TC-SEC-004, TC-TEN-001, TC-TEN-002, TC-TEN-003, TC-TEN-004]
---

# Membership History Service Module

## What This Service Is For

History supports attributed timelines and dated reconstruction of memberships and periods. It separates when coverage applies from when its facts were recorded.

## Boundary

The broad history object includes facets implemented by Snapshots and Events. This service supplies revisions and reconstruction, with timeline routes hosted by the Memberships function. Reconstruction uses current contact capture and available committee history.

## Operations in Words

Authorized workspace staff page timelines, inspect sections and list their actors. Record as-of reads and reporting call reconstruction in process. Live query datasets use their own permission keys.

## Events and Jobs

Database capture and deferred settlement write revisions before the transaction commits. The shared dispatcher later drains history transport rows. There is no queue job that delays revision creation.

## Consistency Guarantees

Unsupported attribution prevents the business commit. Tested reconstruction without a recording instant agrees with dated live reads. Existing findings limit exposed timeline facts and timestamp precision, and officer timeline access remains a product question.
