---
id: TST-PFM-LLM-007
title: API lifecycle for AI Limits
kind: api-lifecycle
product_area: platform
module: llm
revision: 1
status: draft
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
repository: services-platform
files:
  - modules/llm/tests/e2e/llm-limits.e2e.spec.js
implements:
  - ATS-PFM-LLM-013-01
  - ATS-PFM-LLM-013-04
  - ATS-PFM-LLM-013-05
  - ATS-PFM-LLM-013-06
  - ATS-PFM-LLM-013-08
environment: local
implementation_state: implemented
latest_result: not-run
latest_run_at: null
latest_run_ref: null
conformance: not-verified
estimated_minutes: 3
isolation: Prepared local test database with suite-owned records and scoped cleanup.
evidence:
  - provenance: test
    source: 'services-platform:modules/llm/tests/e2e/llm-limits.e2e.spec.js'
source_boundary:
  provenance: observed
  source: 'services-platform:modules/llm/tests/e2e/llm-limits.e2e.spec.js'
---

# API lifecycle for AI Limits

## Verification Boundary

The suite sends requests through the real in-process dispatcher, route permissions and handlers against a prepared local database. It does not exercise API Gateway or a deployed network.

## What This Suite Proves

Limit changes require management authority. Changed saves need the inspected version. Replaying stored values adds no history. Allowance change affects the current period only. Preview changes no saved state. Combined bindings require every named suite; a component assertion alone does not establish the full experiment.

## What It Does Not Prove

The suite does not establish browser behavior, deployed routing, live model quality or actual recipient inbox delivery.

## Real Dependencies and Test Doubles

The in-process dispatcher, declared routes, signed-context verification, permission evaluation, handlers, module persistence and PostgreSQL are real. The run uses its own signing key rather than production signing material.

## Must Not Be Doubled

Retain PostgreSQL constraints, transaction behavior and the production persistence or dispatcher path under test. A scripted provider must not replace accounting or authorization.
