# Traceability Report

Generated: 2026-04-02T00:43:11.182486

## Summary

| Metric                     | Count      |
| -------------------------- | ---------- |
| Total Requirements         | 103        |
| Implemented                | 103 (100%) |
| Requires Test Verification | 95         |
| Verified (in tests)        | 85 (89%)   |
| Untraced Requirements      | 0          |
| Orphan Tags                | 0          |

## Traceability Matrix

| Requirement | Verification  | Implementations | Verifications |
| ----------- | ------------- | --------------- | ------------- |
| API-0001    | test          | 1 location(s)   | 3 test(s)     |
| API-0002    | test          | 2 location(s)   | 2 test(s)     |
| API-0003    | test          | 1 location(s)   | 1 test(s)     |
| API-0004    | test          | 1 location(s)   | 1 test(s)     |
| API-0005    | test          | 1 location(s)   | 1 test(s)     |
| API-0006    | test          | 1 location(s)   | 1 test(s)     |
| API-0007    | test          | 1 location(s)   | 3 test(s)     |
| API-0008    | test          | 1 location(s)   | 1 test(s)     |
| API-0009    | test          | 1 location(s)   | 1 test(s)     |
| API-0010    | test          | 1 location(s)   | 2 test(s)     |
| API-0011    | analysis      | 1 location(s)   | ❌ None       |
| API-0012    | test          | 1 location(s)   | 5 test(s)     |
| API-0013    | test          | 11 location(s)  | ❌ None       |
| DLV-0001    | test          | 1 location(s)   | 2 test(s)     |
| DLV-0002    | test          | 1 location(s)   | 2 test(s)     |
| DLV-0003    | test          | 1 location(s)   | 2 test(s)     |
| DLV-0004    | test          | 1 location(s)   | 3 test(s)     |
| DLV-0005    | test          | 1 location(s)   | 1 test(s)     |
| DLV-0006    | test          | 1 location(s)   | 1 test(s)     |
| DLV-0007    | test          | 1 location(s)   | 1 test(s)     |
| DLV-0008    | test          | 1 location(s)   | 1 test(s)     |
| DLV-0009    | inspection    | 1 location(s)   | 1 test(s)     |
| DLV-0010    | test          | 1 location(s)   | 2 test(s)     |
| DLV-0011    | test          | 1 location(s)   | 4 test(s)     |
| DLV-0012    | test          | 1 location(s)   | 7 test(s)     |
| PER-0001    | test          | 1 location(s)   | 2 test(s)     |
| PER-0002    | test          | 1 location(s)   | 2 test(s)     |
| PER-0003    | test          | 1 location(s)   | 1 test(s)     |
| PER-0004    | test          | 1 location(s)   | 3 test(s)     |
| PER-0005    | test          | 2 location(s)   | 1 test(s)     |
| PER-0006    | test          | 1 location(s)   | 1 test(s)     |
| PER-0007    | test          | 1 location(s)   | 1 test(s)     |
| PER-0008    | test          | 1 location(s)   | 2 test(s)     |
| PER-0009    | test          | 1 location(s)   | 2 test(s)     |
| PER-0010    | test          | 1 location(s)   | 12 test(s)    |
| PER-0011    | test          | 1 location(s)   | 1 test(s)     |
| PER-0012    | test          | 1 location(s)   | 7 test(s)     |
| PER-0013    | test          | 1 location(s)   | 5 test(s)     |
| PER-0014    | test          | 2 location(s)   | 1 test(s)     |
| PER-0015    | test          | 1 location(s)   | ❌ None       |
| PER-0016    | test          | 3 location(s)   | 7 test(s)     |
| PER-0017    | test          | 2 location(s)   | ❌ None       |
| PER-0018    | test          | 2 location(s)   | 5 test(s)     |
| PER-0019    | test          | 3 location(s)   | 3 test(s)     |
| PER-0020    | test          | 1 location(s)   | 3 test(s)     |
| PER-0021    | test          | 1 location(s)   | 1 test(s)     |
| SCH-0001    | test          | 3 location(s)   | 3 test(s)     |
| SCH-0002    | test          | 2 location(s)   | 11 test(s)    |
| SCH-0003    | test          | 1 location(s)   | 1 test(s)     |
| SCH-0004    | test          | 2 location(s)   | 1 test(s)     |
| SYS-0001    | test          | 2 location(s)   | 1 test(s)     |
| SYS-0002    | test          | 1 location(s)   | 1 test(s)     |
| SYS-0003    | demonstration | 1 location(s)   | 1 test(s)     |
| SYS-0004    | analysis      | 2 location(s)   | ❌ None       |
| SYS-0005    | analysis      | 2 location(s)   | ❌ None       |
| SYS-0006    | analysis      | 2 location(s)   | ❌ None       |
| SYS-0007    | inspection    | 1 location(s)   | ❌ None       |
| SYS-0008    | inspection    | 1 location(s)   | ❌ None       |
| SYS-0009    | test          | 1 location(s)   | 1 test(s)     |
| SYS-0010    | test          | 1 location(s)   | 1 test(s)     |
| SYS-0011    | test          | 1 location(s)   | 1 test(s)     |
| SYS-0012    | test          | 1 location(s)   | 1 test(s)     |
| SYS-0013    | test          | 3 location(s)   | 4 test(s)     |
| SYS-0014    | test          | 1 location(s)   | 2 test(s)     |
| SYS-0015    | test          | 1 location(s)   | 4 test(s)     |
| SYS-0016    | test          | 1 location(s)   | ❌ None       |
| SYS-0017    | test          | 15 location(s)  | ❌ None       |
| SYS-0018    | test          | 19 location(s)  | ❌ None       |
| SYS-0019    | test          | 5 location(s)   | 2 test(s)     |
| SYS-0020    | test          | 3 location(s)   | ❌ None       |
| SYS-0021    | test          | 2 location(s)   | ❌ None       |
| SYS-0022    | test          | 1 location(s)   | ❌ None       |
| SYS-0023    | test          | 1 location(s)   | ❌ None       |
| SYS-0024    | test          | 1 location(s)   | 21 test(s)    |
| SYS-0025    | test          | 1 location(s)   | 6 test(s)     |
| WS-0001     | test          | 2 location(s)   | 1 test(s)     |
| WS-0002     | test          | 1 location(s)   | 2 test(s)     |
| WS-0003     | test          | 1 location(s)   | 2 test(s)     |
| WS-0004     | test          | 1 location(s)   | 2 test(s)     |
| WS-0005     | test          | 1 location(s)   | 2 test(s)     |
| WS-0006     | test          | 1 location(s)   | 4 test(s)     |
| WS-0007     | test          | 1 location(s)   | 4 test(s)     |
| WS-0008     | test          | 1 location(s)   | 1 test(s)     |
| WS-0009     | test          | 1 location(s)   | 1 test(s)     |
| WS-0010     | test          | 1 location(s)   | 1 test(s)     |
| WS-0011     | test          | 1 location(s)   | 1 test(s)     |
| WS-0012     | test          | 1 location(s)   | 1 test(s)     |
| WS-0013     | test          | 1 location(s)   | 1 test(s)     |
| WS-0014     | test          | 1 location(s)   | 1 test(s)     |
| WS-0015     | test          | 1 location(s)   | 1 test(s)     |
| WS-0016     | test          | 1 location(s)   | 1 test(s)     |
| WS-0017     | test          | 1 location(s)   | 1 test(s)     |
| WS-0018     | test          | 2 location(s)   | 2 test(s)     |
| WS-0019     | test          | 1 location(s)   | 1 test(s)     |
| WS-0020     | test          | 6 location(s)   | 2 test(s)     |
| WS-0021     | test          | 2 location(s)   | 1 test(s)     |
| WS-0022     | test          | 2 location(s)   | 3 test(s)     |
| WS-0023     | test          | 2 location(s)   | 4 test(s)     |
| WS-0024     | test          | 2 location(s)   | 2 test(s)     |
| WS-0025     | test          | 1 location(s)   | 1 test(s)     |
| WS-0026     | test          | 1 location(s)   | 2 test(s)     |
| WS-0027     | test          | 2 location(s)   | 1 test(s)     |
| WS-0028     | test          | 1 location(s)   | 2 test(s)     |

## Detailed Traces

### API-0001

Layers: implementations=api; verifications=tests

> The Qrusty server shall provide an HTTP endpoint `POST /create-queue` to
> create a new queue by name ...

**Implementations:**

- (api) [api.rs:1152](src/api.rs#L1152)

**Verifications:**

- (tests) [api_tests.rs:663](tests/api_tests.rs#L663)
- (tests) [api_tests.rs:718](tests/api_tests.rs#L718)
- (tests) [api_tests.rs:773](tests/api_tests.rs#L773)

### API-0002

Layers: implementations=api+other; verifications=tests

> The Qrusty server shall provide an HTTP endpoint to publish a message that
> accepts `queue`, `priorit...

**Implementations:**

- (api) [api.rs:1459](src/api.rs#L1459)
- (other) [traceability.py:9](scripts/traceability.py#L9)

**Verifications:**

- (tests) [api_tests.rs:152](tests/api_tests.rs#L152)
- (tests) [api_tests.rs:172](tests/api_tests.rs#L172)

### API-0003

Layers: implementations=storage; verifications=tests

> The Qrusty server shall provide an HTTP endpoint to consume from a
> specified queue that returns eith...

**Implementations:**

- (storage) [storage.rs:1792](src/storage.rs#L1792)

**Verifications:**

- (tests) [storage_tests.rs:59](tests/storage_tests.rs#L59)

### API-0004

Layers: implementations=storage; verifications=tests

> The Qrusty server shall provide an HTTP endpoint `POST /ack/{queue}/{id}` to
> acknowledge (`ack`) a m...

**Implementations:**

- (storage) [storage.rs:1986](src/storage.rs#L1986)

**Verifications:**

- (tests) [storage_tests.rs:236](tests/storage_tests.rs#L236)

### API-0005

Layers: implementations=storage; verifications=tests

> The Qrusty server shall provide an HTTP endpoint `POST /nack/{queue}/{id}` to
> negative-acknowledge (...

**Implementations:**

- (storage) [storage.rs:2078](src/storage.rs#L2078)

**Verifications:**

- (tests) [storage_tests.rs:277](tests/storage_tests.rs#L277)

### API-0006

Layers: implementations=api; verifications=tests

> The Qrusty server shall provide an HTTP endpoint to return queue
> statistics including per-queue coun...

**Implementations:**

- (api) [api.rs:2035](src/api.rs#L2035)

**Verifications:**

- (tests) [api_tests.rs:81](tests/api_tests.rs#L81)

### API-0007

Layers: implementations=api; verifications=other+tests

> The Qrusty server shall provide an HTTP endpoint to return statistics for
> a specified queue includin...

**Implementations:**

- (api) [api.rs:1917](src/api.rs#L1917)

**Verifications:**

- (tests) [api_tests.rs:818](tests/api_tests.rs#L818)
- (tests) [api_tests.rs:859](tests/api_tests.rs#L859)
- (other) [smoke_test.py:11](scripts/smoke_test.py#L11)

### API-0008

Layers: implementations=api; verifications=tests

> The Qrusty server shall provide an HTTP endpoint to list active queue
> names.

**Implementations:**

- (api) [api.rs:1976](src/api.rs#L1976)

**Verifications:**

- (tests) [api_tests.rs:1003](tests/api_tests.rs#L1003)

### API-0009

Layers: implementations=api; verifications=tests

> The Qrusty server shall provide an HTTP endpoint to purge all messages
> from a specified queue while ...

**Implementations:**

- (api) [api.rs:1339](src/api.rs#L1339)

**Verifications:**

- (tests) [api_tests.rs:1242](tests/api_tests.rs#L1242)

### API-0010

Layers: implementations=api; verifications=tests

> The Qrusty server shall provide an HTTP endpoint to delete a specified
> queue such that all messages ...

**Implementations:**

- (api) [api.rs:1290](src/api.rs#L1290)

**Verifications:**

- (tests) [api_tests.rs:1171](tests/api_tests.rs#L1171)
- (tests) [api_tests.rs:1787](tests/api_tests.rs#L1787)

### API-0011

Layers: implementations=api; verifications=-

> The Qrusty server shall provide an HTTP endpoint `GET /queues/{queue}/metrics`
> to return per-queue t...

**Implementations:**

- (api) [api.rs:2012](src/api.rs#L2012)

### API-0012

Layers: implementations=api; verifications=tests

> The Qrusty server shall provide an HTTP endpoint to update a queue's
> configuration. The request body...

**Implementations:**

- (api) [api.rs:1218](src/api.rs#L1218)

**Verifications:**

- (tests) [api_tests.rs:1320](tests/api_tests.rs#L1320)
- (tests) [api_tests.rs:1374](tests/api_tests.rs#L1374)
- (tests) [api_tests.rs:1404](tests/api_tests.rs#L1404)
- (tests) [api_tests.rs:1465](tests/api_tests.rs#L1465)
- (tests) [api_tests.rs:1498](tests/api_tests.rs#L1498)

### API-0013

Layers: implementations=api+core+tests; verifications=-

> The Qrusty server shall expose an HTTP endpoint:

    GET /operation-timings?seconds=N

where `secon...

**Implementations:**

- (core) [operation_timing.rs:5](src/operation_timing.rs#L5)
- (core) [operation_timing.rs:244](src/operation_timing.rs#L244)
- (core) [operation_timing.rs:291](src/operation_timing.rs#L291)
- (core) [operation_timing.rs:303](src/operation_timing.rs#L303)
- (core) [operation_timing.rs:311](src/operation_timing.rs#L311)
- (api) [api.rs:402](src/api.rs#L402)
- (api) [api.rs:1995](src/api.rs#L1995)
- (tests) [api_tests.rs:2216](tests/api_tests.rs#L2216)
- (tests) [api_tests.rs:2225](tests/api_tests.rs#L2225)
- (tests) [api_tests.rs:2265](tests/api_tests.rs#L2265)
- (tests) [api_tests.rs:2398](tests/api_tests.rs#L2398)

### DLV-0001

Layers: implementations=storage; verifications=tests

> When a message is consumed, the Qrusty server shall lock the message to
> the requesting consumer for ...

**Implementations:**

- (storage) [storage.rs:1792](src/storage.rs#L1792)

**Verifications:**

- (tests) [storage_tests.rs:59](tests/storage_tests.rs#L59)
- (tests) [storage_tests.rs:218](tests/storage_tests.rs#L218)

### DLV-0002

Layers: implementations=storage; verifications=tests

> When a message is consumed, the Qrusty server shall increment the message
> retry counter (`retry_coun...

**Implementations:**

- (storage) [storage.rs:1792](src/storage.rs#L1792)

**Verifications:**

- (tests) [storage_tests.rs:59](tests/storage_tests.rs#L59)
- (tests) [storage_tests.rs:218](tests/storage_tests.rs#L218)

### DLV-0003

Layers: implementations=storage; verifications=other+tests

> The Qrusty server shall only allow the consumer that currently holds a
> message lock to successfully ...

**Implementations:**

- (storage) [storage.rs:1986](src/storage.rs#L1986)

**Verifications:**

- (tests) [storage_tests.rs:236](tests/storage_tests.rs#L236)
- (other) [traceability.py:10](scripts/traceability.py#L10)

### DLV-0004

Layers: implementations=storage; verifications=tests

> The Qrusty server shall only allow the consumer that currently holds a
> message lock to successfully ...

**Implementations:**

- (storage) [storage.rs:2078](src/storage.rs#L2078)

**Verifications:**

- (tests) [storage_tests.rs:277](tests/storage_tests.rs#L277)
- (tests) [storage_tests.rs:1699](tests/storage_tests.rs#L1699)
- (tests) [storage_tests.rs:2977](tests/storage_tests.rs#L2977)

### DLV-0005

Layers: implementations=storage; verifications=tests

> The Qrusty server shall automatically unlock messages whose lock timeout
> has expired so they become ...

**Implementations:**

- (storage) [storage.rs:2448](src/storage.rs#L2448)

**Verifications:**

- (tests) [storage_tests.rs:764](tests/storage_tests.rs#L764)

### DLV-0006

Layers: implementations=storage; verifications=tests

> The Qrusty server shall support a configurable maximum retry count per
> message, defaulting to 3 retr...

**Implementations:**

- (storage) [storage.rs:2078](src/storage.rs#L2078)

**Verifications:**

- (tests) [storage_tests.rs:277](tests/storage_tests.rs#L277)

### DLV-0007

Layers: implementations=storage; verifications=tests

> When a message is negative-acknowledged and its retry count is less than
> its maximum retry count, th...

**Implementations:**

- (storage) [storage.rs:2078](src/storage.rs#L2078)

**Verifications:**

- (tests) [storage_tests.rs:277](tests/storage_tests.rs#L277)

### DLV-0008

Layers: implementations=storage; verifications=tests

> When a message is negative-acknowledged and its retry count equals or
> exceeds its maximum retry coun...

**Implementations:**

- (storage) [storage.rs:2078](src/storage.rs#L2078)

**Verifications:**

- (tests) [storage_tests.rs:304](tests/storage_tests.rs#L304)

### DLV-0009

Layers: implementations=storage; verifications=tests

> The Qrusty server shall store dead letter queue messages under a key
> pattern of `\_dlq/{original_queu...

**Implementations:**

- (storage) [storage.rs:2078](src/storage.rs#L2078)

**Verifications:**

- (tests) [storage_tests.rs:304](tests/storage_tests.rs#L304)

### DLV-0010

Layers: implementations=storage; verifications=tests

> When `allow_duplicates` is `false` for a queue, the Qrusty server shall
> reject a push request whose ...

**Implementations:**

- (storage) [storage.rs:1624](src/storage.rs#L1624)

**Verifications:**

- (tests) [storage_tests.rs:2011](tests/storage_tests.rs#L2011)
- (tests) [storage_tests.rs:2133](tests/storage_tests.rs#L2133)

### DLV-0011

Layers: implementations=storage; verifications=tests

> The `pop()` operation shall be atomic with respect to concurrent callers on
> the same queue. At most...

**Implementations:**

- (storage) [storage.rs:1792](src/storage.rs#L1792)

**Verifications:**

- (tests) [concurrency_tests.rs:5](tests/concurrency_tests.rs#L5)
- (tests) [concurrency_tests.rs:53](tests/concurrency_tests.rs#L53)
- (tests) [concurrency_tests.rs:106](tests/concurrency_tests.rs#L106)
- (tests) [concurrency_tests.rs:144](tests/concurrency_tests.rs#L144)

### DLV-0012

Layers: implementations=core; verifications=tests

> All storage backends shall be free of deadlocks under any combination of
> concurrent producer and con...

**Implementations:**

- (core) [memory_storage.rs:410](src/memory_storage.rs#L410)

**Verifications:**

- (tests) [concurrency_tests.rs:5](tests/concurrency_tests.rs#L5)
- (tests) [concurrency_tests.rs:192](tests/concurrency_tests.rs#L192)
- (tests) [concurrency_tests.rs:255](tests/concurrency_tests.rs#L255)
- (tests) [concurrency_tests.rs:310](tests/concurrency_tests.rs#L310)
- (tests) [concurrency_tests.rs:447](tests/concurrency_tests.rs#L447)
- (tests) [concurrency_tests.rs:485](tests/concurrency_tests.rs#L485)
- (tests) [concurrency_tests.rs:523](tests/concurrency_tests.rs#L523)

### PER-0001

Layers: implementations=storage; verifications=tests

> The Qrusty server shall use a filesystem-backed persistent store
> configurable via the `DATA_PATH` en...

**Implementations:**

- (storage) [storage.rs:1624](src/storage.rs#L1624)

**Verifications:**

- (tests) [storage_tests.rs:47](tests/storage_tests.rs#L47)
- (tests) [storage_tests.rs:408](tests/storage_tests.rs#L408)

### PER-0002

Layers: implementations=storage; verifications=tests

> The Qrusty server shall support multiple named queues and keep messages
> isolated such that consuming...

**Implementations:**

- (storage) [storage.rs:1624](src/storage.rs#L1624)

**Verifications:**

- (tests) [storage_tests.rs:47](tests/storage_tests.rs#L47)
- (tests) [storage_tests.rs:408](tests/storage_tests.rs#L408)

### PER-0003

Layers: implementations=storage; verifications=tests

> The Qrusty server shall support a per-queue configuration flag
> `allow_duplicates` that controls whet...

**Implementations:**

- (storage) [storage.rs:1624](src/storage.rs#L1624)

**Verifications:**

- (tests) [storage_tests.rs:803](tests/storage_tests.rs#L803)

### PER-0004

Layers: implementations=storage; verifications=tests

> When `allow_duplicates` is `false` for a queue and a message is published,
> the Qrusty server shall r...

**Implementations:**

- (storage) [storage.rs:1624](src/storage.rs#L1624)

**Verifications:**

- (tests) [storage_tests.rs:817](tests/storage_tests.rs#L817)
- (tests) [storage_tests.rs:1637](tests/storage_tests.rs#L1637)
- (tests) [storage_tests.rs:1699](tests/storage_tests.rs#L1699)

### PER-0005

Layers: implementations=storage; verifications=tests

> When `allow_duplicates` is `false` for a queue and a locked message
> becomes unlocked (via timeout ex...

**Implementations:**

- (storage) [storage.rs:2078](src/storage.rs#L2078)
- (storage) [storage.rs:2448](src/storage.rs#L2448)

**Verifications:**

- (tests) [storage_tests.rs:764](tests/storage_tests.rs#L764)

### PER-0006

Layers: implementations=storage; verifications=tests

> When a queue's configuration is changed such that `allow_duplicates`
> transitions from `true` to `fal...

**Implementations:**

- (storage) [storage.rs:242](src/storage.rs#L242)

**Verifications:**

- (tests) [storage_tests.rs:904](tests/storage_tests.rs#L904)

### PER-0007

Layers: implementations=storage; verifications=tests

> When a queue's configuration is changed such that `allow_duplicates`
> transitions from `false` to `tr...

**Implementations:**

- (storage) [storage.rs:242](src/storage.rs#L242)

**Verifications:**

- (tests) [storage_tests.rs:953](tests/storage_tests.rs#L953)

### PER-0008

Layers: implementations=storage; verifications=tests

> The Qrusty server shall maintain, for each queue whose configuration has
> `allow_duplicates` set to `...

**Implementations:**

- (storage) [storage.rs:1624](src/storage.rs#L1624)

**Verifications:**

- (tests) [storage_tests.rs:2011](tests/storage_tests.rs#L2011)
- (tests) [storage_tests.rs:2901](tests/storage_tests.rs#L2901)

### PER-0009

Layers: implementations=storage; verifications=tests

> On startup, for every queue whose stored configuration has
> `allow_duplicates` set to `false`, the Qr...

**Implementations:**

- (storage) [storage.rs:705](src/storage.rs#L705)

**Verifications:**

- (tests) [storage_tests.rs:2103](tests/storage_tests.rs#L2103)
- (tests) [storage_tests.rs:2133](tests/storage_tests.rs#L2133)

### PER-0010

Layers: implementations=storage; verifications=tests

> The Qrusty server shall keep the in-memory payload set for each
> `allow_duplicates = false` queue con...

**Implementations:**

- (storage) [storage.rs:1624](src/storage.rs#L1624)

**Verifications:**

- (tests) [api_tests.rs:2116](tests/api_tests.rs#L2116)
- (tests) [storage_tests.rs:2034](tests/storage_tests.rs#L2034)
- (tests) [storage_tests.rs:2056](tests/storage_tests.rs#L2056)
- (tests) [storage_tests.rs:2080](tests/storage_tests.rs#L2080)
- (tests) [storage_tests.rs:2164](tests/storage_tests.rs#L2164)
- (tests) [storage_tests.rs:2191](tests/storage_tests.rs#L2191)
- (tests) [storage_tests.rs:2215](tests/storage_tests.rs#L2215)
- (tests) [storage_tests.rs:2239](tests/storage_tests.rs#L2239)
- (tests) [storage_tests.rs:2263](tests/storage_tests.rs#L2263)
- (tests) [storage_tests.rs:2294](tests/storage_tests.rs#L2294)
- (tests) [storage_tests.rs:2327](tests/storage_tests.rs#L2327)
- (tests) [storage_tests.rs:2927](tests/storage_tests.rs#L2927)

### PER-0011

Layers: implementations=core; verifications=tests

> When `STORAGE_MODE=memory`, the server shall log a warning at startup
> indicating that all data will ...

**Implementations:**

- (core) [memory_storage.rs:2](src/memory_storage.rs#L2)

**Verifications:**

- (tests) [memory_integration_tests.rs:2](tests/memory_integration_tests.rs#L2)

### PER-0012

Layers: implementations=storage; verifications=tests

> The `push()` operation on the RocksDB backend shall not hold any in-memory
> lock for the duration of ...

**Implementations:**

- (storage) [storage.rs:1624](src/storage.rs#L1624)

**Verifications:**

- (tests) [concurrency_tests.rs:5](tests/concurrency_tests.rs#L5)
- (tests) [concurrency_tests.rs:371](tests/concurrency_tests.rs#L371)
- (tests) [concurrency_tests.rs:409](tests/concurrency_tests.rs#L409)
- (tests) [concurrency_tests.rs:447](tests/concurrency_tests.rs#L447)
- (tests) [concurrency_tests.rs:485](tests/concurrency_tests.rs#L485)
- (tests) [concurrency_tests.rs:523](tests/concurrency_tests.rs#L523)
- (tests) [api_tests.rs:2158](tests/api_tests.rs#L2158)

### PER-0013

Layers: implementations=storage; verifications=tests

> When a queue is deleted (via `delete_queue`), the storage backend shall
> remove all dead-letter queue...

**Implementations:**

- (storage) [storage.rs:2738](src/storage.rs#L2738)

**Verifications:**

- (tests) [memory_storage_tests.rs:791](tests/memory_storage_tests.rs#L791)
- (tests) [api_tests.rs:1787](tests/api_tests.rs#L1787)
- (tests) [api_tests.rs:1845](tests/api_tests.rs#L1845)
- (tests) [storage_tests.rs:2688](tests/storage_tests.rs#L2688)
- (tests) [storage_tests.rs:2721](tests/storage_tests.rs#L2721)

### PER-0014

Layers: implementations=core+storage; verifications=tests

> The duplicate detection mechanism (PER-0008) shall use the xxh3_128 hash
> function to compute a 128-b...

**Implementations:**

- (core) [memory_storage.rs:37](src/memory_storage.rs#L37)
- (storage) [storage.rs:35](src/storage.rs#L35)

**Verifications:**

- (tests) [storage_tests.rs:2901](tests/storage_tests.rs#L2901)

### PER-0015

Layers: implementations=storage; verifications=-

> The RocksDB block cache size shall be configurable via the
> `ROCKSDB_CACHE_MB` environment variable, ...

**Implementations:**

- (storage) [storage.rs:542](src/storage.rs#L542)

### PER-0016

Layers: implementations=core+storage; verifications=tests

> Message payloads shall be stored in append-only memory-mapped files
> managed by a PayloadStore. Rock...

**Implementations:**

- (core) [payload_store.rs:2](src/payload_store.rs#L2)
- (storage) [storage.rs:1588](src/storage.rs#L1588)
- (storage) [storage.rs:1710](src/storage.rs#L1710)

**Verifications:**

- (tests) [storage_tests.rs:2879](tests/storage_tests.rs#L2879)
- (tests) [storage_tests.rs:2901](tests/storage_tests.rs#L2901)
- (tests) [storage_tests.rs:2927](tests/storage_tests.rs#L2927)
- (tests) [storage_tests.rs:2977](tests/storage_tests.rs#L2977)
- (tests) [storage_tests.rs:2999](tests/storage_tests.rs#L2999)
- (tests) [storage_tests.rs:3102](tests/storage_tests.rs#L3102)
- (tests) [storage_tests.rs:3273](tests/storage_tests.rs#L3273)

### PER-0017

Layers: implementations=core+storage; verifications=-

> A background compaction task shall periodically rewrite live payloads
> to a new segment file and atom...

**Implementations:**

- (core) [payload_store.rs:2](src/payload_store.rs#L2)
- (storage) [storage.rs:1116](src/storage.rs#L1116)

### PER-0018

Layers: implementations=core+storage; verifications=tests

> On crash recovery, the PayloadStore shall be reconstructable from
> the PayloadRefs stored in RocksDB....

**Implementations:**

- (core) [payload_store.rs:2](src/payload_store.rs#L2)
- (storage) [storage.rs:1588](src/storage.rs#L1588)

**Verifications:**

- (tests) [storage_tests.rs:2879](tests/storage_tests.rs#L2879)
- (tests) [storage_tests.rs:2953](tests/storage_tests.rs#L2953)
- (tests) [storage_tests.rs:2999](tests/storage_tests.rs#L2999)
- (tests) [storage_tests.rs:3039](tests/storage_tests.rs#L3039)
- (tests) [storage_tests.rs:3102](tests/storage_tests.rs#L3102)

### PER-0019

Layers: implementations=storage; verifications=tests

> Messages with unrecoverable payload references (missing or corrupted
> segment files) shall be automat...

**Implementations:**

- (storage) [storage.rs:796](src/storage.rs#L796)
- (storage) [storage.rs:1588](src/storage.rs#L1588)
- (storage) [storage.rs:1792](src/storage.rs#L1792)

**Verifications:**

- (tests) [storage_tests.rs:3158](tests/storage_tests.rs#L3158)
- (tests) [storage_tests.rs:3202](tests/storage_tests.rs#L3202)
- (tests) [storage_tests.rs:3234](tests/storage_tests.rs#L3234)

### PER-0020

Layers: implementations=storage; verifications=tests

> Payload compaction shall invalidate the in-memory hot tier after updating
> RocksDB references, so tha...

**Implementations:**

- (storage) [storage.rs:1710](src/storage.rs#L1710)

**Verifications:**

- (tests) [storage_tests.rs:3302](tests/storage_tests.rs#L3302)
- (tests) [storage_tests.rs:3343](tests/storage_tests.rs#L3343)
- (tests) [storage_tests.rs:3362](tests/storage_tests.rs#L3362)

### PER-0021

Layers: implementations=core; verifications=tests

> Payload compaction with zero live references shall still clean up old
> segment files and their memory...

**Implementations:**

- (core) [payload_store.rs:308](src/payload_store.rs#L308)

**Verifications:**

- (tests) [storage_tests.rs:3381](tests/storage_tests.rs#L3381)

### SCH-0001

Layers: implementations=other+storage; verifications=tests

> The Qrusty server shall support configuring per-queue message ordering
> with at least the modes FIFO,...

**Implementations:**

- (storage) [storage.rs:1624](src/storage.rs#L1624)
- (storage) [storage.rs:1792](src/storage.rs#L1792)
- (other) [traceability.py:11](scripts/traceability.py#L11)

**Verifications:**

- (tests) [storage_tests.rs:82](tests/storage_tests.rs#L82)
- (tests) [storage_tests.rs:85](tests/storage_tests.rs#L85)
- (tests) [storage_tests.rs:478](tests/storage_tests.rs#L478)

### SCH-0002

Layers: implementations=storage; verifications=tests

> The Qrusty server shall support two priority kinds: numeric priorities in
> the full unsigned 64-bit i...

**Implementations:**

- (storage) [storage.rs:1624](src/storage.rs#L1624)
- (storage) [storage.rs:1792](src/storage.rs#L1792)

**Verifications:**

- (tests) [memory_storage_tests.rs:827](tests/memory_storage_tests.rs#L827)
- (tests) [memory_storage_tests.rs:867](tests/memory_storage_tests.rs#L867)
- (tests) [memory_storage_tests.rs:898](tests/memory_storage_tests.rs#L898)
- (tests) [api_tests.rs:2057](tests/api_tests.rs#L2057)
- (tests) [storage_tests.rs:82](tests/storage_tests.rs#L82)
- (tests) [storage_tests.rs:85](tests/storage_tests.rs#L85)
- (tests) [storage_tests.rs:478](tests/storage_tests.rs#L478)
- (tests) [storage_tests.rs:2748](tests/storage_tests.rs#L2748)
- (tests) [storage_tests.rs:2787](tests/storage_tests.rs#L2787)
- (tests) [storage_tests.rs:2816](tests/storage_tests.rs#L2816)
- (tests) [storage_tests.rs:2852](tests/storage_tests.rs#L2852)

### SCH-0003

Layers: implementations=storage; verifications=tests

> When a queue is configured with FIFO ordering, the Qrusty server shall
> ignore message priority value...

**Implementations:**

- (storage) [storage.rs:1792](src/storage.rs#L1792)

**Verifications:**

- (tests) [storage_tests.rs:113](tests/storage_tests.rs#L113)

### SCH-0004

Layers: implementations=storage; verifications=tests

> When a locked message times out or is negative-acknowledged and made
> available for retry, the Qrusty...

**Implementations:**

- (storage) [storage.rs:1792](src/storage.rs#L1792)
- (storage) [storage.rs:2448](src/storage.rs#L2448)

**Verifications:**

- (tests) [storage_tests.rs:143](tests/storage_tests.rs#L143)

### SYS-0001

Layers: implementations=core+other; verifications=tests

> The Qrusty server shall bind and listen for HTTP requests on a TCP address
> configurable via the `BIN...

**Implementations:**

- (core) [main.rs:90](src/main.rs#L90)
- (other) [traceability.py:9](scripts/traceability.py#L9)

**Verifications:**

- (tests) [storage_tests.rs:193](tests/storage_tests.rs#L193)

### SYS-0002

Layers: implementations=api; verifications=tests

> The Qrusty server shall provide a `/health` endpoint that always responds
> with HTTP `200 OK` and a J...

**Implementations:**

- (api) [api.rs:1107](src/api.rs#L1107)

**Verifications:**

- (tests) [api_tests.rs:69](tests/api_tests.rs#L69)

### SYS-0003

Layers: implementations=api; verifications=tests

> The Qrusty server shall serve a browser-accessible web UI from a
> configurable directory and expose i...

**Implementations:**

- (api) [api.rs:1025](src/api.rs#L1025)

**Verifications:**

- (tests) [api_tests.rs:190](tests/api_tests.rs#L190)

### SYS-0004

Layers: implementations=api; verifications=-

> The Qrusty server shall maintain per-queue time-series metrics suitable for
> powering a UI statistics...

**Implementations:**

- (api) [api.rs:899](src/api.rs#L899)
- (api) [api.rs:2012](src/api.rs#L2012)

### SYS-0005

Layers: implementations=api; verifications=-

> The Qrusty server shall record, for each queue at a 1 second sampling
> interval, the queue's total me...

**Implementations:**

- (api) [api.rs:899](src/api.rs#L899)
- (api) [api.rs:2012](src/api.rs#L2012)

### SYS-0006

Layers: implementations=api; verifications=-

> The Qrusty server shall record, for each queue at a 1 second sampling
> interval, per-second event rat...

**Implementations:**

- (api) [api.rs:899](src/api.rs#L899)
- (api) [api.rs:2012](src/api.rs#L2012)

### SYS-0007

Layers: implementations=core; verifications=-

> The Qrusty web UI shall display multi-trace graphs using visual encodings
> beyond color alone (for ex...

**Implementations:**

- (core) [QueueDetailPage.tsx:55](web_ui/src/app/components/QueueDetailPage.tsx#L55)

### SYS-0008

Layers: implementations=core; verifications=-

> The Qrusty web UI shall allow an operator to edit a queue's name and
> `allow_duplicates` setting from...

**Implementations:**

- (core) [QueueDetailPage.tsx:56](web_ui/src/app/components/QueueDetailPage.tsx#L56)

### SYS-0009

Layers: implementations=core; verifications=tests

> The Qrusty web UI shall allow an operator to edit a queue's name and
> `allow_duplicates` setting from...

**Implementations:**

- (core) [AdministrationTab.tsx:7](web_ui/src/app/components/tabs/AdministrationTab.tsx#L7)

**Verifications:**

- (tests) [AdministrationTab.test.tsx:1](web_ui/src/tests/AdministrationTab.test.tsx#L1)

### SYS-0010

Layers: implementations=api; verifications=tests

> The Qrusty server shall provide a WebSocket endpoint at `GET /ws` on the
> same TCP address and port a...

**Implementations:**

- (api) [api.rs:1137](src/api.rs#L1137)

**Verifications:**

- (tests) [ws_tests.rs:101](tests/ws_tests.rs#L101)

### SYS-0011

Layers: implementations=other; verifications=other

> The Qrusty project shall provide a live smoke test script
> (`scripts/smoke_test.py`) that starts a re...

**Implementations:**

- (other) [smoke_test.py:10](scripts/smoke_test.py#L10)

**Verifications:**

- (other) [smoke_test.py:11](scripts/smoke_test.py#L11)

### SYS-0012

Layers: implementations=other; verifications=other

> The smoke test shall assert that `publish_rate_per_sec` and
> `ack_rate_per_sec` reported by the `/sta...

**Implementations:**

- (other) [smoke_test.py:10](scripts/smoke_test.py#L10)

**Verifications:**

- (other) [smoke_test.py:11](scripts/smoke_test.py#L11)

### SYS-0013

Layers: implementations=core; verifications=core+tests

> The server shall support an in-memory storage backend selectable via the
> `STORAGE_MODE` environment ...

**Implementations:**

- (core) [memory_storage.rs:2](src/memory_storage.rs#L2)
- (core) [main.rs:228](src/main.rs#L228)
- (core) [main.rs:243](src/main.rs#L243)

**Verifications:**

- (core) [main.rs:555](src/main.rs#L555)
- (core) [main.rs:628](src/main.rs#L628)
- (tests) [memory_integration_tests.rs:2](tests/memory_integration_tests.rs#L2)
- (tests) [memory_storage_tests.rs:2](tests/memory_storage_tests.rs#L2)

### SYS-0014

Layers: implementations=api; verifications=tests

> The metrics sampler background task shall retrieve statistics for all queues
> in a single `get_all_qu...

**Implementations:**

- (api) [api.rs:899](src/api.rs#L899)

**Verifications:**

- (tests) [concurrency_tests.rs:5](tests/concurrency_tests.rs#L5)
- (tests) [concurrency_tests.rs:576](tests/concurrency_tests.rs#L576)

### SYS-0015

Layers: implementations=core; verifications=core+tests

> The log capture layer (LogCaptureLayer) shall not spawn a new async task
> per log event. The `on_eve...

**Implementations:**

- (core) [log_buffer.rs:3](src/log_buffer.rs#L3)

**Verifications:**

- (core) [log_buffer.rs:239](src/log_buffer.rs#L239)
- (tests) [concurrency_tests.rs:5](tests/concurrency_tests.rs#L5)
- (tests) [concurrency_tests.rs:618](tests/concurrency_tests.rs#L618)
- (tests) [concurrency_tests.rs:641](tests/concurrency_tests.rs#L641)

### SYS-0016

Layers: implementations=api; verifications=-

> All RocksDB storage operations (push, pop, ack, nack, batch_ack,
> batch_nack, get_queue_stats, get_al...

**Implementations:**

- (api) [api.rs:617](src/api.rs#L617)

### SYS-0017

Layers: implementations=api+core+tests; verifications=-

> The Qrusty server shall maintain per-operation timing metrics for all
> key operations at two granular...

**Implementations:**

- (core) [operation_timing.rs:5](src/operation_timing.rs#L5)
- (core) [operation_timing.rs:200](src/operation_timing.rs#L200)
- (core) [operation_timing.rs:216](src/operation_timing.rs#L216)
- (core) [operation_timing.rs:232](src/operation_timing.rs#L232)
- (core) [operation_timing.rs:272](src/operation_timing.rs#L272)
- (core) [operation_timing.rs:324](src/operation_timing.rs#L324)
- (core) [operation_timing.rs:356](src/operation_timing.rs#L356)
- (api) [api.rs:1495](src/api.rs#L1495)
- (api) [api.rs:1599](src/api.rs#L1599)
- (api) [api.rs:1663](src/api.rs#L1663)
- (api) [api.rs:1736](src/api.rs#L1736)
- (api) [api.rs:1782](src/api.rs#L1782)
- (api) [api.rs:1826](src/api.rs#L1826)
- (api) [api.rs:1933](src/api.rs#L1933)
- (tests) [api_tests.rs:2293](tests/api_tests.rs#L2293)

### SYS-0018

Layers: implementations=storage; verifications=-

> The Qrusty server shall maintain an in-memory cache of per-queue message
> counts (available and locke...

**Implementations:**

- (storage) [storage.rs:110](src/storage.rs#L110)
- (storage) [storage.rs:746](src/storage.rs#L746)
- (storage) [storage.rs:2574](src/storage.rs#L2574)
- (storage) [storage.rs:2626](src/storage.rs#L2626)
- (storage) [storage.rs:2668](src/storage.rs#L2668)
- (storage) [storage.rs:3303](src/storage.rs#L3303)
- (storage) [storage.rs:3318](src/storage.rs#L3318)
- (storage) [storage.rs:3334](src/storage.rs#L3334)
- (storage) [storage.rs:3350](src/storage.rs#L3350)
- (storage) [storage.rs:3366](src/storage.rs#L3366)
- (storage) [storage.rs:3385](src/storage.rs#L3385)
- (storage) [storage.rs:3404](src/storage.rs#L3404)
- (storage) [storage.rs:3429](src/storage.rs#L3429)
- (storage) [storage.rs:3442](src/storage.rs#L3442)
- (storage) [storage.rs:3460](src/storage.rs#L3460)
- (storage) [storage.rs:3479](src/storage.rs#L3479)
- (storage) [storage.rs:3509](src/storage.rs#L3509)
- (storage) [storage.rs:3533](src/storage.rs#L3533)
- (storage) [storage.rs:3546](src/storage.rs#L3546)

### SYS-0019

Layers: implementations=api+core+storage; verifications=core

> The Qrusty server shall become responsive to HTTP requests — including
> `/health` and all other endpo...

**Implementations:**

- (core) [main.rs:243](src/main.rs#L243)
- (storage) [storage.rs:508](src/storage.rs#L508)
- (storage) [storage.rs:663](src/storage.rs#L663)
- (api) [api.rs:794](src/api.rs#L794)
- (api) [api.rs:1107](src/api.rs#L1107)

**Verifications:**

- (core) [main.rs:752](src/main.rs#L752)
- (core) [main.rs:818](src/main.rs#L818)

### SYS-0020

Layers: implementations=storage; verifications=-

> The storage layer shall maintain a per-queue hot tier of the
> highest-priority **available** (unlocke...

**Implementations:**

- (storage) [storage.rs:892](src/storage.rs#L892)
- (storage) [storage.rs:930](src/storage.rs#L930)
- (storage) [storage.rs:1727](src/storage.rs#L1727)

### SYS-0021

Layers: implementations=storage; verifications=-

> Hot tier capacity and refill threshold shall be configurable via
> environment variables:

- `QRUSTY_H...

**Implementations:**

- (storage) [storage.rs:211](src/storage.rs#L211)
- (storage) [storage.rs:216](src/storage.rs#L216)

### SYS-0022

Layers: implementations=core; verifications=-

> The server shall monitor memory usage via cgroup v2 (with v1 fallback)
> or the `QRUSTY_MEMORY_LIMIT_M...

**Implementations:**

- (core) [memory_monitor.rs:2](src/memory_monitor.rs#L2)

### SYS-0023

Layers: implementations=api; verifications=-

> The `/stats` endpoint shall include the following memory fields in
> its `summary` object:

- `memory\_...

**Implementations:**

- (api) [api.rs:2087](src/api.rs#L2087)

### SYS-0024

Layers: implementations=api; verifications=core+tests

> While the Qrusty server is initialising (the `initializing` flag is
> `true`), \*\*all mutation operatio...

**Implementations:**

- (api) [api.rs:794](src/api.rs#L794)

**Verifications:**

- (core) [main.rs:752](src/main.rs#L752)
- (tests) [startup_gate_tests.rs:84](tests/startup_gate_tests.rs#L84)
- (tests) [startup_gate_tests.rs:98](tests/startup_gate_tests.rs#L98)
- (tests) [startup_gate_tests.rs:110](tests/startup_gate_tests.rs#L110)
- (tests) [startup_gate_tests.rs:122](tests/startup_gate_tests.rs#L122)
- (tests) [startup_gate_tests.rs:133](tests/startup_gate_tests.rs#L133)
- (tests) [startup_gate_tests.rs:144](tests/startup_gate_tests.rs#L144)
- (tests) [startup_gate_tests.rs:155](tests/startup_gate_tests.rs#L155)
- (tests) [startup_gate_tests.rs:169](tests/startup_gate_tests.rs#L169)
- (tests) [startup_gate_tests.rs:180](tests/startup_gate_tests.rs#L180)
- (tests) [startup_gate_tests.rs:193](tests/startup_gate_tests.rs#L193)
- (tests) [startup_gate_tests.rs:206](tests/startup_gate_tests.rs#L206)
- (tests) [startup_gate_tests.rs:219](tests/startup_gate_tests.rs#L219)
- (tests) [startup_gate_tests.rs:236](tests/startup_gate_tests.rs#L236)
- (tests) [startup_gate_tests.rs:246](tests/startup_gate_tests.rs#L246)
- (tests) [startup_gate_tests.rs:255](tests/startup_gate_tests.rs#L255)
- (tests) [startup_gate_tests.rs:264](tests/startup_gate_tests.rs#L264)
- (tests) [startup_gate_tests.rs:275](tests/startup_gate_tests.rs#L275)
- (tests) [startup_gate_tests.rs:288](tests/startup_gate_tests.rs#L288)
- (tests) [startup_gate_tests.rs:300](tests/startup_gate_tests.rs#L300)
- (tests) [startup_gate_tests.rs:311](tests/startup_gate_tests.rs#L311)

### SYS-0025

Layers: implementations=storage; verifications=storage

> The server shall aggressively reclaim memory from idle per-queue data
> structures when memory pressur...

**Implementations:**

- (storage) [storage.rs:1010](src/storage.rs#L1010)

**Verifications:**

- (storage) [storage.rs:3594](src/storage.rs#L3594)
- (storage) [storage.rs:3649](src/storage.rs#L3649)
- (storage) [storage.rs:3685](src/storage.rs#L3685)
- (storage) [storage.rs:3727](src/storage.rs#L3727)
- (storage) [storage.rs:3778](src/storage.rs#L3778)
- (storage) [storage.rs:3822](src/storage.rs#L3822)

### WS-0001

Layers: implementations=api+core; verifications=tests

> The Qrusty server shall accept WebSocket upgrade requests at the path
> `/ws`. The upgrade shall follo...

**Implementations:**

- (api) [api.rs:1137](src/api.rs#L1137)
- (core) [ws.rs:5](src/ws.rs#L5)

**Verifications:**

- (tests) [ws_tests.rs:101](tests/ws_tests.rs#L101)

### WS-0002

Layers: implementations=core; verifications=tests

> All WebSocket frames exchanged between the server and a client shall be
> UTF-8 text frames containing...

**Implementations:**

- (core) [ws.rs:5](src/ws.rs#L5)

**Verifications:**

- (tests) [ws_tests.rs:114](tests/ws_tests.rs#L114)
- (tests) [ws_tests.rs:145](tests/ws_tests.rs#L145)

### WS-0003

Layers: implementations=core; verifications=tests

> Every client-to-server frame (request frame) shall contain a `type` string
> field identifying the ope...

**Implementations:**

- (core) [ws.rs:5](src/ws.rs#L5)

**Verifications:**

- (tests) [ws_tests.rs:176](tests/ws_tests.rs#L176)
- (tests) [ws_tests.rs:204](tests/ws_tests.rs#L204)

### WS-0004

Layers: implementations=core; verifications=tests

> Every server-to-client frame (response frame) shall contain a `type` string
> field. Server-initiated ...

**Implementations:**

- (core) [ws.rs:5](src/ws.rs#L5)

**Verifications:**

- (tests) [ws_tests.rs:176](tests/ws_tests.rs#L176)
- (tests) [ws_tests.rs:204](tests/ws_tests.rs#L204)

### WS-0005

Layers: implementations=core; verifications=tests

> When the server encounters an application-level error processing a client
> request, it shall send an ...

**Implementations:**

- (core) [ws.rs:5](src/ws.rs#L5)

**Verifications:**

- (tests) [ws_tests.rs:226](tests/ws_tests.rs#L226)
- (tests) [ws_tests.rs:711](tests/ws_tests.rs#L711)

### WS-0006

Layers: implementations=core; verifications=tests

> The WebSocket API shall support a publish operation with `"type":
"publish"`. The request frame shal...

**Implementations:**

- (core) [ws.rs:5](src/ws.rs#L5)

**Verifications:**

- (tests) [ws_tests.rs:250](tests/ws_tests.rs#L250)
- (tests) [ws_tests.rs:272](tests/ws_tests.rs#L272)
- (tests) [ws_tests.rs:734](tests/ws_tests.rs#L734)
- (tests) [ws_tests.rs:1580](tests/ws_tests.rs#L1580)

### WS-0007

Layers: implementations=core; verifications=tests

> The WebSocket API shall support a subscribe operation with `"type":
"subscribe"`. The request frame ...

**Implementations:**

- (core) [ws.rs:5](src/ws.rs#L5)

**Verifications:**

- (tests) [ws_tests.rs:299](tests/ws_tests.rs#L299)
- (tests) [ws_tests.rs:348](tests/ws_tests.rs#L348)
- (tests) [ws_tests.rs:1553](tests/ws_tests.rs#L1553)
- (tests) [ws_tests.rs:1597](tests/ws_tests.rs#L1597)

### WS-0008

Layers: implementations=core; verifications=tests

> A delivery frame is a server-initiated frame with `"type": "deliver"`. It
> shall include the followin...

**Implementations:**

- (core) [ws.rs:5](src/ws.rs#L5)

**Verifications:**

- (tests) [ws_tests.rs:299](tests/ws_tests.rs#L299)

### WS-0009

Layers: implementations=core; verifications=tests

> The WebSocket API shall support an unsubscribe operation with `"type":
"unsubscribe"`. The request f...

**Implementations:**

- (core) [ws.rs:5](src/ws.rs#L5)

**Verifications:**

- (tests) [ws_tests.rs:368](tests/ws_tests.rs#L368)

### WS-0010

Layers: implementations=core; verifications=tests

> A single WebSocket connection shall support simultaneous subscriptions to
> multiple queues. Each subs...

**Implementations:**

- (core) [ws.rs:5](src/ws.rs#L5)

**Verifications:**

- (tests) [ws_tests.rs:402](tests/ws_tests.rs#L402)

### WS-0011

Layers: implementations=core; verifications=tests

> The WebSocket API shall support an acknowledge operation with `"type":
"ack"`. The request frame sha...

**Implementations:**

- (core) [ws.rs:5](src/ws.rs#L5)

**Verifications:**

- (tests) [ws_tests.rs:447](tests/ws_tests.rs#L447)

### WS-0012

Layers: implementations=core; verifications=tests

> The WebSocket API shall support a negative-acknowledge operation with
> `"type": "nack"`. The request ...

**Implementations:**

- (core) [ws.rs:5](src/ws.rs#L5)

**Verifications:**

- (tests) [ws_tests.rs:498](tests/ws_tests.rs#L498)

### WS-0013

Layers: implementations=core; verifications=tests

> The WebSocket API shall support a batch-acknowledge operation with `"type":
"batch-ack"`. The reques...

**Implementations:**

- (core) [ws.rs:5](src/ws.rs#L5)

**Verifications:**

- (tests) [ws_tests.rs:576](tests/ws_tests.rs#L576)

### WS-0014

Layers: implementations=core; verifications=tests

> The WebSocket API shall support a batch-negative-acknowledge operation with
> `"type": "batch-nack"`. ...

**Implementations:**

- (core) [ws.rs:5](src/ws.rs#L5)

**Verifications:**

- (tests) [ws_tests.rs:626](tests/ws_tests.rs#L626)

### WS-0015

Layers: implementations=core; verifications=tests

> The server shall send a WebSocket ping frame to each connected client at a
> configurable interval (de...

**Implementations:**

- (core) [ws.rs:5](src/ws.rs#L5)

**Verifications:**

- (tests) [ws_tests.rs:1385](tests/ws_tests.rs#L1385)

### WS-0016

Layers: implementations=core; verifications=tests

> When a WebSocket connection is closed, whether by client-initiated close
> frame, server-initiated clo...

**Implementations:**

- (core) [ws.rs:5](src/ws.rs#L5)

**Verifications:**

- (tests) [ws_tests.rs:681](tests/ws_tests.rs#L681)

### WS-0017

Layers: implementations=core; verifications=core

> The `qrusty_client` Rust crate (at `crates/qrusty_client/`) shall provide a
> `WsSession` type for int...

**Implementations:**

- (core) [ws.rs:5](crates/qrusty_client/src/ws.rs#L5)

**Verifications:**

- (core) [ws.rs:661](crates/qrusty_client/src/ws.rs#L661)

### WS-0018

Layers: implementations=other; verifications=other+tests

> The Python client integration (at `integrations/pyclient/` and
> `integrations/python/`) shall provide...

**Implementations:**

- (other) [qrusty_pyclient.py:242](integrations/pyclient/qrusty_pyclient.py#L242)
- (other) [qrusty_ws.py:7](integrations/python/qrusty_ws.py#L7)

**Verifications:**

- (tests) [test_qrusty_pyclient.py:64](integrations/pyclient/tests/test_qrusty_pyclient.py#L64)
- (other) [test_qrusty_ws.py:26](integrations/python/test_qrusty_ws.py#L26)

### WS-0019

Layers: implementations=other; verifications=other

> The Node.js client integration (at `integrations/nodeclient/`) shall provide
> a `WsSession` class for...

**Implementations:**

- (other) [index.js:247](integrations/nodeclient/index.js#L247)

**Verifications:**

- (other) [test.js:43](integrations/nodeclient/test.js#L43)

### WS-0020

Layers: implementations=core+other+storage; verifications=tests

> The WebSocket API shall support a lock-renewal operation with `"type":
"renew"`. The request frame s...

**Implementations:**

- (storage) [storage.rs:2154](src/storage.rs#L2154)
- (core) [ws.rs:5](src/ws.rs#L5)
- (core) [ws.rs:5](crates/qrusty_client/src/ws.rs#L5)
- (other) [qrusty_pyclient.py:470](integrations/pyclient/qrusty_pyclient.py#L470)
- (other) [qrusty_ws.py:210](integrations/python/qrusty_ws.py#L210)
- (other) [index.js:573](integrations/nodeclient/index.js#L573)

**Verifications:**

- (tests) [ws_tests.rs:751](tests/ws_tests.rs#L751)
- (tests) [ws_tests.rs:798](tests/ws_tests.rs#L798)

### WS-0021

Layers: implementations=api+core; verifications=tests

> The WebSocket API shall update the same per-queue rate counters that the HTTP
> API updates. Specific...

**Implementations:**

- (api) [api.rs:1137](src/api.rs#L1137)
- (core) [ws.rs:227](src/ws.rs#L227)

**Verifications:**

- (tests) [ws_tests.rs:826](tests/ws_tests.rs#L826)

### WS-0022

Layers: implementations=core; verifications=core+tests

> The client router task shall not block on subscriber channel sends. When
> routing a delivery frame to...

**Implementations:**

- (core) [ws.rs:5](crates/qrusty_client/src/ws.rs#L5)
- (core) [ws.rs:502](crates/qrusty_client/src/ws.rs#L502)

**Verifications:**

- (tests) [ws_tests.rs:1470](tests/ws_tests.rs#L1470)
- (tests) [ws_tests.rs:1518](tests/ws_tests.rs#L1518)
- (core) [ws.rs:709](crates/qrusty_client/src/ws.rs#L709)

### WS-0023

Layers: implementations=core; verifications=tests

> The WebSocket API shall support optional credit-based flow control for
> subscriptions. When a subscri...

**Implementations:**

- (core) [ws.rs:5](src/ws.rs#L5)
- (core) [ws.rs:5](crates/qrusty_client/src/ws.rs#L5)

**Verifications:**

- (tests) [ws_tests.rs:1008](tests/ws_tests.rs#L1008)
- (tests) [ws_tests.rs:1086](tests/ws_tests.rs#L1086)
- (tests) [ws_tests.rs:1117](tests/ws_tests.rs#L1117)
- (tests) [ws_tests.rs:1268](tests/ws_tests.rs#L1268)

### WS-0024

Layers: implementations=core; verifications=tests

> The WebSocket API shall support a "no_reply": true field on any client
> frame. When present, the serv...

**Implementations:**

- (core) [ws.rs:5](src/ws.rs#L5)
- (core) [ws.rs:5](crates/qrusty_client/src/ws.rs#L5)

**Verifications:**

- (tests) [ws_tests.rs:930](tests/ws_tests.rs#L930)
- (tests) [ws_tests.rs:1223](tests/ws_tests.rs#L1223)

### WS-0025

Layers: implementations=core; verifications=tests

> The WsSession type shall expose a public send_frame method that sends a raw
> JSON frame over the WebS...

**Implementations:**

- (core) [ws.rs:5](crates/qrusty_client/src/ws.rs#L5)

**Verifications:**

- (tests) [ws_tests.rs:1137](tests/ws_tests.rs#L1137)

### WS-0026

Layers: implementations=core; verifications=core+tests

> The WsSession request method shall enforce a configurable timeout on every
> request-response round tr...

**Implementations:**

- (core) [ws.rs:5](crates/qrusty_client/src/ws.rs#L5)

**Verifications:**

- (tests) [ws_tests.rs:1183](tests/ws_tests.rs#L1183)
- (core) [ws.rs:774](crates/qrusty_client/src/ws.rs#L774)

### WS-0027

Layers: implementations=core; verifications=tests

> The WebSocket connection handler shall process incoming client frames,
> deliver queued messages, and ...

**Implementations:**

- (core) [ws.rs:5](src/ws.rs#L5)
- (core) [ws.rs:227](src/ws.rs#L227)

**Verifications:**

- (tests) [concurrency_tests.rs:5](tests/concurrency_tests.rs#L5)

### WS-0028

Layers: implementations=core; verifications=core

> The Rust WebSocket client (`qrusty_client::ws::WsSession`) shall keep
> idle connections alive by resp...

**Implementations:**

- (core) [ws.rs:502](crates/qrusty_client/src/ws.rs#L502)

**Verifications:**

- (core) [ws.rs:890](crates/qrusty_client/src/ws.rs#L890)
- (core) [ws.rs:928](crates/qrusty_client/src/ws.rs#L928)
