---
id: TST-ACC-REC-027
title: Matching workspace commands and access
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/reconciliation-matching.e2e.spec.js
implements:
  - ATS-ACC-REC-008-01
  - ATS-ACC-REC-008-03
  - ATS-ACC-REC-008-04
  - ATS-ACC-REC-008-06
  - ATS-ACC-REC-008-09
  - ATS-ACC-REC-008-10
  - ATS-ACC-REC-009-02
  - ATS-ACC-REC-009-04
  - ATS-ACC-REC-009-07
  - ATS-ACC-REC-009-09
  - ATS-ACC-REC-010-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/reconciliation-matching.e2e.spec.js'
  - >-
    Declared test doubles: Doubled: the signing key pair, which is the run's own. Never doubled: the
    dispatcher, the route table, the verification, the evaluation or the persistence services. Every call acts
    in tenants of the spec's own (`testId`), registered in the local `platform.tenants` stand-in and removed
    in `after`. proves_controls: [TC-IAM-001, TC-AZ-002, TC-TEN-002, TC-PI-001, TC-PI-002]
bindings:
  - scenario: ATS-ACC-REC-008-01
    assertions:
      - >-
        services-accounting:modules/reconciliation/tests/e2e/reconciliation-matching.e2e.spec.js#refuses a
        create without the header with 400
  - scenario: ATS-ACC-REC-008-03
    assertions:
      - >-
        services-accounting:modules/reconciliation/tests/e2e/reconciliation-matching.e2e.spec.js#creates a
        draft batch over the payout, its difference minus the payout
  - scenario: ATS-ACC-REC-008-04
    assertions:
      - >-
        services-accounting:modules/reconciliation/tests/e2e/reconciliation-matching.e2e.spec.js#answers the
        captures RB-10001 holds apart, with their holder
  - scenario: ATS-ACC-REC-008-06
    assertions:
      - >-
        services-accounting:modules/reconciliation/tests/e2e/reconciliation-matching.e2e.spec.js#answers the
        default window, 14 days before the payout to 3 days after
  - scenario: ATS-ACC-REC-008-09
    assertions:
      - >-
        services-accounting:modules/reconciliation/tests/e2e/reconciliation-matching.e2e.spec.js#lists the
        operational batch the remaining claim came from
      - >-
        services-accounting:modules/reconciliation/tests/e2e/reconciliation-matching.e2e.spec.js#lists every
        event of the batch, oldest first
  - scenario: ATS-ACC-REC-008-10
    assertions:
      - >-
        services-accounting:modules/reconciliation/tests/e2e/reconciliation-matching.e2e.spec.js#lets a
        principal with the read key alone read the batch
      - >-
        services-accounting:modules/reconciliation/tests/e2e/reconciliation-matching.e2e.spec.js#offers the
        reader no action
      - >-
        services-accounting:modules/reconciliation/tests/e2e/reconciliation-matching.e2e.spec.js#refuses the
        reader a create with 403
      - >-
        services-accounting:modules/reconciliation/tests/e2e/reconciliation-matching.e2e.spec.js#answers 404
        for tenant A’s batch in tenant B
  - scenario: ATS-ACC-REC-009-02
    assertions:
      - >-
        services-accounting:modules/reconciliation/tests/e2e/reconciliation-matching.e2e.spec.js#refuses a
        claim of an item another batch holds with 409 item_held, naming that batch and its preparer
  - scenario: ATS-ACC-REC-009-04
    assertions:
      - >-
        services-accounting:modules/reconciliation/tests/e2e/reconciliation-matching.e2e.spec.js#stores each
        claim with its tier, its explanation, its operational batch and who claimed it
  - scenario: ATS-ACC-REC-009-07
    assertions:
      - >-
        services-accounting:modules/reconciliation/tests/e2e/reconciliation-matching.e2e.spec.js#refuses a
        claim at a version already moved on with 409
  - scenario: ATS-ACC-REC-009-09
    assertions:
      - >-
        services-accounting:modules/reconciliation/tests/e2e/reconciliation-matching.e2e.spec.js#refuses the
        reader a claim with 403
  - scenario: ATS-ACC-REC-010-06
    assertions:
      - >-
        services-accounting:modules/reconciliation/tests/e2e/reconciliation-matching.e2e.spec.js#leaves the
        removed fee withdrawn
---

# Matching workspace commands and access

## 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.
