Skip to content

CAP-MBR-MEM-005Determine membership standing and refresh list status

Markdown

CAP-MBR-MEM-005

Determine membership standing and refresh list status

Markdown
  • DocumentDraft
  • Product intentConfirmed
  • ImplementationPartially observed

KindCapabilityProduct areaMembershipModuleMemberships, Applications and Membership BillingRevision1

Read atservices-membership 5994c270react-console baf6dae3

The Formal Contract

The narrative above explains; the sections below are authoritative — the rules, scenarios and tests this document binds.

Outcomes
Record standing remains available when scheduled cache refresh is delayed.Lists expose both cached and current-status filtering.Joining history and continuity episodes describe the member’s tenure.
Surfaces
consoleapijob
Constraints
Membership list pages contain no more than 500 records.
Intent sources
services-membership:README.md#2026-10-18 — Final acceptanceservices-membership:docs/migrations/membership-core/README.md#The sweep: schedule and catch-up

Controls

44 controls apply, from the corpus control catalogue.

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-002 TC-LOG-003 TC-LOG-004 TC-LOG-005 TC-MON-001 TC-MON-002 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

Permissions

KeyChecked atScope
membership.members.readapirecord
membership.operations.runapitenant

Business Rules

11 rules, 10 to be proved before approval. A rule's product intent is derived from its origin: 11 confirmed by a product decision, the rest inheriting this capability's confirmed.

IdRuleKindEnforced atProvenance
01must prove
Confirmed
Date-based standing gives precedence to suspension, current coverage, grace, lapse, future coverage, pending coverage and no coverage, with grace taken from the type when specified and otherwise the program.
no proof recorded yet
calculationservice, databasetest
services-membership:modules/memberships/tests/integration/db/membership-functions.integration.spec.ts#answers Sam grace, lapsed, then active across the lapse and rejoin (scenario 4)
02must prove
Confirmed
Current coverage under a type without benefits returns active without benefits.
no proof recorded yet
calculationservice, databasetest
services-membership:tests/acceptance/memberships/MBR-ACC-0179.acceptance.ts#MBR-ACC-0179: Every status the engine can answer, from the terms and the type's or program's grace: none, pending, future, active, active without benefits, grace, lapsed and suspended, with the same answer from the SQL twins
03must prove
Confirmed
Record and date-specific reads derive standing from terms, while the record view also exposes the cached status and its calculation date.
no proof recorded yet
policyserviceobserved
services-membership:modules/memberships/services/reads/membership-views.ts:membershipView, membershipAsOf
04must prove
Confirmed
Term writes refresh derived membership caches within their transaction, and a normal nightly sweep selects start, expiry and grace-end boundaries for the workspace’s business date.
no proof recorded yet
calculationserviceobserved
05must prove
Confirmed
Expiry and lapse detections retain their actual boundary dates and are recorded at most once per term and detection kind, including when discovered late.
no proof recorded yet
lifecycleservice, databasetest
services-membership:modules/memberships/tests/integration/services/status-sweep.integration.spec.ts#records lapsed_detected effective the day after grace ended, even when found late
06must prove
Confirmed
A sweep after a missing prior run or a run older than yesterday refreshes every membership in the workspace.
no proof recorded yet
policyservicetest
07must prove
Confirmed
An authorized administrator can request today’s sweep, and repeating a sweep for the same day does not duplicate detections.
no proof recorded yet
permissionapi, servicetest
08
Confirmed
The schedule consumer is configured to pause a schedule after five consecutive failures.
policyserviceobserved
09must prove
Confirmed
When the original join date is empty, cache recomputation derives it from the first effective term; continuity starts another episode when an intervening gap exceeds the program allowance.
no proof recorded yet
calculationservice, databaseobserved
10must prove
Confirmed
Lists filter by owner, program, cached status or today’s derived status and by dated unit membership, optionally including descendants, without duplicating a membership across matching units.
no proof recorded yet
policyapi, serviceobserved
11must prove
Confirmed
The product should honor the program’s grace-benefits setting, which defaults to enabled, when deciding rights during grace.
origin: D-07 (services-membership:docs/migrations/membership-core/README.md#Tables and migrations)
no proof recorded yet
policyservice, databaseunknown

Scenarios

IdGivenWhenThenProvenance
01Sam’s term ends on 30 June 2026 and carries 60 days of grace.A delayed sweep catches up on 5 September 2026.The cache becomes lapsed and the lapse detection remains dated 30 August 2026.test
02The workspace has missed a nightly cache refresh.The next sweep runs after that interruption.Its catch-up mode examines every membership in the workspace.test

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.