---
id: TST-PFM-ELG-481
title: Eligibility lifecycle checks
kind: unit
product_area: platform
module: eligibility
revision: 1
status: draft
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
repository: services-platform
files:
  - modules/eligibility/tests/unit/lifecycle.spec.js
implements:
  - ATS-PFM-ELG-005-04
environment: mock
implementation_state: implemented
latest_result: not-run
conformance: not-verified
estimated_minutes: 1
isolation: One process with suite-local inputs.
evidence:
  - provenance: test
    source: 'services-platform:modules/eligibility/tests/unit/lifecycle.spec.js'
    cases:
      - >-
        allows exactly publish, supersede and retire, and refuses every other
        move between the four statuses
      - >-
        names a status for every status of the table, so no status is left
        without a rule
      - >-
        refuses to bring a retired version back, naming its number and both
        statuses
      - answers no refusal for an allowed move
      - lets only a draft change
      - 'republishes any version that was ever published, and never a draft'
      - >-
        allows deprecate, archive and restore, and refuses every other move
        between the three statuses
      - names a status for every status of the table
      - 'refuses to deprecate an archived definition, naming its key'
      - >-
        accepts changes to a definition that is not archived, and none to one
        that is
      - >-
        allows exactly the moves forward and the expiry of a settled run, and
        refuses every other
      - names a status for every status of the table
      - 'counts succeeded, failed and cancelled as settled, and nothing else'
      - overlaps two open ranges
      - >-
        does not overlap a range ending on the day the next one starts, the end
        being exclusive
      - overlaps a range ending the day after the next one starts
      - 'overlaps a bounded range inside an open one, in either order'
      - does not overlap two bounded ranges with a gap between them
      - contains its first day
      - does not contain its end day
      - contains every day when both ends are open
      - refuses a range that ends on the day it starts
      - accepts a range open at either end
      - accepts a new following binding of an active definition
      - accepts a new binding pinned to a published version of the definition
      - >-
        accepts a new binding pinned to a superseded version, which is still
        immutable
      - refuses a new binding of an archived definition
      - refuses a new binding of a deprecated definition
      - accepts a change to an existing binding of a deprecated definition
      - accepts suspending a binding of an archived definition
      - refuses making a binding of an archived definition active again
      - refuses a pinned binding that names no version
      - refuses a following binding that names a version
      - refuses a pin of another definition’s version
      - refuses a pin of a version the tenant does not have
      - refuses a pin of a draft
      - refuses a new pin of a retired version
      - 'keeps an unchanged pin of a version retired since, without reading it'
  - provenance: documented
    source: >-
      services-platform:modules/eligibility/tests/unit/lifecycle.spec.js:suite
      header
    note: >-
      The source header describes the verification boundary and declared
      substitutions.
proof_limit: >-
  Only the named scenario checkpoints have a verified source binding; execution
  has not been attempted.
---

# Eligibility lifecycle checks

## Verification Boundary

This suite checks isolated decisions and validation using the imported inputs. It cannot establish a complete service or browser lifecycle.

## What This Suite Proves

The mapped scenarios identify the capability and feature checkpoints this file exercises. The source test titles preserve the assertion-level evidence.

## What It Does Not Prove

Registration supplies no execution result or conformance decision. Passing isolated checks does not establish deployed dependencies or cross-application delivery.

## Real Dependencies and Test Doubles

The suite exercises its real module dependencies and declares no test doubles. Its source header and imports identify the database, transaction and service boundaries it uses.

## Must Not Be Doubled

The decision or validator being asserted remains real; returning the expected answer from a substitute defeats the check.
