---
id: STATE-PFM-ELG-001
title: Rule standing
object: DOM-PFM-ELG-001
product_area: platform
module: eligibility
revision: 1
status: draft
design_intent: confirmed
origin: >-
  Eligibility Engine architecture (governance and lifecycle chapter 14),
  approved by Andrew 2026-10-17 as recorded in PLAT-M11 "Decisions"
implementation_evidence: observed
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
states:
  - name: active
    meaning: 'Accepts authorship, publication and new consumer connections.'
  - name: deprecated
    meaning: >-
      Existing consumers still evaluate, but new connections are refused; a
      replacement can be designated.
  - name: archived
    meaning: >-
      Retains readable history while refusing draft editing, new connections and
      reactivation; archiving first requires cleared active dependencies.
  - name: deleted
    meaning: >-
      An unreleased definition and its dependent draft storage have been
      removed. Deletion provides no guarantee that its key stays reserved.
transitions:
  - from: active
    to: deprecated
    trigger: deprecateEligibilityDefinition
    guard: >-
      Retire authority, a matching supplied version and any replacement active,
      published and different from this rule.
    side_effects:
      - Save the replacement reference
      - Write one transactional change event
    who: Rule administrator
    provenance: observed
    source: >-
      services-platform:modules/eligibility/services/governance/lifecycle.ts:deprecateDefinitionByKey
  - from: active
    to: archived
    trigger: archiveEligibilityDefinition
    guard: >-
      Retire authority and no active binding or live draft or published
      reference.
    side_effects:
      - Append the change event atomically
    who: Rule administrator
    provenance: observed
    source: >-
      services-platform:modules/eligibility/services/governance/lifecycle.ts:archiveDefinitionByKey
  - from: deprecated
    to: archived
    trigger: archiveEligibilityDefinition
    guard: Apply the same dependency checks used for active-rule archive.
    side_effects:
      - Append the archive change event
    who: Rule administrator
    provenance: observed
    source: 'services-platform:modules/eligibility/lifecycle.ts:DEFINITION_TRANSITIONS'
  - from: deprecated
    to: active
    trigger: restoreEligibilityDefinition
    guard: Retire authority and a matching version when supplied.
    side_effects:
      - Clear the replacement
      - Record restoration
    who: Rule administrator
    provenance: observed
    source: >-
      services-platform:modules/eligibility/services/governance/lifecycle.ts:restoreDefinitionByKey
  - from: archived
    to: active
    trigger: restoreEligibilityDefinition
    guard: Retire authority and a matching version when supplied.
    side_effects:
      - Clear the replacement
      - Permit editing and connections again
      - Record restoration
    who: Rule administrator
    provenance: observed
    source: 'services-platform:modules/eligibility/lifecycle.ts:DEFINITION_TRANSITIONS'
  - from: active
    to: deleted
    trigger: deleteEligibilityDefinition
    guard: >-
      Retire authority, no released version, no binding or reference and no
      resolved conversion review.
    side_effects:
      - Remove draft dependencies and plans
      - Record deletion
    who: Rule administrator
    provenance: observed
    source: >-
      services-platform:modules/eligibility/services/governance/lifecycle.ts:deleteDefinitionByKey
invalid:
  - from: archived
    to: deprecated
    why: Restore to active before deprecating an archived definition.
  - from: deleted
    to: active
    why: A deleted definition has no restoration transition.
  - from: active
    to: deleted
    why: >-
      A definition with any published release cannot use deletion; archiving
      preserves its history.
concurrency: >-
  Lifecycle mutations lock the definition within their transaction. A supplied
  version protects the read; omission uses the current row. Archive and new
  binding serialize through the rule lock.
invariants:
  - INV-DOM-PFM-ELG-001-06
  - INV-DOM-PFM-ELG-001-07
  - INV-DOM-PFM-ELG-001-08
  - INV-DOM-PFM-ELG-001-09
evidence:
  - >-
    services-platform at ad3f6a6: modules/eligibility/lifecycle.ts;
    services/governance/lifecycle.ts; aws/api/definitions.routes.ts;
    aws/api/eligibility.schemas.ts (lifecycleRequestSchema); docs/eligibility.md
    §2, §7.6.
---
# Rule standing

## The Lifecycle

```mermaid
stateDiagram-v2
  active --> deprecated
  active --> archived
  deprecated --> archived
  deprecated --> active
  archived --> active
  active --> deleted
```

## Transitions Explained

Definition standing describes whether the rule accepts work, independently of release status. Deprecation can guide consumers toward a replacement; archive retains history. Optional version preconditions remain a recorded implementation gap.

## What Cannot Happen

Restore to active before deprecating an archived definition. A deleted definition has no restoration transition. A definition with any published release cannot use deletion; archiving preserves its history.

## Concurrency and Timing

Lifecycle mutations lock the definition within their transaction. A supplied version protects the read; omission uses the current row. Archive and new binding serialize through the rule lock.
