# Traceability Report
Generated: 2026-04-28T21:25:29.228270
## Summary
| Total Requirements | 106 |
| Implemented | 106 (100%) |
| Requires Test Verification | 98 |
| Verified (in tests) | 97 (98%) |
| Untraced Requirements | 0 |
| Orphan Tags | 0 |
## Traceability Matrix
| 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 | 3 location(s) | 8 test(s) |
| API-0014 | test | 5 location(s) | 9 test(s) |
| 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) |
| DLV-0013 | test | 2 location(s) | 2 test(s) |
| DLV-0014 | test | 3 location(s) | ❌ None |
| 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) | 2 test(s) |
| PER-0016 | test | 3 location(s) | 7 test(s) |
| PER-0017 | test | 2 location(s) | 2 test(s) |
| PER-0018 | test | 2 location(s) | 5 test(s) |
| PER-0019 | test | 3 location(s) | 4 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) | 1 test(s) |
| SYS-0017 | test | 8 location(s) | 7 test(s) |
| SYS-0018 | test | 10 location(s) | 14 test(s) |
| SYS-0019 | test | 5 location(s) | 2 test(s) |
| SYS-0020 | test | 2 location(s) | 3 test(s) |
| SYS-0021 | test | 2 location(s) | 1 test(s) |
| SYS-0022 | test | 1 location(s) | 5 test(s) |
| SYS-0023 | test | 1 location(s) | 1 test(s) |
| 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) | 6 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) | 3 test(s) |
| WS-0021 | test | 2 location(s) | 1 test(s) |
| WS-0022 | test | 2 location(s) | 4 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) | 3 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:1230](src/api.rs#L1230)
**Verifications:**
- (tests) [api_tests.rs:669](tests/api_tests.rs#L669)
- (tests) [api_tests.rs:724](tests/api_tests.rs#L724)
- (tests) [api_tests.rs:779](tests/api_tests.rs#L779)
### 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:1566](src/api.rs#L1566)
- (other) [traceability.py:9](scripts/traceability.py#L9)
**Verifications:**
- (tests) [api_tests.rs:158](tests/api_tests.rs#L158)
- (tests) [api_tests.rs:178](tests/api_tests.rs#L178)
### 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:1920](src/storage.rs#L1920)
**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:2185](src/storage.rs#L2185)
**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:2390](src/storage.rs#L2390)
**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:2177](src/api.rs#L2177)
**Verifications:**
- (tests) [api_tests.rs:87](tests/api_tests.rs#L87)
### 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:2024](src/api.rs#L2024)
**Verifications:**
- (tests) [api_tests.rs:824](tests/api_tests.rs#L824)
- (tests) [api_tests.rs:865](tests/api_tests.rs#L865)
- (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:2083](src/api.rs#L2083)
**Verifications:**
- (tests) [api_tests.rs:1009](tests/api_tests.rs#L1009)
### 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:1417](src/api.rs#L1417)
**Verifications:**
- (tests) [api_tests.rs:1248](tests/api_tests.rs#L1248)
### 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:1368](src/api.rs#L1368)
**Verifications:**
- (tests) [api_tests.rs:1177](tests/api_tests.rs#L1177)
- (tests) [api_tests.rs:1793](tests/api_tests.rs#L1793)
### 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:2154](src/api.rs#L2154)
### 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:1296](src/api.rs#L1296)
**Verifications:**
- (tests) [api_tests.rs:1326](tests/api_tests.rs#L1326)
- (tests) [api_tests.rs:1380](tests/api_tests.rs#L1380)
- (tests) [api_tests.rs:1410](tests/api_tests.rs#L1410)
- (tests) [api_tests.rs:1471](tests/api_tests.rs#L1471)
- (tests) [api_tests.rs:1504](tests/api_tests.rs#L1504)
### API-0013
Layers: implementations=api+core; verifications=core+tests
> 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)
- (api) [api.rs:406](src/api.rs#L406)
- (api) [api.rs:2102](src/api.rs#L2102)
**Verifications:**
- (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)
- (tests) [api_tests.rs:2222](tests/api_tests.rs#L2222)
- (tests) [api_tests.rs:2231](tests/api_tests.rs#L2231)
- (tests) [api_tests.rs:2271](tests/api_tests.rs#L2271)
- (tests) [api_tests.rs:2404](tests/api_tests.rs#L2404)
### API-0014
Layers: implementations=api+core+storage; verifications=tests
> The Qrusty server shall provide an HTTP endpoint:
POST /force-unlock/{queue}
that force-unlock...
**Implementations:**
- (core) [memory_storage.rs:1307](src/memory_storage.rs#L1307)
- (storage) [storage.rs:3474](src/storage.rs#L3474)
- (api) [api.rs:624](src/api.rs#L624)
- (api) [api.rs:1471](src/api.rs#L1471)
- (core) [client.rs:488](crates/qrusty_client/src/client.rs#L488)
**Verifications:**
- (tests) [api_error_tests.rs:248](tests/api_error_tests.rs#L248)
- (tests) [memory_storage_tests.rs:1216](tests/memory_storage_tests.rs#L1216)
- (tests) [memory_storage_tests.rs:1257](tests/memory_storage_tests.rs#L1257)
- (tests) [api_tests.rs:2427](tests/api_tests.rs#L2427)
- (tests) [api_tests.rs:2475](tests/api_tests.rs#L2475)
- (tests) [storage_tests.rs:4140](tests/storage_tests.rs#L4140)
- (tests) [storage_tests.rs:4177](tests/storage_tests.rs#L4177)
- (tests) [storage_tests.rs:4185](tests/storage_tests.rs#L4185)
- (tests) [storage_tests.rs:4212](tests/storage_tests.rs#L4212)
### 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:1920](src/storage.rs#L1920)
**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:1920](src/storage.rs#L1920)
**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:2185](src/storage.rs#L2185)
**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:2390](src/storage.rs#L2390)
**Verifications:**
- (tests) [storage_tests.rs:277](tests/storage_tests.rs#L277)
- (tests) [storage_tests.rs:2020](tests/storage_tests.rs#L2020)
- (tests) [storage_tests.rs:3625](tests/storage_tests.rs#L3625)
### 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:3013](src/storage.rs#L3013)
**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:2390](src/storage.rs#L2390)
**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:2390](src/storage.rs#L2390)
**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:2390](src/storage.rs#L2390)
**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:2390](src/storage.rs#L2390)
**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:1752](src/storage.rs#L1752)
**Verifications:**
- (tests) [storage_tests.rs:2659](tests/storage_tests.rs#L2659)
- (tests) [storage_tests.rs:2781](tests/storage_tests.rs#L2781)
### 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:1920](src/storage.rs#L1920)
**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:564](src/memory_storage.rs#L564)
**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)
### DLV-0013
Layers: implementations=storage; verifications=tests
> Expired message locks shall be recovered by `unlock_expired_messages`
> even when the in-memory `locke...
**Implementations:**
- (storage) [storage.rs:258](src/storage.rs#L258)
- (storage) [storage.rs:3013](src/storage.rs#L3013)
**Verifications:**
- (tests) [storage_tests.rs:801](tests/storage_tests.rs#L801)
- (tests) [storage_tests.rs:984](tests/storage_tests.rs#L984)
### DLV-0014
Layers: implementations=core+storage; verifications=-
> Lock-state lookups by `(queue, message_id)` shall be O(1) in the common
> case, independent of queue d...
**Implementations:**
- (core) [memory_storage.rs:67](src/memory_storage.rs#L67)
- (storage) [storage.rs:124](src/storage.rs#L124)
- (storage) [storage.rs:185](src/storage.rs#L185)
### 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:1752](src/storage.rs#L1752)
**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:1752](src/storage.rs#L1752)
**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:1752](src/storage.rs#L1752)
**Verifications:**
- (tests) [storage_tests.rs:1054](tests/storage_tests.rs#L1054)
### 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:1752](src/storage.rs#L1752)
**Verifications:**
- (tests) [storage_tests.rs:1068](tests/storage_tests.rs#L1068)
- (tests) [storage_tests.rs:1958](tests/storage_tests.rs#L1958)
- (tests) [storage_tests.rs:2020](tests/storage_tests.rs#L2020)
### 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:2390](src/storage.rs#L2390)
- (storage) [storage.rs:3013](src/storage.rs#L3013)
**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:289](src/storage.rs#L289)
**Verifications:**
- (tests) [storage_tests.rs:1155](tests/storage_tests.rs#L1155)
### 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:289](src/storage.rs#L289)
**Verifications:**
- (tests) [storage_tests.rs:1274](tests/storage_tests.rs#L1274)
### 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:1752](src/storage.rs#L1752)
**Verifications:**
- (tests) [storage_tests.rs:2659](tests/storage_tests.rs#L2659)
- (tests) [storage_tests.rs:3549](tests/storage_tests.rs#L3549)
### 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:809](src/storage.rs#L809)
**Verifications:**
- (tests) [storage_tests.rs:2751](tests/storage_tests.rs#L2751)
- (tests) [storage_tests.rs:2781](tests/storage_tests.rs#L2781)
### 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:1752](src/storage.rs#L1752)
**Verifications:**
- (tests) [api_tests.rs:2122](tests/api_tests.rs#L2122)
- (tests) [storage_tests.rs:2682](tests/storage_tests.rs#L2682)
- (tests) [storage_tests.rs:2704](tests/storage_tests.rs#L2704)
- (tests) [storage_tests.rs:2728](tests/storage_tests.rs#L2728)
- (tests) [storage_tests.rs:2812](tests/storage_tests.rs#L2812)
- (tests) [storage_tests.rs:2839](tests/storage_tests.rs#L2839)
- (tests) [storage_tests.rs:2863](tests/storage_tests.rs#L2863)
- (tests) [storage_tests.rs:2887](tests/storage_tests.rs#L2887)
- (tests) [storage_tests.rs:2911](tests/storage_tests.rs#L2911)
- (tests) [storage_tests.rs:2942](tests/storage_tests.rs#L2942)
- (tests) [storage_tests.rs:2975](tests/storage_tests.rs#L2975)
- (tests) [storage_tests.rs:3575](tests/storage_tests.rs#L3575)
### 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:1752](src/storage.rs#L1752)
**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:2164](tests/api_tests.rs#L2164)
### 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:3600](src/storage.rs#L3600)
**Verifications:**
- (tests) [memory_storage_tests.rs:1077](tests/memory_storage_tests.rs#L1077)
- (tests) [api_tests.rs:1793](tests/api_tests.rs#L1793)
- (tests) [api_tests.rs:1851](tests/api_tests.rs#L1851)
- (tests) [storage_tests.rs:3336](tests/storage_tests.rs#L3336)
- (tests) [storage_tests.rs:3369](tests/storage_tests.rs#L3369)
### 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:36](src/storage.rs#L36)
**Verifications:**
- (tests) [storage_tests.rs:3549](tests/storage_tests.rs#L3549)
### PER-0015
Layers: implementations=storage; verifications=storage
> The RocksDB block cache size shall be configurable via the
> `ROCKSDB_CACHE_MB` environment variable, ...
**Implementations:**
- (storage) [storage.rs:633](src/storage.rs#L633)
**Verifications:**
- (storage) [storage.rs:4734](src/storage.rs#L4734)
- (storage) [storage.rs:4752](src/storage.rs#L4752)
### 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:1716](src/storage.rs#L1716)
- (storage) [storage.rs:1838](src/storage.rs#L1838)
**Verifications:**
- (tests) [storage_tests.rs:3527](tests/storage_tests.rs#L3527)
- (tests) [storage_tests.rs:3549](tests/storage_tests.rs#L3549)
- (tests) [storage_tests.rs:3575](tests/storage_tests.rs#L3575)
- (tests) [storage_tests.rs:3625](tests/storage_tests.rs#L3625)
- (tests) [storage_tests.rs:3647](tests/storage_tests.rs#L3647)
- (tests) [storage_tests.rs:3750](tests/storage_tests.rs#L3750)
- (tests) [storage_tests.rs:3969](tests/storage_tests.rs#L3969)
### PER-0017
Layers: implementations=core+storage; verifications=tests
> 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:1233](src/storage.rs#L1233)
**Verifications:**
- (tests) [storage_tests.rs:3998](tests/storage_tests.rs#L3998)
- (tests) [storage_tests.rs:4077](tests/storage_tests.rs#L4077)
### 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:1716](src/storage.rs#L1716)
**Verifications:**
- (tests) [storage_tests.rs:3527](tests/storage_tests.rs#L3527)
- (tests) [storage_tests.rs:3601](tests/storage_tests.rs#L3601)
- (tests) [storage_tests.rs:3647](tests/storage_tests.rs#L3647)
- (tests) [storage_tests.rs:3687](tests/storage_tests.rs#L3687)
- (tests) [storage_tests.rs:3750](tests/storage_tests.rs#L3750)
### PER-0019
Layers: implementations=storage; verifications=tests
> Messages with unrecoverable payload references (missing or corrupted
> segment files) shall be automat...
**Implementations:**
- (storage) [storage.rs:900](src/storage.rs#L900)
- (storage) [storage.rs:1716](src/storage.rs#L1716)
- (storage) [storage.rs:1920](src/storage.rs#L1920)
**Verifications:**
- (tests) [storage_tests.rs:3806](tests/storage_tests.rs#L3806)
- (tests) [storage_tests.rs:3850](tests/storage_tests.rs#L3850)
- (tests) [storage_tests.rs:3882](tests/storage_tests.rs#L3882)
- (tests) [storage_tests.rs:3924](tests/storage_tests.rs#L3924)
### 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:1838](src/storage.rs#L1838)
**Verifications:**
- (tests) [storage_tests.rs:3998](tests/storage_tests.rs#L3998)
- (tests) [storage_tests.rs:4039](tests/storage_tests.rs#L4039)
- (tests) [storage_tests.rs:4058](tests/storage_tests.rs#L4058)
### 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:4077](tests/storage_tests.rs#L4077)
### 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:1752](src/storage.rs#L1752)
- (storage) [storage.rs:1920](src/storage.rs#L1920)
- (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:1752](src/storage.rs#L1752)
- (storage) [storage.rs:1920](src/storage.rs#L1920)
**Verifications:**
- (tests) [memory_storage_tests.rs:1113](tests/memory_storage_tests.rs#L1113)
- (tests) [memory_storage_tests.rs:1153](tests/memory_storage_tests.rs#L1153)
- (tests) [memory_storage_tests.rs:1184](tests/memory_storage_tests.rs#L1184)
- (tests) [api_tests.rs:2063](tests/api_tests.rs#L2063)
- (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:3396](tests/storage_tests.rs#L3396)
- (tests) [storage_tests.rs:3435](tests/storage_tests.rs#L3435)
- (tests) [storage_tests.rs:3464](tests/storage_tests.rs#L3464)
- (tests) [storage_tests.rs:3500](tests/storage_tests.rs#L3500)
### 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:1920](src/storage.rs#L1920)
**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:1920](src/storage.rs#L1920)
- (storage) [storage.rs:3013](src/storage.rs#L3013)
**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:94](src/main.rs#L94)
- (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:1185](src/api.rs#L1185)
**Verifications:**
- (tests) [api_tests.rs:75](tests/api_tests.rs#L75)
### 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:1087](src/api.rs#L1087)
**Verifications:**
- (tests) [api_tests.rs:196](tests/api_tests.rs#L196)
### 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:961](src/api.rs#L961)
- (api) [api.rs:2154](src/api.rs#L2154)
### 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:961](src/api.rs#L961)
- (api) [api.rs:2154](src/api.rs#L2154)
### 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:961](src/api.rs#L961)
- (api) [api.rs:2154](src/api.rs#L2154)
### 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:1215](src/api.rs#L1215)
**Verifications:**
- (tests) [ws_tests.rs:106](tests/ws_tests.rs#L106)
### 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:238](src/main.rs#L238)
- (core) [main.rs:253](src/main.rs#L253)
**Verifications:**
- (core) [main.rs:593](src/main.rs#L593)
- (core) [main.rs:666](src/main.rs#L666)
- (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:961](src/api.rs#L961)
**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:231](src/log_buffer.rs#L231)
- (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=tests
> All RocksDB storage operations (push, pop, ack, nack, batch_ack,
> batch_nack, get_queue_stats, get_al...
**Implementations:**
- (api) [api.rs:651](src/api.rs#L651)
**Verifications:**
- (tests) [api_tests.rs:12](tests/api_tests.rs#L12)
### SYS-0017
Layers: implementations=api+core; verifications=core+tests
> 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)
- (api) [api.rs:1602](src/api.rs#L1602)
- (api) [api.rs:1706](src/api.rs#L1706)
- (api) [api.rs:1770](src/api.rs#L1770)
- (api) [api.rs:1843](src/api.rs#L1843)
- (api) [api.rs:1889](src/api.rs#L1889)
- (api) [api.rs:1933](src/api.rs#L1933)
- (api) [api.rs:2040](src/api.rs#L2040)
**Verifications:**
- (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)
- (tests) [api_tests.rs:2299](tests/api_tests.rs#L2299)
### SYS-0018
Layers: implementations=core+storage; verifications=storage
> The Qrusty server shall maintain an in-memory cache of per-queue message
> counts (available and locke...
**Implementations:**
- (core) [memory_storage.rs:2](src/memory_storage.rs#L2)
- (core) [memory_storage.rs:79](src/memory_storage.rs#L79)
- (core) [memory_storage.rs:1188](src/memory_storage.rs#L1188)
- (core) [memory_storage.rs:1221](src/memory_storage.rs#L1221)
- (core) [memory_storage.rs:1240](src/memory_storage.rs#L1240)
- (storage) [storage.rs:111](src/storage.rs#L111)
- (storage) [storage.rs:850](src/storage.rs#L850)
- (storage) [storage.rs:3199](src/storage.rs#L3199)
- (storage) [storage.rs:3251](src/storage.rs#L3251)
- (storage) [storage.rs:3443](src/storage.rs#L3443)
**Verifications:**
- (storage) [storage.rs:4171](src/storage.rs#L4171)
- (storage) [storage.rs:4186](src/storage.rs#L4186)
- (storage) [storage.rs:4202](src/storage.rs#L4202)
- (storage) [storage.rs:4218](src/storage.rs#L4218)
- (storage) [storage.rs:4234](src/storage.rs#L4234)
- (storage) [storage.rs:4253](src/storage.rs#L4253)
- (storage) [storage.rs:4272](src/storage.rs#L4272)
- (storage) [storage.rs:4297](src/storage.rs#L4297)
- (storage) [storage.rs:4310](src/storage.rs#L4310)
- (storage) [storage.rs:4328](src/storage.rs#L4328)
- (storage) [storage.rs:4347](src/storage.rs#L4347)
- (storage) [storage.rs:4377](src/storage.rs#L4377)
- (storage) [storage.rs:4401](src/storage.rs#L4401)
- (storage) [storage.rs:4414](src/storage.rs#L4414)
### 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:253](src/main.rs#L253)
- (storage) [storage.rs:593](src/storage.rs#L593)
- (storage) [storage.rs:759](src/storage.rs#L759)
- (api) [api.rs:855](src/api.rs#L855)
- (api) [api.rs:1185](src/api.rs#L1185)
**Verifications:**
- (core) [main.rs:790](src/main.rs#L790)
- (core) [main.rs:856](src/main.rs#L856)
### SYS-0020
Layers: implementations=storage; verifications=storage
> The storage layer shall maintain a per-queue hot tier of the
> highest-priority **available** (unlocke...
**Implementations:**
- (storage) [storage.rs:993](src/storage.rs#L993)
- (storage) [storage.rs:1855](src/storage.rs#L1855)
**Verifications:**
- (storage) [storage.rs:4833](src/storage.rs#L4833)
- (storage) [storage.rs:4884](src/storage.rs#L4884)
- (storage) [storage.rs:4930](src/storage.rs#L4930)
### SYS-0021
Layers: implementations=storage; verifications=storage
> Hot tier capacity and refill threshold shall be configurable via
> environment variables:
- `QRUSTY_H...
**Implementations:**
- (storage) [storage.rs:237](src/storage.rs#L237)
- (storage) [storage.rs:242](src/storage.rs#L242)
**Verifications:**
- (storage) [storage.rs:4930](src/storage.rs#L4930)
### SYS-0022
Layers: implementations=core; verifications=core+storage
> 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)
**Verifications:**
- (core) [memory_monitor.rs:530](src/memory_monitor.rs#L530)
- (core) [memory_monitor.rs:569](src/memory_monitor.rs#L569)
- (core) [memory_monitor.rs:588](src/memory_monitor.rs#L588)
- (storage) [storage.rs:4772](src/storage.rs#L4772)
- (storage) [storage.rs:4792](src/storage.rs#L4792)
### SYS-0023
Layers: implementations=api; verifications=tests
> The `/stats` endpoint shall include the following memory fields in
> its `summary` object:
- `memory\_...
**Implementations:**
- (api) [api.rs:2229](src/api.rs#L2229)
**Verifications:**
- (tests) [api_tests.rs:2504](tests/api_tests.rs#L2504)
### 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:855](src/api.rs#L855)
**Verifications:**
- (core) [main.rs:790](src/main.rs#L790)
- (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:1095](src/storage.rs#L1095)
**Verifications:**
- (storage) [storage.rs:4462](src/storage.rs#L4462)
- (storage) [storage.rs:4517](src/storage.rs#L4517)
- (storage) [storage.rs:4553](src/storage.rs#L4553)
- (storage) [storage.rs:4595](src/storage.rs#L4595)
- (storage) [storage.rs:4646](src/storage.rs#L4646)
- (storage) [storage.rs:4690](src/storage.rs#L4690)
### 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:1215](src/api.rs#L1215)
- (core) [ws.rs:5](src/ws.rs#L5)
**Verifications:**
- (tests) [ws_tests.rs:106](tests/ws_tests.rs#L106)
### 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:119](tests/ws_tests.rs#L119)
- (tests) [ws_tests.rs:150](tests/ws_tests.rs#L150)
### 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:181](tests/ws_tests.rs#L181)
- (tests) [ws_tests.rs:209](tests/ws_tests.rs#L209)
### 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:181](tests/ws_tests.rs#L181)
- (tests) [ws_tests.rs:209](tests/ws_tests.rs#L209)
### 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:231](tests/ws_tests.rs#L231)
- (tests) [ws_tests.rs:716](tests/ws_tests.rs#L716)
### 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:255](tests/ws_tests.rs#L255)
- (tests) [ws_tests.rs:277](tests/ws_tests.rs#L277)
- (tests) [ws_tests.rs:739](tests/ws_tests.rs#L739)
- (tests) [ws_tests.rs:1653](tests/ws_tests.rs#L1653)
### 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:304](tests/ws_tests.rs#L304)
- (tests) [ws_tests.rs:353](tests/ws_tests.rs#L353)
- (tests) [ws_tests.rs:1626](tests/ws_tests.rs#L1626)
- (tests) [ws_tests.rs:1670](tests/ws_tests.rs#L1670)
- (tests) [ws_tests.rs:1718](tests/ws_tests.rs#L1718)
- (tests) [ws_tests.rs:1867](tests/ws_tests.rs#L1867)
### 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:304](tests/ws_tests.rs#L304)
### 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:373](tests/ws_tests.rs#L373)
### 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:407](tests/ws_tests.rs#L407)
### 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:452](tests/ws_tests.rs#L452)
### 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:503](tests/ws_tests.rs#L503)
### 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:581](tests/ws_tests.rs#L581)
### 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:631](tests/ws_tests.rs#L631)
### 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:1390](tests/ws_tests.rs#L1390)
### 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:686](tests/ws_tests.rs#L686)
### 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:798](crates/qrusty_client/src/ws.rs#L798)
### 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:2509](src/storage.rs#L2509)
- (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:756](tests/ws_tests.rs#L756)
- (tests) [ws_tests.rs:803](tests/ws_tests.rs#L803)
- (tests) [ws_tests.rs:1795](tests/ws_tests.rs#L1795)
### 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:1215](src/api.rs#L1215)
- (core) [ws.rs:251](src/ws.rs#L251)
**Verifications:**
- (tests) [ws_tests.rs:831](tests/ws_tests.rs#L831)
### 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:545](crates/qrusty_client/src/ws.rs#L545)
**Verifications:**
- (tests) [ws_tests.rs:1475](tests/ws_tests.rs#L1475)
- (tests) [ws_tests.rs:1533](tests/ws_tests.rs#L1533)
- (tests) [ws_tests.rs:1591](tests/ws_tests.rs#L1591)
- (core) [ws.rs:846](crates/qrusty_client/src/ws.rs#L846)
### 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:1013](tests/ws_tests.rs#L1013)
- (tests) [ws_tests.rs:1091](tests/ws_tests.rs#L1091)
- (tests) [ws_tests.rs:1122](tests/ws_tests.rs#L1122)
- (tests) [ws_tests.rs:1273](tests/ws_tests.rs#L1273)
### 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:935](tests/ws_tests.rs#L935)
- (tests) [ws_tests.rs:1228](tests/ws_tests.rs#L1228)
### 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:1142](tests/ws_tests.rs#L1142)
### 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:1188](tests/ws_tests.rs#L1188)
- (core) [ws.rs:912](crates/qrusty_client/src/ws.rs#L912)
### 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:251](src/ws.rs#L251)
**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:545](crates/qrusty_client/src/ws.rs#L545)
**Verifications:**
- (core) [ws.rs:1030](crates/qrusty_client/src/ws.rs#L1030)
- (core) [ws.rs:1077](crates/qrusty_client/src/ws.rs#L1077)
- (core) [ws.rs:1124](crates/qrusty_client/src/ws.rs#L1124)