File size: 22,419 Bytes
eff6797
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
# Scientific Verification Inventory — API Subsystem

This document provides a comprehensive scientific audit inventory of the API implementation for the Privacy-Preserving Cross-Bank Fraud Detection platform. It systematically analyzes every component, endpoint specification, request/response contract, invariant, risk, edge case, engineering claim, and appropriate verification methodology.

---

## 1. Middleware & System Infrastructure Inventory

### 1.1 Global Exception Handler (RFC 7807)

* **Component:** `app.main.global_exception_handler`
* **Purpose:** Ensures all unhandled runtime exceptions return structured JSON formatted per RFC 7807 (`application/problem+json`) when requested or as standard JSON error responses.
* **Endpoint Specification:** Global error interceptor across all HTTP endpoints.
* **Request/Response Contract:**
  * *Request:* Any failing HTTP request.
  * *Response:* `HTTP 500 Internal Server Error`, Content-Type: `application/problem+json` or `application/json`.
  * *Body:* `{"type": "https://cfi-platform.org/errors/<ExcName>", "title": "Internal Server Error", "status": 500, "detail": "<msg>", "instance": "<path>"}`.
* **Expected Invariant:** Unhandled exceptions NEVER leak plain-text stack traces or non-JSON responses.
* **Possible Implementation Risks:** Exception string details might inadvertently leak internal variable names if not sanitized.
* **Edge Cases:** Exceptions raised during streaming responses or WebSocket handshakes after headers are sent.
* **Engineering Claim Being Made:** "All unhandled runtime errors conform to RFC 7807 problem details contracts without exception."
* **Appropriate Verification Methodology:** Adversarial property testing injecting unexpected runtime exceptions across routes.

---

### 1.2 Content-Type Enforcement Middleware

* **Component:** `app.main.ContentTypeMiddleware`
* **Purpose:** Protects mutating endpoints (`POST`, `PUT`, `PATCH`) by enforcing `Content-Type: application/json`.
* **Endpoint Specification:** Global middleware targeting mutating routes (excluding exempt paths like `/docs`, `/openapi.json`, `/ws/`).
* **Request/Response Contract:**
  * *Request:* Mutating request with non-JSON or missing `Content-Type`.
  * *Response:* `HTTP 415 Unsupported Media Type`, Content-Type: `application/problem+json`.
  * *Body:* `{"type": ".../UnsupportedMediaType", "title": "Unsupported Media Type", "status": 415, "detail": "...", "received": "<ct>", "instance": "<path>"}`.
* **Expected Invariant:** Non-JSON bodies sent to mutating endpoints are rejected at the edge before route handlers execute.
* **Possible Implementation Risks:** Overly strict matching breaking multipart form-data file uploads if paths are not exempted.
* **Edge Cases:** Binary payloads (`application/octet-stream`), empty bodies, `text/xml`, `application/x-www-form-urlencoded`.
* **Engineering Claim Being Made:** "Mutating endpoints strictly reject unsupported media types with HTTP 415 before payload parsing."
* **Appropriate Verification Methodology:** Fuzz testing with arbitrary binary and non-JSON content-type headers.

---

### 1.3 Distributed W3C Trace Context Middleware

* **Component:** `app.main.W3CTraceContextMiddleware`
* **Purpose:** Implements OpenTelemetry W3C `traceparent` specification for cross-service distributed tracing.
* **Endpoint Specification:** Applied to all incoming HTTP requests.
* **Request/Response Contract:**
  * *Request Header:* `traceparent: 00-{trace_id}-{span_id}-{flags}` (optional).
  * *Response Header:* `traceparent: 00-{trace_id}-{span_id}-01`.
* **Expected Invariant:** Every HTTP response carries a valid, deterministic W3C `traceparent` header.
* **Possible Implementation Risks:** Malformed incoming `traceparent` headers causing regex/split indexing errors.
* **Edge Cases:** Headers with invalid version digits, incorrect hex lengths, or empty strings.
* **Engineering Claim Being Made:** "All API responses carry W3C-compliant distributed trace context headers."
* **Appropriate Verification Methodology:** Header injection testing with valid and malformed `traceparent` strings.

---

### 1.4 API Version Lifecycle Middleware

* **Component:** `app.main.APIVersionLifecycleMiddleware`
* **Purpose:** Attaches RFC 8594 `Deprecation` and `Sunset` headers along with `X-API-Version` to support version governance.
* **Endpoint Specification:** Global HTTP response modifier.
* **Request/Response Contract:**
  * *Response Headers:* `X-API-Version: v1`, `Deprecation: <HTTP-date>` (optional), `Sunset: <HTTP-date>` (optional).
* **Expected Invariant:** Every response header contains explicit API version identification.
* **Possible Implementation Risks:** Unset deprecation date configurations omitting RFC headers.
* **Edge Cases:** CORS preflight `OPTIONS` requests needing header exposure in `Access-Control-Expose-Headers`.
* **Engineering Claim Being Made:** "All API endpoints explicitly declare their version lifecycle metadata via RFC 8594 headers."
* **Appropriate Verification Methodology:** HTTP response header assertion across GET/POST/OPTIONS calls.

---

### 1.5 In-App mTLS Peer Verification Middleware

* **Component:** `app.main.MTLSVerificationMiddleware`
* **Purpose:** Validates X.509 client certificate fingerprints and CRL revocation status at the application layer.
* **Endpoint Specification:** Applied to sensitive banking routes (`/api/v1/predict`, `/api/v1/training`, `/api/v1/banks`).
* **Request/Response Contract:**
  * *Request Headers:* `X-SSL-Client-Verify: SUCCESS`, `X-Client-Cert-SHA256: <fingerprint>`.
  * *Response:* `HTTP 403 Forbidden` if verification fails or certificate fingerprint is revoked in CRL.
* **Expected Invariant:** Requests with invalid or revoked client certificate fingerprints are denied access.
* **Possible Implementation Risks:** Mismatch between proxy header naming and application middleware extraction keys.
* **Edge Cases:** Revoked serial numbers present in CRL, header spoofing when proxy is bypassed.
* **Engineering Claim Being Made:** "Sensitive banking routes enforce in-app mTLS peer validation against active CRLs."
* **Appropriate Verification Methodology:** Security audit tests sending revoked and unverified certificate headers.

---

### 1.6 L7 Application-Layer DDoS Protection Middleware

* **Component:** `app.main.DDoSProtectionMiddleware`
* **Purpose:** Implements sliding-window token bucket IP rate limiting for burst attack detection and flood prevention.
* **Endpoint Specification:** Applied to all incoming HTTP routes per client IP address.
* **Request/Response Contract:**
  * *Response (when throttled):* `HTTP 429 Too Many Requests`, Headers: `Retry-After: 10`, `X-DDoS-Throttled: true`.
  * *Body:* `{"type": ".../DDoSThrottled", "title": "Volumetric Flood Throttling Triggered", "status": 429, ...}`.
* **Expected Invariant:** Client IPs exceeding 100 requests within a 10-second window are throttled immediately.
* **Possible Implementation Risks:** Shared NAT IP addresses throttling multiple legitimate users simultaneously.
* **Edge Cases:** Rapid burst of 150 requests in 1 second, spoofed `X-Forwarded-For` headers.
* **Engineering Claim Being Made:** "The application layer protects against L7 volumetric floods using sliding-window rate limiting."
* **Appropriate Verification Methodology:** High-throughput concurrent burst testing to verify HTTP 429 enforcement.

---

### 1.7 Prometheus Telemetry Instrumentator

* **Component:** `app.infrastructure.telemetry.setup_telemetry`
* **Purpose:** Instruments FastAPI application using `prometheus-fastapi-instrumentator` for per-endpoint HTTP metrics.
* **Endpoint Specification:** `GET /metrics` (untracked, excluded from schema).
* **Request/Response Contract:**
  * *Response:* `HTTP 200 OK`, Content-Type: `text/plain; version=0.0.4; charset=utf-8`.
  * *Body:* OpenMetrics text format containing `http_request_duration_seconds` histograms and `http_requests_in_flight`.
* **Expected Invariant:** Endpoint latency histograms and request counters are automatically updated on every HTTP call.
* **Possible Implementation Risks:** High cardinality metric explosion if path parameters are untemplated.
* **Edge Cases:** Unregistered paths causing unbounded metric label generation (`should_ignore_untemplated=True` configured).
* **Engineering Claim Being Made:** "Per-endpoint request durations and in-flight counters are automatically tracked in OpenMetrics format."
* **Appropriate Verification Methodology:** Scraping `/metrics` after benchmark execution to assert metric existence.

---

## 2. Router & Endpoint Inventory

### 2.1 Health & Readiness Probes (`health.py`)

* **Component:** `app.presentation.routers.health`
* **Purpose:** Exposes Kubernetes liveness and readiness probe endpoints.
* **Endpoint Specification:**
  * `GET /health` (Liveness)
  * `GET /health/ready` (Readiness)
* **Request/Response Contract:**
  * `GET /health` → `HTTP 200 OK`, `{"status": "healthy", "version": "0.2.0"}`.
  * `GET /health/ready` → `HTTP 200 OK` (when Redis & DB are healthy) OR `HTTP 503 Service Unavailable` (`{"status": "degraded", "checks": {...}}`).
* **Expected Invariant:** `/health/ready` returns HTTP 503 whenever Redis or Database dependencies fail.
* **Possible Implementation Risks:** Slow health check queries causing probe timeouts under heavy load.
* **Edge Cases:** Redis connection timeout, PostgreSQL pool exhaustion.
* **Engineering Claim Being Made:** "The readiness probe returns HTTP 503 on dependency failure for Kubernetes orchestration."
* **Appropriate Verification Methodology:** Fault injection disabling Redis/DB and asserting HTTP 503 response.

---

### 2.2 Machine Learning Inference & Scoring (`predict.py`)

* **Component:** `app.presentation.routers.predict`
* **Purpose:** Real-time transaction fraud score evaluation, shadow challenger model execution, and feature store ingestion.
* **Endpoint Specification:**
  * `POST /api/v1/predict`
  * `POST /api/v1/score-transaction`
* **Request/Response Contract:**
  * *Request:* `TransactionPredictRequest` (`transaction_amount >= 0.0`, `merchant_category: max_length=256`, `hour_of_day: [0, 23]`, `country_code: max_length=256`).
  * *Response:* `TransactionPredictResponse` (`fraud_probability ∈ [0.0, 1.0]`, `risk_score ∈ [0, 1000]`, `policy_action`, `breakdown`).
* **Expected Invariant:**
  * `fraud_probability` is bounded in [0, 1].
  * PyTorch inference and risk scoring are offloaded via `asyncio.to_thread` to prevent event loop blocking.
  * Feature Store ingestion (`ingest_transaction`) is executed via `BackgroundTasks` after response dispatch, ensuring score idempotency.
* **Possible Implementation Risks:** Out-of-memory errors during concurrent PyTorch forward passes on large tensors.
* **Edge Cases:** Extremely large transaction amounts (`1e308`), invalid categorical values, missing optional fields.
* **Engineering Claim Being Made:** "ML inference is non-blocking, idempotent, and guaranteed to produce bounded risk scores."
* **Appropriate Verification Methodology:** Property-based testing with Hypothesis and threadpool concurrency benchmarks.

---

### 2.3 Alert Management & Intelligence (`alerts.py`)

* **Component:** `app.presentation.routers.alerts`
* **Purpose:** Fraud alert retrieval, filtering, explainability report extraction, and cross-bank shared threat intelligence.
* **Endpoint Specification:**
  * `GET /api/v1/alerts`
  * `POST /api/v1/alerts`
  * `GET /api/v1/alerts/{alert_id}`
  * `GET /api/v1/alerts/{alert_id}/explainability`
  * `GET /api/v1/alerts/intelligence`
* **Request/Response Contract:**
  * *Query Params:* `limit` (`ge=1, le=200`), `severity` (`AlertSeverity` enum), `status` (`AlertStatus` enum).
  * *Response:* Paginated alert list, SHAP/LIME feature contributions, or `HTTP 422` on invalid enum query parameters.
* **Expected Invariant:** Invalid query enum parameters return `HTTP 422 Unprocessable Entity` rather than unhandled `HTTP 500`.
* **Possible Implementation Risks:** Missing index on `bank_id` / `created_at` causing slow query pagination.
* **Edge Cases:** `severity=INVALID_STRING`, `limit=0`, `limit=1000`, non-existent `alert_id`.
* **Engineering Claim Being Made:** "Alert query parameters are guarded against invalid Enum values, returning HTTP 422."
* **Appropriate Verification Methodology:** Invalid enum query parameter injection testing.

---

### 2.4 Case Investigation & Idempotency (`cases.py`)

* **Component:** `app.presentation.routers.cases`
* **Purpose:** Case lifecycle management, status transitions, note attachments, and idempotent case creation.
* **Endpoint Specification:**
  * `GET /api/v1/cases`
  * `POST /api/v1/cases`
  * `PUT /api/v1/cases/{case_id}/status`
  * `POST /api/v1/cases/{case_id}/notes`
  * `POST /api/v1/cases/{case_id}/link-alert`
* **Request/Response Contract:**
  * *Header:* `Idempotency-Key` (optional string, max_length=256).
  * *Request Body:* `CaseCreateRequest` (`title: max_length=256`, `priority: max_length=64`).
  * *Response:* `CaseResponse`, `HTTP 422` on invalid status transition or invalid enum parameter.
* **Expected Invariant:** Replaying `POST /api/v1/cases` with the same `Idempotency-Key` returns the cached response without creating duplicate cases.
* **Possible Implementation Risks:** In-memory idempotency cache fallback leaking memory if TTL expiration fails.
* **Edge Cases:** Duplicate `Idempotency-Key` sent concurrently across two parallel threads.
* **Engineering Claim Being Made:** "Case creation processes Idempotency-Key headers with Redis-backed 24h TTL deduplication."
* **Appropriate Verification Methodology:** Concurrent replay testing using identical `Idempotency-Key` values.

---

### 2.5 Security, ABAC, & Audit Chain (`security.py`)

* **Component:** `app.presentation.routers.security`
* **Purpose:** Dynamic ABAC policy evaluation, SHA-256 audit chain verification, and subsystem security status reporting.
* **Endpoint Specification:**
  * `POST /security/abac/evaluate`
  * `POST /security/audit-chain/verify`
  * `GET /security/status`
* **Request/Response Contract:**
  * *Evaluate Request:* `UserClaims`, `ABACResource`, `action`.
  * *Evaluate Response:* `{"allowed": bool, "reason": str, "policy_name": str}`.
  * *Verify Response:* `{"is_valid": bool, "length": int, "latest_hash": str}`.
* **Expected Invariant:**
  * Cross-tenant bank access is strictly denied by ABAC.
  * The SHA-256 audit chain remains cryptographically valid (`is_valid = True`) across sequential appends.
* **Possible Implementation Risks:** Audit chain lock contention under high concurrent logging throughput.
* **Edge Cases:** Mis-matched bank clearance levels, corrupted audit chain block hashes.
* **Engineering Claim Being Made:** "ABAC tenant isolation is mathematically enforced and audit chains are tamper-evident."
* **Appropriate Verification Methodology:** Property-based invariant verification and multi-thread concurrency testing.

---

### 2.6 Gateway Proxy Router (`gateway.py`)

* **Component:** `app.presentation.routers.gateway`
* **Purpose:** Reverse proxying, OIDC JWT bearer authentication, API key verification, and RFC rate limit header injection.
* **Endpoint Specification:**
  * `ANY /{path:path}` (Passthrough reverse proxy)
* **Request/Response Contract:**
  * *Headers:* `Authorization: Bearer <token>` or `X-API-Key: <key>`.
  * *Response Headers:* `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset`.
  * *Response (on auth fail):* `HTTP 401 Unauthorized` or `HTTP 403 Forbidden`.
  * *Response (on rate limit):* `HTTP 429 Too Many Requests`, `Retry-After`.
* **Expected Invariant:** Every gateway proxy response carries explicit RFC rate limit headers.
* **Possible Implementation Risks:** Downstream service unavailability causing HTTP 502 Bad Gateway timeouts.
* **Edge Cases:** Expired JWT tokens, malformed API keys, downstream socket connection refused.
* **Engineering Claim Being Made:** "The gateway enforces OIDC/API-key auth, ABAC authorization, and returns RFC rate limit headers."
* **Appropriate Verification Methodology:** Adversarial JWT/API-key testing and rate limit bucket verification.

---

### 2.7 Federated Learning Simulation & Training (`simulation.py`, `training.py`)

* **Component:** `app.presentation.routers.simulation`, `app.presentation.routers.training`
* **Purpose:** Federated Learning simulation management, round execution, participant configuration, and model aggregation.
* **Endpoint Specification:**
  * `GET /api/v1/simulations`, `POST /api/v1/simulations`
  * `POST /api/v1/training/round`
* **Request/Response Contract:**
  * *Request:* Simulation parameters (`num_rounds`, `privacy_budget_epsilon`, `participant_banks`).
  * *Response:* `SimulationResponse` or training round execution metrics.
* **Expected Invariant:** FL training rounds preserve client differential privacy bounds (`epsilon <= max_epsilon`).
* **Possible Implementation Risks:** Long-running simulation rounds blocking HTTP worker threads if executed synchronously.
* **Edge Cases:** `num_rounds = 0`, `epsilon <= 0.0`, missing participant banks.
* **Engineering Claim Being Made:** "FL simulation endpoints enforce differential privacy budget constraints."
* **Appropriate Verification Methodology:** Differential privacy parameter boundary testing.

---

### 2.8 Entity Resolution & Risk Graph (`entities.py`, `graph.py`)

* **Component:** `app.presentation.routers.entities`, `app.presentation.routers.graph`
* **Purpose:** Cross-bank privacy-preserving entity resolution and GraphSAGE relationship network graph visualization.
* **Endpoint Specification:**
  * `GET /api/v1/entities`, `POST /api/v1/entities`
  * `GET /api/v1/graph`
* **Request/Response Contract:**
  * *Request:* Entity identifiers or graph node depth parameters.
  * *Response:* Entity matching confidence scores or graph nodes/edges JSON structure.
* **Expected Invariant:** Entity resolution raw PII is never exposed; matching operates on cryptographic hashes.
* **Possible Implementation Risks:** Deep graph traversal (`depth > 5`) causing memory allocation spikes.
* **Edge Cases:** Cyclic graph relationships, isolated orphan nodes.
* **Engineering Claim Being Made:** "Entity resolution uses privacy-preserving hashes and graph traversal is strictly bounded."
* **Appropriate Verification Methodology:** Graph structural invariant testing and memory allocation tracing.

---

### 2.9 Compliance, PSD2, & Real-Time Inference (`compliance.py`, `psd2.py`, `realtime_inference.py`)

* **Component:** `app.presentation.routers.compliance`, `app.presentation.routers.psd2`, `app.presentation.routers.realtime_inference`
* **Purpose:** Regulatory compliance reporting, PSD2 Strong Customer Authentication (SCA) evaluation, and streaming scoring.
* **Endpoint Specification:**
  * `GET /api/v1/compliance`
  * `GET /api/v1/psd2/sca`
  * `POST /api/v1/realtime/stream-score`
* **Request/Response Contract:**
  * *Response:* Compliance audit summaries, SCA exemption flags (`EXEMPT_TRA`, `MANDATE_SCA`), or streaming risk scores.
* **Expected Invariant:** PSD2 SCA evaluations deterministically assign exemption status based on transaction risk thresholds.
* **Possible Implementation Risks:** Inconsistent risk scoring between batch `/predict` and streaming `/realtime/stream-score`.
* **Edge Cases:** Amount exactly equal to TRA exemption boundary (€100, €250, €500).
* **Engineering Claim Being Made:** "PSD2 SCA exemption logic adheres strictly to RTS EBA risk threshold tables."
* **Appropriate Verification Methodology:** Boundary testing against EBA Regulatory Technical Standards (RTS) thresholds.

---

### 2.10 Real-Time WebSockets (`streaming_ws.py`, `training_ws.py`)

* **Component:** `app.presentation.websockets.streaming_ws`, `app.presentation.websockets.training_ws`
* **Purpose:** Bi-directional real-time event streaming and FL training progress push notifications.
* **Endpoint Specification:**
  * `GET /ws/stream`
  * `GET /ws/training`
* **Request/Response Contract:**
  * *Handshake:* WebSocket upgrade request with token authentication.
  * *Frames:* JSON event frames (`ALERT_GENERATED`, `FL_ROUND_COMPLETE`).
* **Expected Invariant:** Unauthorized WebSocket connections are closed immediately during handshake with code `1008`.
* **Possible Implementation Risks:** Unhandled client disconnects leading to dangling WebSocket connection references.
* **Edge Cases:** Client disconnection mid-frame broadcast, missing auth token in query string.
* **Engineering Claim Being Made:** "WebSocket connections enforce query-string token auth and handle abrupt disconnections gracefully."
* **Appropriate Verification Methodology:** WebSocket handshake auth testing and abrupt disconnect handling verification.

---

## 3. Comprehensive Verification Matrix

| Component | Target File | Verification Focus | Primary Methodology |
|---|---|---|---|
| **Global Error Handling** | `main.py` | RFC 7807 problem+json response format | Adversarial Exception Injection |
| **Content-Type Filter** | `main.py` | HTTP 415 rejection on non-JSON bodies | Media Type Fuzzing |
| **Trace Context** | `main.py` | W3C `traceparent` header injection | Header Assertion |
| **mTLS Verification** | `main.py` | Certificate fingerprint & CRL validation | Security Certificate Audit |
| **DDoS Throttling** | `main.py` | L7 sliding-window rate limiting | High-Throughput Burst Test |
| **Readiness Probe** | `health.py` | HTTP 503 on Redis/DB failure | Dependency Fault Injection |
| **ML Inference** | `predict.py` | Non-blocking `asyncio.to_thread` execution | Async Event Loop Concurrency |
| **Alert Enums** | `alerts.py` | HTTP 422 on invalid Enum params | Invalid Query Injection |
| **Case Idempotency** | `cases.py` | `Idempotency-Key` 24h deduplication | Concurrent Replay Testing |
| **ABAC & Audit** | `security.py` | Cross-tenant isolation & SHA-256 chain | Property-Based Invariant Test |
| **Gateway Rate Limit** | `gateway.py` | RFC `X-RateLimit-*` headers | Rate Limit Bucket Verification |
| **PSD2 SCA** | `psd2.py` | EBA RTS threshold compliance | Boundary Value Analysis |
| **WebSockets** | `streaming_ws.py` | Token handshake & abrupt disconnect | WS Handshake Security Audit |

---

*This inventory serves as the foundational specification reference for all subsequent empirical testing and verification suites.*