---
id: CAP-MBR-STR-014
title: Record policies for future package changes
feature: FEAT-MBR-STR-04
product_area: membership
module: structure
revision: 1
status: draft
product_intent: proposed
implementation_evidence: partially-observed
supersedes:
  - react-console acceptance inventory CAP-MBR-CFG-009
source_sha:
  services-membership: 5994c270e8a37a30f848e99ba5b5ee6b87c08893
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
intent_sources: []
purpose: >-
  Staff describe proposed upgrade and downgrade treatment in policy sets that future change operations can
  use.
outcomes:
  - Packages can reference a recognizable change policy set.
  - Stored policies express treatment choices without implying an implemented change flow.
concepts:
  - CON-MBR-STR-004
actors:
  - ACT-MBR-001
  - ACT-MBR-002
surfaces:
  - api
preconditions: []
postconditions: []
permissions:
  - key: membership.configuration.read
    where_checked: api
    scope: tenant
  - key: membership.configuration.manage
    where_checked: api
    scope: tenant
  - key: membership.application.access
    where_checked: api
    scope: tenant
rules:
  - id: BR-CAP-MBR-STR-014-01
    statement: >-
      A policy set accepts up to 200 policies, and a submitted list removes the earlier policies and allocates
      new identities for its replacements.
    kind: policy
    enforced_at:
      - service
    must_prove: true
    provenance: observed
    source: >-
      services-membership:modules/configuration/services/configuration/configuration-records.ts:policySetResource
    origin: none
  - id: BR-CAP-MBR-STR-014-02
    statement: 'Each policy side may name a type, a package or neither, but cannot name both a type and a package.'
    kind: validation
    enforced_at:
      - database
    must_prove: true
    provenance: observed
    source: 'services-membership:modules/configuration/db/change-policies.table.ts:changePolicies'
    origin: none
  - id: BR-CAP-MBR-STR-014-03
    statement: >-
      Policies record permitted actors, application and approval choices, timing, term treatment, unused-value
      treatment, downgrade treatment and minimum fees.
    kind: policy
    enforced_at:
      - service
    must_prove: false
    provenance: observed
    source: 'services-membership:modules/configuration/services/configuration/configuration-records.ts:policyContent'
    origin: none
  - id: BR-CAP-MBR-STR-014-04
    statement: 'Policy type, package and fee-product references are stored without existence checks.'
    kind: validation
    enforced_at:
      - service
    must_prove: false
    provenance: observed
    source: 'services-membership:modules/configuration/services/configuration/configuration-records.ts:policyContent'
    origin: none
  - id: BR-CAP-MBR-STR-014-05
    statement: 'Upgrade and downgrade processing is unavailable, and no operational consumer reads the stored policies.'
    kind: policy
    enforced_at:
      - service
    must_prove: false
    provenance: documented
    source: 'services-membership:docs/migrations/membership-core/README.md#Tables and migrations'
    origin: none
scenarios:
  - id: SC-CAP-MBR-STR-014-01
    given: The intended changes include an immediate upgrade and a renewal-time downgrade.
    when: Staff save both cases in a policy set.
    then: Reading the set returns the selected cases and default treatment values.
    provenance: test
    source: >-
      services-membership:tests/acceptance/configuration/MBR-ACC-0106.acceptance.ts#MBR-ACC-0106: Change
      policy sets are kept exactly as written: every policy field round-trips with its defaults, the list is
      rewritten whole with new ids, two hundred policies fit and the two-hundred-and-first does not, a policy
      naming both a type and a package on one side is refused raw, and ids nobody checks are accepted
edge_cases:
  - id: SC-CAP-MBR-STR-014-02
    given: A member requests an immediate change of offering.
    when: The requested upgrade reaches the current product boundary.
    then: The stored policy has no implemented processing consumer.
    provenance: documented
    source: 'react-console:acceptance/membership/journeys/configuration/MBR-ACC-0107.json'
constraints: []
depends_on:
  - CAP-MBR-STR-018
related:
  - CAP-MBR-STR-012
journeys: []
open_questions: []
evidence:
  - 'services-membership: Examination of change policy tables, request schema and persistence.'
  - 'services-membership: Examination of acceptance journeys MBR-ACC-0106 and 0107; the membership-core record.'
  - 'services-membership:docs/migrations/membership-core/README.md'
  - 'services-membership:modules/configuration/db/change-policies.table.ts'
  - 'services-membership:modules/configuration/services/configuration/configuration-records.ts'
controls: [TC-AVL-002, TC-AVL-003, 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-007, TC-IAM-001, TC-IAM-002, TC-IAM-004, TC-IAM-005, TC-LOG-001, TC-LOG-002, TC-LOG-003, TC-LOG-004, TC-PI-001, TC-PI-003, TC-SEC-001, TC-SEC-004, TC-TEN-001, TC-TEN-002, TC-TEN-003]
---

# Record policies for future package changes

## Purpose

Staff describe proposed upgrade and downgrade treatment in policy sets that future change operations can use.

## How It Works

An administrator creates a named policy set and adds its change cases. A case describes the source and target offering choices. Either side can be unspecified, or can select a type or package. Treatment settings describe timing, retained term value and possible application or approval needs. Saving the list replaces the earlier cases and their identities. The service retains these settings without processing upgrades or downgrades. It also does not verify the referenced offerings and fee products. A package can point to the set as preparation for later behavior. Staff must distinguish that preparation from an available member action. The product should define matching precedence and reference validation when change processing is designed.

## Relationships

- Packages select the policy set intended for their future changes.
- Shared configuration safeguards govern the set’s identity, version and removal.
