---
id: TST-ACC-PRD-028
title: Product and setup API access boundaries
kind: api-lifecycle
product_area: accounting
module: products
revision: 1
status: draft
product_intent: proposed
implementation_evidence: observed
source_sha:
  services-accounting: f47cb263875bbc0c5640fba7dae6785ec32695f8
repository: services-accounting
files:
  - modules/products/tests/e2e/products-security.e2e.spec.js
implements:
  - ATS-ACC-PRD-001-03
  - ATS-ACC-PRD-002-13
  - ATS-ACC-PRD-003-02
  - ATS-ACC-PRD-003-03
  - ATS-ACC-PRD-004-07
  - ATS-ACC-PRD-005-06
  - ATS-ACC-PRD-006-09
  - ATS-ACC-PRD-015-12
  - ATS-ACC-PRD-017-04
  - ATS-ACC-PRD-017-05
  - FAS-ACC-PRD-01-04
environment: local
implementation_state: implemented
latest_result: not-run
latest_run_at: null
latest_run_ref: null
conformance: not-verified
estimated_minutes: 5
estimation_note: Planning estimate; no runtime measurement is claimed.
isolation: 'Suite-named local workspaces, isolated fixture records and explicit cleanup or rollback.'
evidence:
  - 'services-accounting:modules/products/tests/e2e/products-security.e2e.spec.js'
assertion_bindings:
  - scenario: ATS-ACC-PRD-001-03
    assertions:
      - >-
        services-accounting:modules/products/tests/e2e/products-security.e2e.spec.js#reads the product type
        registry
    provenance: test
    source: 'services-accounting:modules/products/tests/e2e/products-security.e2e.spec.js'
  - scenario: ATS-ACC-PRD-002-13
    assertions:
      - >-
        services-accounting:modules/products/tests/e2e/products-security.e2e.spec.js#is refused creating a
        product
      - 'services-accounting:modules/products/tests/e2e/products-security.e2e.spec.js#creates a product'
    provenance: test
    source: 'services-accounting:modules/products/tests/e2e/products-security.e2e.spec.js'
  - scenario: ATS-ACC-PRD-003-02
    assertions:
      - >-
        services-accounting:modules/products/tests/e2e/products-security.e2e.spec.js#answers tenant B 404 for
        tenant A’s product
      - >-
        services-accounting:modules/products/tests/e2e/products-security.e2e.spec.js#answers tenant B an empty
        list of products
      - >-
        services-accounting:modules/products/tests/e2e/products-security.e2e.spec.js#leaves tenant A’s product
        as it was
    provenance: test
    source: 'services-accounting:modules/products/tests/e2e/products-security.e2e.spec.js'
  - scenario: ATS-ACC-PRD-003-03
    assertions:
      - 'services-accounting:modules/products/tests/e2e/products-security.e2e.spec.js#reads the products'
      - >-
        services-accounting:modules/products/tests/e2e/products-security.e2e.spec.js#is refused reading a
        product’s accounting setup
    provenance: test
    source: 'services-accounting:modules/products/tests/e2e/products-security.e2e.spec.js'
  - scenario: ATS-ACC-PRD-004-07
    assertions:
      - >-
        services-accounting:modules/products/tests/e2e/products-security.e2e.spec.js#is refused replacing a
        product
    provenance: test
    source: 'services-accounting:modules/products/tests/e2e/products-security.e2e.spec.js'
  - scenario: ATS-ACC-PRD-005-06
    assertions:
      - >-
        services-accounting:modules/products/tests/e2e/products-security.e2e.spec.js#is refused retiring a
        product
    provenance: test
    source: 'services-accounting:modules/products/tests/e2e/products-security.e2e.spec.js'
  - scenario: ATS-ACC-PRD-006-09
    assertions:
      - >-
        services-accounting:modules/products/tests/e2e/products-security.e2e.spec.js#is refused deleting a
        product
    provenance: test
    source: 'services-accounting:modules/products/tests/e2e/products-security.e2e.spec.js'
  - scenario: ATS-ACC-PRD-015-12
    assertions:
      - >-
        services-accounting:modules/products/tests/e2e/products-security.e2e.spec.js#is refused reading a
        product’s accounting setup
      - >-
        services-accounting:modules/products/tests/e2e/products-security.e2e.spec.js#is refused changing a
        product’s accounting setup
      - >-
        services-accounting:modules/products/tests/e2e/products-security.e2e.spec.js#is refused deleting a
        product’s accounting setup
      - >-
        services-accounting:modules/products/tests/e2e/products-security.e2e.spec.js#changes a product’s
        accounting setup
      - >-
        services-accounting:modules/products/tests/e2e/products-security.e2e.spec.js#reads a product’s
        accounting setup
    provenance: test
    source: 'services-accounting:modules/products/tests/e2e/products-security.e2e.spec.js'
  - scenario: ATS-ACC-PRD-017-04
    assertions:
      - >-
        services-accounting:modules/products/tests/e2e/products-security.e2e.spec.js#refuses tenant B a bulk
        save naming tenant A’s product as unknown
    provenance: test
    source: 'services-accounting:modules/products/tests/e2e/products-security.e2e.spec.js'
  - scenario: ATS-ACC-PRD-017-05
    assertions:
      - >-
        services-accounting:modules/products/tests/e2e/products-security.e2e.spec.js#is refused listing the
        products without an accounting setup
      - >-
        services-accounting:modules/products/tests/e2e/products-security.e2e.spec.js#is refused saving
        accounting setups in bulk
      - >-
        services-accounting:modules/products/tests/e2e/products-security.e2e.spec.js#saves accounting setups
        in bulk
      - >-
        services-accounting:modules/products/tests/e2e/products-security.e2e.spec.js#lists the products
        without an accounting setup
    provenance: test
    source: 'services-accounting:modules/products/tests/e2e/products-security.e2e.spec.js'
coverage_note: Scenario references name existing assertion evidence; broader unexecuted variants remain findings.
---

# Product and setup API access boundaries

## Verification Boundary

Requests pass through the local enforcing Accounting dispatcher, request mapping and persistence to PostgreSQL. This is local API evidence rather than a deployed network run.

## What This Suite Proves

The enforcing dispatcher checks workspace isolation and separate product and setup permission families.

## What It Does Not Prove

Local execution does not prove deployed infrastructure, downstream purchase behavior, real domain extension completion or atomic remote-template recovery.

## Real Dependencies and Test Doubles

The composed handler, permission evaluation and Accounting database are real. Local signing keys and Platform workspace registration stand in for external infrastructure.

## Must Not Be Doubled

Do not double PostgreSQL, row-level security, transaction boundaries, constraints or the persistence implementation when claiming these local guarantees.
