---
id: ADR-MBR-MEM-011
title: Declare Custom Fields Through Shared Metadata
product_area: membership
module: memberships
revision: 1
status: proposed
design_intent: proposed
source_sha:
  services-membership: 5994c270e8a37a30f848e99ba5b5ee6b87c08893
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
decision: >-
  Membership registration enables shared custom fields; other module records
  have no declared value capability, including the currently unregistered
  application.
constrains:
  - DOM-MBR-MEM-001
  - DOM-MBR-MEM-002
  - DOM-MBR-MEM-003
  - DOM-MBR-MEM-004
  - DOM-MBR-MEM-005
  - DOM-MBR-MEM-006
origin: >-
  R2-ARCH-001 (Andrew, 2026-10-19): custom fields are opt-in per entity;
  memberships, organizational units and membership applications are named
alternatives:
  - option: An entity-specific custom field mechanism
    why_not: >-
      A module-specific mechanism would conflict with the shared capability
      requirement.
  - option: Custom fields on terms or affiliations
    why_not: >-
      Adding term or affiliation fields would require an explicit entity
      selection by Product.
consequences:
  - >-
    Membership values have storage and evidence but no available staff or import
    write path.
  - >-
    The application declaration gap conflicts with the standard’s named entity
    list.
  - >-
    Reporting can reconstruct stored membership custom values as
    characteristics.
supersedes: []
evidence:
  - >-
    services-membership at 5994c270: AGENTS.md (R2-ARCH-001);
    modules/memberships/metadata/memberships.object.ts;
    db/membership-custom-field-values*.table.ts
---

# Declare Custom Fields Through Shared Metadata

## Context

The custom-field standard selects participating entities through registration. Existing Membership storage must be read alongside that declaration.

## Decision

Membership registration enables shared custom fields; other module records have no declared value capability, including the currently unregistered application.

## Alternatives Considered

An entity-specific custom field mechanism: A module-specific mechanism would conflict with the shared capability requirement.

Custom fields on terms or affiliations: Adding term or affiliation fields would require an explicit entity selection by Product.

## Consequences

Membership values have storage and evidence but no available staff or import write path. The application declaration gap conflicts with the standard’s named entity list. Reporting can reconstruct stored membership custom values as characteristics.
