The coverage map distinguishes specified examples from missing proof. A covered category means an expected case is specified; executable bindings and their run results remain separate evidence. Each required rule has a proof link or an explicit coverage finding in the structured rule ledger.
Independent grants require a valid date rule. Submit a grant using its own anniversary rule but missing length, then correct the rule and calculate its period beside the primary term.
Calculated continuation dates avoid a standing gap. Compute a continuation from a term ending September 30 and evaluate coverage on September 30 and October 1.
Coverage
Rulecovered
Transitiongap: FND-MBR-STR-068
Validationcovered
Permissioncovered
Edgegap: FND-MBR-STR-068
Failuregap: FND-MBR-STR-068
Boundarycovered
Concurrencygap: FND-MBR-STR-068
Invariantcovered
Interactioncovered
Test Scenarios
14 scenarios proving CAP-MBR-STR-015; 11 bound to an existing test.
01Invalid date rules report their combined problemsvalidationunitnegativetest
An isolated Membership-licensed workspace contains the relevant records, with caller permissions selected for the case.
Steps
Change an existing package to calendar basis alone, then include the required calendar start.
Expected
The incomplete result fails and the complete result saves.
Data
The FAA example records or equivalent records prepared within the isolated workspace.
Bound to
services-membership:tests/acceptance/configuration/MBR-ACC-0101.acceptance.ts#MBR-ACC-0101: A package update is judged on the record as it will be after the change: switching the basis alone is refused, switching it with the dependent fields is accepted, and the renewal, reinstatement, seat and proration settings round-trip, clear and bound correctly
services-membership:tests/acceptance/configuration/MBR-ACC-0101.acceptance.ts#MBR-ACC-0101: A package update is judged on the record as it will be after the change: switching the basis alone is refused, switching it with the dependent fields is accepted, and the renewal, reinstatement, seat and proration settings round-trip, clear and bound correctly
03Continuation and restart use different starting pointsruleunittest
Explicit inputs or a recording fixture represent the cases exercised below.
Steps
Calculate the April annual purchase, its threshold-day variant and the January week case.
Expected
The resulting ends are April month-end, May month-end and seven days after the week start.
Data
Literal term, state or declaration fixtures for the described cases.
Bound to
services-membership:modules/terms/tests/unit/term-rules.spec.ts#term rules: 1.0 calculate-expiration-date.spec.js › 1.0 lines 284-292: anniversary in years, should calculate properly for a single year › ends a purchase of 2019-04-03 at the end of the anniversary month, 2020-04-30
services-membership:modules/terms/tests/unit/term-rules.spec.ts#term rules: 1.0 calculate-expiration-date.spec.js › 1.0 lines 327-337: anniversary in years, should respect sell after month › moves a new term bought 2019-04-15 with the threshold 15 a month on, to 2020-05-31
services-membership:modules/terms/tests/unit/term-rules.spec.ts#term rules: 1.0 calculate-expiration-date.spec.js › 1.0 lines 625-634: anniversary, should calculate properly for a single week › ends a month-end week bought 2019-01-01 seven days on, 2019-01-08, keeping the full count
services-membership:modules/terms/tests/unit/term-rules.spec.ts#term rules: 1.0 calculate-expiration-date.spec.js › 1.0 lines 284-292: anniversary in years, should calculate properly for a single year › ends a purchase of 2019-04-03 at the end of the anniversary month, 2020-04-30
06Fixed windows cover ordinary and wrapping rangesboundaryunittest
Explicit inputs or a recording fixture represent the cases exercised below.
Steps
Calculate an in-window start, a February start in a wrapping range and a start immediately after a non-December window closes.
Expected
Each uses the selected fixed end, including the boundary-adjusted case.
Data
Literal term, state or declaration fixtures for the described cases.
Bound to
services-membership:modules/terms/tests/unit/term-rules.spec.ts#term rules: 1.0 calculate-expiration-date.spec.js › 1.0 lines 853-866: fixed expiration dates, simple in-year range › ends a purchase of 2023-04-03 in the window 03-01 to 05-31 on 2023-11-14
services-membership:modules/terms/tests/unit/term-rules.spec.ts#term rules: 1.0 calculate-expiration-date.spec.js › 1.0 lines 853-866: fixed expiration dates, simple in-year range › ends a purchase of 2023-04-03 in the window 03-01 to 05-31 on 2023-11-14
07Calendar joins and continuations do not overlapruleunittest
Explicit inputs or a recording fixture represent the cases exercised below.
Steps
Compare a fresh April calendar purchase with a late continuation.
Expected
The fresh period can start in January, while continuation starts after its existing end.
Data
Literal term, state or declaration fixtures for the described cases.
Bound to
services-membership:modules/terms/tests/unit/term-rules.spec.ts#term rules: 1.0 calculate-expiration-date.spec.js › 1.0 lines 70-77: calendar, a standard year, should calculate properly for April › back-dates a purchase of 2019-04-03 to 2019-01-01 and ends it 2019-12-31
services-membership:modules/terms/tests/unit/term-rules.spec.ts#term rules: 1.0 calculate-expiration-date.spec.js › 1.0 lines 70-77: calendar, a standard year, should calculate properly for April › back-dates a purchase of 2019-04-03 to 2019-01-01 and ends it 2019-12-31
08Leap-year February uses leap dayboundaryunittest
Explicit inputs or a recording fixture represent the cases exercised below.
Steps
Calculate a calendar period finishing in February 2024.
Expected
Its inclusive ending is the twenty-ninth of February.
Data
Literal term, state or declaration fixtures for the described cases.
Bound to
services-membership:modules/terms/tests/unit/term-rules.spec.ts#term rules: what 2.0 decides › ends a calendar period ending in February on its last day in a leap year: 2024-02-29 (decided by Andrew 2026-10-18: the real last day of the month; 1.0 added a year with Moment and ended it 2024-02-28)
services-membership:modules/terms/tests/unit/term-rules.spec.ts#term rules: what 2.0 decides › ends a calendar period ending in February on its last day in a leap year: 2024-02-29 (decided by Andrew 2026-10-18: the real last day of the month; 1.0 added a year with Moment and ended it 2024-02-28)
An isolated workspace contains the records and current versions needed for the case.
Steps
Submit a grant using its own anniversary rule but missing length, then correct the rule and calculate its period beside the primary term.
Expected
The invalid aggregate saves nothing; the corrected rule yields the separately expected period.
Data
Separate fixture records for the accepted and refused operations.
Source
services-membership:modules/configuration/services/configuration/configuration-records.ts:packageResource,services-membership:modules/terms/tests/unit/term-rules.spec.ts#term rules: what 2.0 decides › reports every problem of a rule at once
12Calculated continuation dates avoid a standing gapinteractionapiproposed
An isolated workspace contains the records and current versions needed for the case.
Steps
Compute a continuation from a term ending September 30 and evaluate coverage on September 30 and October 1.
Expected
The old term covers the first date and the continuation covers the next date without a grace interval.
Data
Separate fixture records for the accepted and refused operations.
Source
services-membership:modules/terms/tests/unit/term-rules.spec.ts#term rules: the rules of 1.0 beyond its spec cases › extends an early renewal from the current end, whatever the basis,services-membership:modules/terms/tests/unit/status.spec.ts#holding status: the precedence of §2 › puts suspended over grace
13Workspace authority gates this capabilitypermissionapinegativeproposed
An isolated workspace contains the records and current versions needed for the case.
Steps
Exercise the capability’s exposed operations with its read-only and management callers, then repeat with application access removed, an unlicensed workspace and an unavailable workspace.
Expected
Each named operation requires its declared authority; admission failures occur before any record or calculated result is exposed.
Data
Separate fixture records for the accepted and refused operations.
Source
services-membership:tests/unit/route-authorization.spec.ts#route authorization: every Membership operation names its permission › requires membership.structure.read of every structure read and membership.structure.manage of every change,services-membership:modules/configuration/aws/api/configuration.routes.ts:configurationModuleRoutes,services-membership:tests/e2e/terms-api.e2e.spec.ts#the terms API, end to end in process › refuses a caller who holds no key in the tenant
14Generated periods preserve repeatable datesinvariantunittest