---
id: TST-ACC-REC-029
title: Stable refusal responses
kind: api-lifecycle
product_area: accounting
module: reconciliation
revision: 1
status: draft
source_sha:
  services-accounting: f47cb263875bbc0c5640fba7dae6785ec32695f8
repository: services-accounting
files:
  - modules/reconciliation/tests/e2e/refusal-codes.e2e.spec.js
implements:
  - ATS-ACC-REC-020-06
environment: local
implementation_state: implemented
latest_result: not-run
latest_run_at: null
latest_run_ref: null
conformance: not-verified
estimated_minutes: 5
isolation: Suite-owned workspace fixtures and deterministic records removed by suite cleanup.
evidence:
  - 'services-accounting:modules/reconciliation/tests/e2e/refusal-codes.e2e.spec.js'
  - >-
    Declared test doubles: Doubled: the signing key pair, which is the run's own. The tenant is the spec's own
    (`testId`), registered in the local `platform.tenants` stand-in and removed in `after`. proves_controls:
    [TC-PI-001]
bindings:
  - scenario: ATS-ACC-REC-020-06
    assertions:
      - >-
        services-accounting:modules/reconciliation/tests/e2e/refusal-codes.e2e.spec.js#answers a payout edit
        whose body breaks its schema 400 validation_failed
      - >-
        services-accounting:modules/reconciliation/tests/e2e/refusal-codes.e2e.spec.js#answers an unknown
        payout 404 not_found
      - >-
        services-accounting:modules/reconciliation/tests/e2e/refusal-codes.e2e.spec.js#answers a payout edit
        at a version already moved on 409 stale_version
      - >-
        services-accounting:modules/reconciliation/tests/e2e/refusal-codes.e2e.spec.js#answers a cursor the
        list did not answer 400 invalid_request
---

# Stable refusal responses

## Verification Boundary

This suite dispatches Accounting routes locally with enforcing security over a real test database. Its route responses and retained records form the verification boundary.

## What This Suite Proves

The executable assertions identified in the binding records supply the registered scenario observations. When a scenario names several suites, this suite supplies its listed assertions and does not independently establish every clause.

## What It Does Not Prove

Deployed infrastructure, live console behavior and shared scheduling delivery are outside this local boundary.

## Real Dependencies and Test Doubles

PostgreSQL, migrations and the exercised production code are real. Fixtures supply the financial world and caller context; deterministic setup and owner-side inspection do not replace database enforcement.

## Must Not Be Doubled

The exercised database constraints, transactional services and route enforcement remain real. Replacing them would remove the boundary this suite registers.
