impl
✓ api-bearer-auth-1979828142, rev. 0, impl
impl~api-bearer-auth-1979828142~0
psa-web/src/routes.rs:57
Out: 1
- req~api-bearer-auth~1 docs/specification.md:338
✓ api-bearer-auth-3644510249, rev. 0, impl
impl~api-bearer-auth-3644510249~0
psa-web/src/routes.rs:78
Out: 1
- req~api-bearer-auth~1 docs/specification.md:338
✓ api-error-parsing-3035988818, rev. 0, impl
impl~api-error-parsing-3035988818~0
psa-api/src/error.rs:43
Out: 1
- req~api-error-parsing~1 docs/specification.md:445
✓ api-error-parsing-4157571315, rev. 0, impl
impl~api-error-parsing-4157571315~0
psa-api/src/error.rs:6
Out: 1
- req~api-error-parsing~1 docs/specification.md:445
✓ api-error-parsing-505215529, rev. 0, impl
impl~api-error-parsing-505215529~0
psa-api/src/client.rs:119
Out: 1
- req~api-error-parsing~1 docs/specification.md:445
✓ api-pagination-1527207637, rev. 0, impl
impl~api-pagination-1527207637~0
psa-api/src/client.rs:156
Out: 1
- req~api-pagination~1 docs/specification.md:428
✓ api-pagination-2081603568, rev. 0, impl
impl~api-pagination-2081603568~0
psa-api/src/models.rs:22
Out: 1
- req~api-pagination~1 docs/specification.md:428
✓ api-pagination-2636694974, rev. 0, impl
impl~api-pagination-2636694974~0
psa-api/src/client.rs:414
Out: 1
- req~api-pagination~1 docs/specification.md:428
✓ callback-registration-2154895036, rev. 0, impl
impl~callback-registration-2154895036~0
psa-api/src/models.rs:285
Out: 1
- req~callback-registration~1 docs/specification.md:401
✓ callback-registration-265573515, rev. 0, impl
impl~callback-registration-265573515~0
psa-api/src/client.rs:374
Out: 1
- req~callback-registration~1 docs/specification.md:401
✓ callback-registration-2731894554, rev. 0, impl
impl~callback-registration-2731894554~0
psa-api/src/client.rs:362
Out: 1
- req~callback-registration~1 docs/specification.md:401
✓ callback-registration-877476003, rev. 0, impl
impl~callback-registration-877476003~0
psa-api/src/client.rs:22
Out: 1
- req~callback-registration~1 docs/specification.md:401
✓ charge-control-2666628358, rev. 0, impl
impl~charge-control-2666628358~0
psa-api/src/client.rs:226
Out: 1
- req~charge-control~1 docs/specification.md:105
✓ charge-control-endpoint-288163476, rev. 0, impl
impl~charge-control-endpoint-288163476~0
psa-web/src/routes.rs:30
Out: 1
- req~charge-control-endpoint~1 docs/specification.md:189
✓ charge-management-page-167646623, rev. 0, impl
impl~charge-management-page-167646623~0
psa-web/src/routes.rs:167
Out: 1
- req~charge-management-page~1 docs/specification.md:280
✓ charge-scheduling-1062149526, rev. 0, impl
impl~charge-scheduling-1062149526~0
psa-api/src/client.rs:268
Out: 1
- req~charge-scheduling~1 docs/specification.md:119
✓ charge-threshold-2864166297, rev. 0, impl
impl~charge-threshold-2864166297~0
psa-api/src/client.rs:245
Out: 1
- req~charge-threshold~1 docs/specification.md:112
✓ charging-session-recording-2505811050, rev. 0, impl
impl~charging-session-recording-2505811050~0
psa-web/src/db.rs:3
Out: 1
- req~charging-session-recording~1 docs/specification.md:163
✓ charging-session-recording-699341573, rev. 0, impl
impl~charging-session-recording-699341573~0
psa-api/src/models.rs:272
Out: 1
- req~charging-session-recording~1 docs/specification.md:163
✓ charging-sessions-endpoint-4222870490, rev. 0, impl
impl~charging-sessions-endpoint-4222870490~0
psa-web/src/routes.rs:55
Out: 1
- req~charging-sessions-endpoint~1 docs/specification.md:258
✓ clean-web-styling-573711, rev. 0, impl
impl~clean-web-styling-573711~0
psa-web/src/templates.rs:1
Out: 1
- req~clean-web-styling~1 docs/specification.md:310
✓ configuration-file-882198071, rev. 0, impl
impl~configuration-file-882198071~0
psa-api/src/config.rs:1
Out: 1
- req~configuration-file~1 docs/specification.md:319
✓ container-deployment-1449626451, rev. 0, impl
impl~container-deployment-1449626451~0
docker-compose.yaml:11
Out: 1
- req~container-deployment~1 docs/specification.md:389
✓ credential-persistence-3829303526, rev. 0, impl
impl~credential-persistence-3829303526~0
psa-api/src/auth.rs:37
Out: 1
- req~credential-persistence~1 docs/specification.md:66
✓ dashboard-overview-1611433166, rev. 0, impl
impl~dashboard-overview-1611433166~0
psa-web/src/routes.rs:141
Out: 1
- req~dashboard-overview~1 docs/specification.md:270
✓ dependency-audit-3595886600, rev. 0, impl
impl~dependency-audit-3595886600~0
deny.toml:1
Out: 1
- req~dependency-audit~1 docs/specification.md:373
✓ door-lock-control-113726357, rev. 0, impl
impl~door-lock-control-113726357~0
psa-api/src/client.rs:315
Out: 1
- req~door-lock-control~1 docs/specification.md:133
✓ door-lock-endpoint-3527654786, rev. 0, impl
impl~door-lock-endpoint-3527654786~0
psa-web/src/routes.rs:45
Out: 1
- req~door-lock-endpoint~1 docs/specification.md:211
✓ electricity-pricing-2233777927, rev. 0, impl
impl~electricity-pricing-2233777927~0
psa-api/src/config.rs:75
Out: 1
- req~electricity-pricing~1 docs/specification.md:326
✓ html-output-escaping-3144840179, rev. 0, impl
impl~html-output-escaping-3144840179~0
psa-web/src/templates.rs:8
Out: 1
- req~html-output-escaping~1 docs/specification.md:345
✓ http-server-3848259843, rev. 0, impl
impl~http-server-3848259843~0
psa-web/src/main.rs:17
Out: 1
- req~http-server~1 docs/specification.md:172
✓ lights-horn-control-2215347650, rev. 0, impl
impl~lights-horn-control-2215347650~0
psa-api/src/client.rs:346
Out: 1
- req~lights-horn-control~1 docs/specification.md:140
✓ lights-horn-control-3779272148, rev. 0, impl
impl~lights-horn-control-3779272148~0
psa-api/src/client.rs:332
Out: 1
- req~lights-horn-control~1 docs/specification.md:140
✓ lights-horn-endpoint-813005927, rev. 0, impl
impl~lights-horn-endpoint-813005927~0
psa-web/src/routes.rs:47
Out: 1
- req~lights-horn-endpoint~1 docs/specification.md:221
✓ modular-architecture-1582669371, rev. 0, impl
impl~modular-architecture-1582669371~0
Cargo.toml:1
Out: 1
- req~modular-architecture~1 docs/specification.md:26
✓ oauth2-authentication-2126636807, rev. 0, impl
impl~oauth2-authentication-2126636807~0
psa-api/src/auth.rs:1
Out: 1
- req~oauth2-authentication~1 docs/specification.md:49
✓ oauth2-scope-management-2677749437, rev. 0, impl
impl~oauth2-scope-management-2677749437~0
psa-api/src/auth.rs:14
Out: 1
- req~oauth2-scope-management~1 docs/specification.md:435
✓ preconditioning-control-992957845, rev. 0, impl
impl~preconditioning-control-992957845~0
psa-api/src/client.rs:296
Out: 1
- req~preconditioning-control~1 docs/specification.md:126
✓ preconditioning-endpoint-2839191539, rev. 0, impl
impl~preconditioning-endpoint-2839191539~0
psa-web/src/routes.rs:40
Out: 1
- req~preconditioning-endpoint~1 docs/specification.md:201
✓ rate-limit-handling-1215799206, rev. 0, impl
impl~rate-limit-handling-1215799206~0
psa-api/src/client.rs:120
Out: 1
- req~rate-limit-handling~1 docs/specification.md:421
✓ rate-limit-handling-2990982993, rev. 0, impl
impl~rate-limit-handling-2990982993~0
psa-api/src/client.rs:49
Out: 1
- req~rate-limit-handling~1 docs/specification.md:421
✓ rate-limit-handling-3193517788, rev. 0, impl
impl~rate-limit-handling-3193517788~0
psa-api/src/error.rs:55
Out: 1
- req~rate-limit-handling~1 docs/specification.md:421
✓ remote-command-schema-1054172229, rev. 0, impl
impl~remote-command-schema-1054172229~0
psa-api/src/client.rs:211
Out: 1
- req~remote-command-schema~1 docs/specification.md:411
✓ remote-command-schema-1823486757, rev. 0, impl
impl~remote-command-schema-1823486757~0
psa-api/src/client.rs:347
Out: 1
- req~remote-command-schema~1 docs/specification.md:411
✓ remote-command-schema-22020816, rev. 0, impl
impl~remote-command-schema-22020816~0
psa-api/src/client.rs:246
Out: 1
- req~remote-command-schema~1 docs/specification.md:411
✓ remote-command-schema-2398943436, rev. 0, impl
impl~remote-command-schema-2398943436~0
psa-api/src/client.rs:333
Out: 1
- req~remote-command-schema~1 docs/specification.md:411
✓ remote-command-schema-2546117341, rev. 0, impl
impl~remote-command-schema-2546117341~0
psa-api/src/client.rs:297
Out: 1
- req~remote-command-schema~1 docs/specification.md:411
✓ remote-command-schema-275644296, rev. 0, impl
impl~remote-command-schema-275644296~0
psa-api/src/client.rs:66
Out: 1
- req~remote-command-schema~1 docs/specification.md:411
✓ remote-command-schema-3260319017, rev. 0, impl
impl~remote-command-schema-3260319017~0
psa-api/src/client.rs:316
Out: 1
- req~remote-command-schema~1 docs/specification.md:411
✓ remote-command-schema-3924059338, rev. 0, impl
impl~remote-command-schema-3924059338~0
psa-api/src/models.rs:326
Out: 1
- req~remote-command-schema~1 docs/specification.md:411
✓ remote-command-schema-3944059332, rev. 0, impl
impl~remote-command-schema-3944059332~0
psa-api/src/client.rs:227
Out: 1
- req~remote-command-schema~1 docs/specification.md:411
✓ remote-command-schema-623577311, rev. 0, impl
impl~remote-command-schema-623577311~0
psa-api/src/client.rs:269
Out: 1
- req~remote-command-schema~1 docs/specification.md:411
✓ request-body-limit-1961422065, rev. 0, impl
impl~request-body-limit-1961422065~0
psa-web/src/routes.rs:18
Out: 1
- req~request-body-limit~1 docs/specification.md:352
✓ rust-best-practices-1100739969, rev. 0, impl
impl~rust-best-practices-1100739969~0
psa-api/src/lib.rs:1
Out: 1
- req~rust-best-practices~1 docs/specification.md:33
✓ rust-best-practices-2400000490, rev. 0, impl
impl~rust-best-practices-2400000490~0
psa-web/src/main.rs:1
Out: 1
- req~rust-best-practices~1 docs/specification.md:33
✓ sanitized-errors-3290623677, rev. 0, impl
impl~sanitized-errors-3290623677~0
psa-web/src/routes.rs:127
Out: 1
- req~sanitized-errors~1 docs/specification.md:366
✓ security-headers-1733606395, rev. 0, impl
impl~security-headers-1733606395~0
psa-web/src/routes.rs:72
Out: 1
- req~security-headers~1 docs/specification.md:359
✓ security-headers-2771206191, rev. 0, impl
impl~security-headers-2771206191~0
psa-web/src/routes.rs:107
Out: 1
- req~security-headers~1 docs/specification.md:359
✓ settings-endpoint-1803962230, rev. 0, impl
impl~settings-endpoint-1803962230~0
psa-web/src/routes.rs:50
Out: 1
- req~settings-endpoint~1 docs/specification.md:241
✓ settings-page-3095343472, rev. 0, impl
impl~settings-page-3095343472~0
psa-web/src/routes.rs:184
Out: 1
- req~settings-page~1 docs/specification.md:300
✓ stable-dependencies-684278031, rev. 0, impl
impl~stable-dependencies-684278031~0
psa-api/Cargo.toml:1
Out: 1
- req~stable-dependencies~1 docs/specification.md:40
✓ stable-dependencies-783845636, rev. 0, impl
impl~stable-dependencies-783845636~0
psa-web/Cargo.toml:1
Out: 1
- req~stable-dependencies~1 docs/specification.md:40
✓ status-history-4161300930, rev. 0, impl
impl~status-history-4161300930~0
psa-web/src/db.rs:1
Out: 1
- req~status-history~1 docs/specification.md:149
✓ token-refresh-3163755786, rev. 0, impl
impl~token-refresh-3163755786~0
psa-api/src/auth.rs:145
Out: 1
- req~token-refresh~1 docs/specification.md:56
✓ trip-display-page-3112396871, rev. 0, impl
impl~trip-display-page-3112396871~0
psa-web/src/routes.rs:176
Out: 1
- req~trip-display-page~1 docs/specification.md:290
✓ trip-recording-3236898454, rev. 0, impl
impl~trip-recording-3236898454~0
psa-api/src/models.rs:256
Out: 1
- req~trip-recording~1 docs/specification.md:156
✓ trip-recording-4188742987, rev. 0, impl
impl~trip-recording-4188742987~0
psa-web/src/db.rs:2
Out: 1
- req~trip-recording~1 docs/specification.md:156
✓ trips-endpoint-403462206, rev. 0, impl
impl~trips-endpoint-403462206~0
psa-web/src/routes.rs:53
Out: 1
- req~trips-endpoint~1 docs/specification.md:248
✓ vehicle-list-2207120012, rev. 0, impl
impl~vehicle-list-2207120012~0
psa-api/src/models.rs:6
Out: 1
- req~vehicle-list~1 docs/specification.md:78
✓ vehicle-list-546365147, rev. 0, impl
impl~vehicle-list-546365147~0
psa-api/src/client.rs:155
Out: 1
- req~vehicle-list~1 docs/specification.md:78
✓ vehicle-model-completeness-3136032965, rev. 0, impl
impl~vehicle-model-completeness-3136032965~0
psa-api/src/models.rs:7
Out: 1
- req~vehicle-model-completeness~1 docs/specification.md:452
✓ vehicle-status-243822889, rev. 0, impl
impl~vehicle-status-243822889~0
psa-api/src/client.rs:199
Out: 1
- req~vehicle-status~1 docs/specification.md:88
✓ vehicle-status-3757730135, rev. 0, impl
impl~vehicle-status-3757730135~0
psa-api/src/models.rs:56
Out: 1
- req~vehicle-status~1 docs/specification.md:88
✓ vehicle-status-endpoint-3118779795, rev. 0, impl
impl~vehicle-status-endpoint-3118779795~0
psa-web/src/routes.rs:25
Out: 1
- req~vehicle-status-endpoint~1 docs/specification.md:179
✓ vehicle-wakeup-3082110841, rev. 0, impl
impl~vehicle-wakeup-3082110841~0
psa-api/src/client.rs:210
Out: 1
- req~vehicle-wakeup~1 docs/specification.md:98
✓ wakeup-endpoint-2562392496, rev. 0, impl
impl~wakeup-endpoint-2562392496~0
psa-web/src/routes.rs:28
Out: 1
- req~wakeup-endpoint~1 docs/specification.md:231
req
✓ API bearer token authentication, rev. 1, req
req~api-bearer-auth~1
The web server MUST require a configurable bearer token on all /api/* endpoints, rejecting unauthenticated requests with HTTP 401.
Needs: impl, utest
docs/specification.md:338
In: 5
- impl~api-bearer-auth-1979828142~0 psa-web/src/routes.rs:57
- impl~api-bearer-auth-3644510249~0 psa-web/src/routes.rs:78
- utest~api-bearer-auth-3479688544~0 psa-web/src/route_tests.rs:429
- utest~api-bearer-auth-3777300051~0 psa-web/src/route_tests.rs:412
- utest~api-bearer-auth-4218653088~0 psa-web/src/route_tests.rs:403
✓ API error response parsing, rev. 1, req
req~api-error-parsing~1
The PSA API client MUST parse structured error responses from the API (containing code, uuid, message, and timestamp fields) into a typed error variant.
Needs: impl, utest
docs/specification.md:445
In: 4
- impl~api-error-parsing-3035988818~0 psa-api/src/error.rs:43
- impl~api-error-parsing-4157571315~0 psa-api/src/error.rs:6
- impl~api-error-parsing-505215529~0 psa-api/src/client.rs:119
- utest~api-error-parsing-3742190790~0 psa-api/src/client.rs:768
✓ API pagination, rev. 1, req
req~api-pagination~1
The PSA API client MUST support token-based pagination for collection endpoints by following pageToken values in responses until all pages have been retrieved.
Needs: impl, utest
docs/specification.md:428
In: 5
- impl~api-pagination-1527207637~0 psa-api/src/client.rs:156
- impl~api-pagination-2081603568~0 psa-api/src/models.rs:22
- impl~api-pagination-2636694974~0 psa-api/src/client.rs:414
- utest~api-pagination-3039095650~0 psa-api/src/client.rs:828
- utest~api-pagination-777454006~0 psa-api/src/client.rs:838
✓ Callback registration, rev. 1, req
req~callback-registration~1
The PSA API client MUST* register a callback with the PSA API before sending remote commands, and *MUST use the returned callback ID in subsequent remote command requests.
Needs: impl, utest
docs/specification.md:401
In: 5
- impl~callback-registration-2154895036~0 psa-api/src/models.rs:285
- impl~callback-registration-265573515~0 psa-api/src/client.rs:374
- impl~callback-registration-2731894554~0 psa-api/src/client.rs:362
- impl~callback-registration-877476003~0 psa-api/src/client.rs:22
- utest~callback-registration-1454807273~0 psa-api/src/client.rs:583
✓ Charge control, rev. 1, req
req~charge-control~1
The PSA API client MUST support starting and stopping vehicle charging via remote commands.
Needs: impl, utest
docs/specification.md:105
In: 2
- impl~charge-control-2666628358~0 psa-api/src/client.rs:226
- utest~charge-control-3772743577~0 psa-api/src/client.rs:627
✓ Charge control endpoint, rev. 1, req
req~charge-control-endpoint~1
The web server MUST expose endpoints for starting/stopping charging, setting charge threshold, and setting charge schedule.
Needs: impl, utest
docs/specification.md:189
In: 4
- impl~charge-control-endpoint-288163476~0 psa-web/src/routes.rs:30
- utest~charge-control-endpoint-2452198609~0 psa-web/src/route_tests.rs:190
- utest~charge-control-endpoint-2899268274~0 psa-web/src/route_tests.rs:208
- utest~charge-control-endpoint-947042234~0 psa-web/src/route_tests.rs:170
✓ Charge management page, rev. 1, req
req~charge-management-page~1
The web server MUST serve a page with forms to control charging: start/stop charge, set threshold percentage, and set charge schedule.
Needs: impl
docs/specification.md:280
In: 1
- impl~charge-management-page-167646623~0 psa-web/src/routes.rs:167
✓ Charge scheduling, rev. 1, req
req~charge-scheduling~1
The PSA API client MUST support setting a scheduled stop hour for charging to enable off-peak charging.
Needs: impl, utest
docs/specification.md:119
In: 2
- impl~charge-scheduling-1062149526~0 psa-api/src/client.rs:268
- utest~charge-scheduling-1578006227~0 psa-api/src/client.rs:668
✓ Charge threshold, rev. 1, req
req~charge-threshold~1
The PSA API client MUST support setting a battery charge threshold percentage to limit charging.
Needs: impl, utest
docs/specification.md:112
In: 2
- impl~charge-threshold-2864166297~0 psa-api/src/client.rs:245
- utest~charge-threshold-3121472641~0 psa-api/src/client.rs:648
✓ Charging session recording, rev. 1, req
req~charging-session-recording~1
The application MUST record and persist charging session data including start time, end time, energy charged, and battery level changes.
Needs: impl, utest
docs/specification.md:163
In: 3
- impl~charging-session-recording-2505811050~0 psa-web/src/db.rs:3
- impl~charging-session-recording-699341573~0 psa-api/src/models.rs:272
- utest~charging-session-recording-4203613896~0 psa-web/src/db.rs:302
✓ Charging sessions endpoint, rev. 1, req
req~charging-sessions-endpoint~1
The web server MUST expose an endpoint that returns recorded charging session data.
Needs: impl, utest
docs/specification.md:258
In: 2
- impl~charging-sessions-endpoint-4222870490~0 psa-web/src/routes.rs:55
- utest~charging-sessions-endpoint-1151769459~0 psa-web/src/route_tests.rs:370
✓ Clean web styling, rev. 1, req
req~clean-web-styling~1
The web dashboard MUST use a clean, simple, and responsive CSS styling that works well on both desktop and mobile browsers.
Needs: impl
docs/specification.md:310
In: 1
- impl~clean-web-styling-573711~0 psa-web/src/templates.rs:1
✓ Configuration file, rev. 1, req
req~configuration-file~1
The application MUST load configuration from a TOML file, including PSA API credentials, electricity pricing, and server settings.
Needs: impl, utest
docs/specification.md:319
In: 2
- impl~configuration-file-882198071~0 psa-api/src/config.rs:1
- utest~configuration-file-1007063596~0 psa-web/src/config_tests.rs:1
✓ Container deployment, rev. 1, req
req~container-deployment~1
The project MUST provide a Docker Compose configuration that runs the application with a bind-mounted configuration file, a persistent named volume for data, and configurable port mapping.
Needs: impl
docs/specification.md:389
In: 1
- impl~container-deployment-1449626451~0 docker-compose.yaml:11
✗ Container image, rev. 1, req
req~container-image~1
The project MUST provide a multi-stage Dockerfile that builds the application from source using the stable Rust toolchain and produces a minimal runtime image containing only the compiled binary and its runtime dependencies.
Needs: impl
docs/specification.md:382
✓ Credential persistence, rev. 1, req
req~credential-persistence~1
The PSA API client MUST persist OAuth2 tokens and credentials to a local file so that re-authentication is not required on restart.
Needs: impl, utest
docs/specification.md:66
In: 2
- impl~credential-persistence-3829303526~0 psa-api/src/auth.rs:37
- utest~credential-persistence-4025365217~0 psa-api/src/auth.rs:291
✓ Dashboard overview page, rev. 1, req
req~dashboard-overview~1
The web server MUST serve a dashboard page that displays a summary of vehicle status including battery level, charging state, and last-known position.
Needs: impl
docs/specification.md:270
In: 1
- impl~dashboard-overview-1611433166~0 psa-web/src/routes.rs:141
✓ Dependency vulnerability scanning, rev. 1, req
req~dependency-audit~1
The CI pipeline MUST include automated dependency vulnerability scanning via cargo audit.
Needs: impl
docs/specification.md:373
In: 1
- impl~dependency-audit-3595886600~0 deny.toml:1
✓ Door lock control, rev. 1, req
req~door-lock-control~1
The PSA API client MUST support locking and unlocking vehicle doors via remote commands.
Needs: impl, utest
docs/specification.md:133
In: 2
- impl~door-lock-control-113726357~0 psa-api/src/client.rs:315
- utest~door-lock-control-4071020293~0 psa-api/src/client.rs:708
✓ Door lock endpoint, rev. 1, req
req~door-lock-endpoint~1
The web server MUST expose an endpoint for locking and unlocking vehicle doors.
Needs: impl, utest
docs/specification.md:211
In: 2
- impl~door-lock-endpoint-3527654786~0 psa-web/src/routes.rs:45
- utest~door-lock-endpoint-2659609197~0 psa-web/src/route_tests.rs:252
✓ Electricity pricing, rev. 1, req
req~electricity-pricing~1
The configuration MUST* support setting an electricity price per kWh, with *OPTIONAL support for separate day and night pricing with configurable time ranges.
Needs: impl, utest
docs/specification.md:326
In: 2
- impl~electricity-pricing-2233777927~0 psa-api/src/config.rs:75
- utest~electricity-pricing-3692298477~0 psa-web/src/config_tests.rs:2
✓ HTML output escaping, rev. 1, req
req~html-output-escaping~1
The web server MUST escape all dynamic values inserted into HTML templates to prevent cross-site scripting (XSS) attacks.
Needs: impl, utest
docs/specification.md:345
In: 2
- impl~html-output-escaping-3144840179~0 psa-web/src/templates.rs:8
- utest~html-output-escaping-1665579512~0 psa-web/src/route_tests.rs:486
✓ HTTP server, rev. 1, req
req~http-server~1
The web module MUST provide an HTTP server using a lightweight, well-maintained Rust web framework.
Needs: impl
docs/specification.md:172
In: 1
- impl~http-server-3848259843~0 psa-web/src/main.rs:17
✓ Lights and horn control, rev. 1, req
req~lights-horn-control~1
The PSA API client MUST support flashing lights and honking the horn via remote commands.
Needs: impl, utest
docs/specification.md:140
In: 4
- impl~lights-horn-control-2215347650~0 psa-api/src/client.rs:346
- impl~lights-horn-control-3779272148~0 psa-api/src/client.rs:332
- utest~lights-horn-control-2818728464~0 psa-api/src/client.rs:728
- utest~lights-horn-control-2914937950~0 psa-api/src/client.rs:748
✓ Lights and horn endpoint, rev. 1, req
req~lights-horn-endpoint~1
The web server MUST expose an endpoint for flashing lights and honking the horn.
Needs: impl, utest
docs/specification.md:221
In: 3
- impl~lights-horn-endpoint-813005927~0 psa-web/src/routes.rs:47
- utest~lights-horn-endpoint-857922029~0 psa-web/src/route_tests.rs:277
- utest~lights-horn-endpoint-87676781~0 psa-web/src/route_tests.rs:298
✓ Modular architecture, rev. 1, req
req~modular-architecture~1
The project MUST be organized as a Cargo workspace with separate crates for the PSA API client library and the web server application.
Needs: impl
docs/specification.md:26
In: 1
- impl~modular-architecture-1582669371~0 Cargo.toml:1
✓ OAuth2 authentication, rev. 1, req
req~oauth2-authentication~1
The PSA API client MUST implement the OAuth2 authorization flow to obtain and manage access tokens for the PSA Connected Car v4 API.
Needs: impl, utest
docs/specification.md:49
In: 3
- impl~oauth2-authentication-2126636807~0 psa-api/src/auth.rs:1
- utest~oauth2-authentication-1741593727~0 psa-api/src/auth.rs:252
- utest~oauth2-authentication-3640715303~0 psa-api/src/auth.rs:270
✓ OAuth2 scope management, rev. 1, req
req~oauth2-scope-management~1
The PSA API client SHOULD* request the minimum required OAuth2 scopes during authorization and *SHOULD validate that the token carries the scopes needed for a given operation before making the request.
Needs: impl, utest
docs/specification.md:435
In: 2
- impl~oauth2-scope-management-2677749437~0 psa-api/src/auth.rs:14
- utest~oauth2-scope-management-1516466815~0 psa-api/src/client.rs:887
✓ Preconditioning control, rev. 1, req
req~preconditioning-control~1
The PSA API client MUST support starting and stopping air conditioning preconditioning.
Needs: impl, utest
docs/specification.md:126
In: 2
- impl~preconditioning-control-992957845~0 psa-api/src/client.rs:296
- utest~preconditioning-control-1078994845~0 psa-api/src/client.rs:688
✓ Preconditioning endpoint, rev. 1, req
req~preconditioning-endpoint~1
The web server MUST expose an endpoint for starting and stopping air conditioning preconditioning.
Needs: impl, utest
docs/specification.md:201
In: 2
- impl~preconditioning-endpoint-2839191539~0 psa-web/src/routes.rs:40
- utest~preconditioning-endpoint-2528258917~0 psa-web/src/route_tests.rs:228
✓ Rate limit handling, rev. 1, req
req~rate-limit-handling~1
The PSA API client MUST* parse X-RateLimit-Remaining and Retry-After response headers and *MUST delay subsequent requests when the API returns HTTP 429 (Too Many Requests).
Needs: impl, utest
docs/specification.md:421
In: 4
- impl~rate-limit-handling-1215799206~0 psa-api/src/client.rs:120
- impl~rate-limit-handling-2990982993~0 psa-api/src/client.rs:49
- impl~rate-limit-handling-3193517788~0 psa-api/src/error.rs:55
- utest~rate-limit-handling-1541361560~0 psa-api/src/client.rs:802
✓ Remote command schema, rev. 1, req
req~remote-command-schema~1
Remote command requests MUST* use the PSA API v4 documented endpoint path (/user/vehicles/{id}/callbacks/{cbid}/remotes) and JSON payload schema with typed action fields (door, horn, charging, lights, wakeUp, preconditioning, navigation), and *MUST send Content-Type: application/json.
Needs: impl, utest
docs/specification.md:411
In: 18
- impl~remote-command-schema-1054172229~0 psa-api/src/client.rs:211
- impl~remote-command-schema-1823486757~0 psa-api/src/client.rs:347
- impl~remote-command-schema-22020816~0 psa-api/src/client.rs:246
- impl~remote-command-schema-2398943436~0 psa-api/src/client.rs:333
- impl~remote-command-schema-2546117341~0 psa-api/src/client.rs:297
- impl~remote-command-schema-275644296~0 psa-api/src/client.rs:66
- impl~remote-command-schema-3260319017~0 psa-api/src/client.rs:316
- impl~remote-command-schema-3924059338~0 psa-api/src/models.rs:326
- impl~remote-command-schema-3944059332~0 psa-api/src/client.rs:227
- impl~remote-command-schema-623577311~0 psa-api/src/client.rs:269
- utest~remote-command-schema-1718971787~0 psa-api/src/client.rs:649
- utest~remote-command-schema-1754432858~0 psa-api/src/client.rs:749
- utest~remote-command-schema-222535676~0 psa-api/src/client.rs:604
- utest~remote-command-schema-2352021151~0 psa-api/src/client.rs:628
- utest~remote-command-schema-2568030586~0 psa-api/src/client.rs:709
- utest~remote-command-schema-2944466858~0 psa-api/src/client.rs:689
- utest~remote-command-schema-3788558186~0 psa-api/src/client.rs:729
- utest~remote-command-schema-515156891~0 psa-api/src/client.rs:669
✓ Request body size limit, rev. 1, req
req~request-body-limit~1
The web server MUST enforce a maximum request body size to prevent denial-of-service via oversized payloads.
Needs: impl
docs/specification.md:352
In: 1
- impl~request-body-limit-1961422065~0 psa-web/src/routes.rs:18
✓ Rust best practices, rev. 1, req
req~rust-best-practices~1
All crates MUST* compile without warnings under #[deny(warnings)] and *MUST pass clippy with default lints.
Needs: impl, utest
docs/specification.md:33
In: 3
- impl~rust-best-practices-1100739969~0 psa-api/src/lib.rs:1
- impl~rust-best-practices-2400000490~0 psa-web/src/main.rs:1
- utest~rust-best-practices-1053556775~0 psa-web/src/config_tests.rs:105
✓ Sanitized error responses, rev. 1, req
req~sanitized-errors~1
API error responses MUST NOT expose internal implementation details such as file paths, token states, or upstream API URLs to clients.
Needs: impl, utest
docs/specification.md:366
In: 2
- impl~sanitized-errors-3290623677~0 psa-web/src/routes.rs:127
- utest~sanitized-errors-2327127686~0 psa-web/src/route_tests.rs:466
✓ Security response headers, rev. 1, req
req~security-headers~1
The web server MUST set security-related HTTP response headers including Content-Security-Policy, X-Content-Type-Options, X-Frame-Options, and Referrer-Policy.
Needs: impl, utest
docs/specification.md:359
In: 3
- impl~security-headers-1733606395~0 psa-web/src/routes.rs:72
- impl~security-headers-2771206191~0 psa-web/src/routes.rs:107
- utest~security-headers-2534069269~0 psa-web/src/route_tests.rs:454
✓ Settings endpoint, rev. 1, req
req~settings-endpoint~1
The web server MUST expose endpoints for reading and updating application configuration.
Needs: impl, utest
docs/specification.md:241
In: 3
- impl~settings-endpoint-1803962230~0 psa-web/src/routes.rs:50
- utest~settings-endpoint-2327043275~0 psa-web/src/route_tests.rs:333
- utest~settings-endpoint-4257766401~0 psa-web/src/route_tests.rs:321
✓ Settings page, rev. 1, req
req~settings-page~1
The web server MUST serve a page with forms for managing application configuration including electricity pricing.
Needs: impl
docs/specification.md:300
In: 1
- impl~settings-page-3095343472~0 psa-web/src/routes.rs:184
✓ Stable dependencies, rev. 1, req
req~stable-dependencies~1
The project MUST only depend on stable, well-maintained crates that are widely adopted in the Rust ecosystem.
Needs: impl
docs/specification.md:40
In: 2
- impl~stable-dependencies-684278031~0 psa-api/Cargo.toml:1
- impl~stable-dependencies-783845636~0 psa-web/Cargo.toml:1
✓ Status history storage, rev. 1, req
req~status-history~1
The application MUST persist vehicle status snapshots over time to enable historical analysis and dashboard visualization.
Needs: impl, utest
docs/specification.md:149
In: 2
- impl~status-history-4161300930~0 psa-web/src/db.rs:1
- utest~status-history-3328178117~0 psa-web/src/db.rs:258
✗ Status polling, rev. 1, req
req~status-polling~1
The application SHOULD periodically poll vehicle status from the PSA API and persist snapshots, trips, and charging sessions to the database automatically.
Needs: impl, utest
docs/specification.md:463
✓ Token refresh, rev. 1, req
req~token-refresh~1
The PSA API client MUST automatically refresh expired OAuth2 access tokens using the stored refresh token before making API requests.
Needs: impl, utest
docs/specification.md:56
In: 3
- impl~token-refresh-3163755786~0 psa-api/src/auth.rs:145
- utest~token-refresh-3341851934~0 psa-api/src/auth.rs:327
- utest~token-refresh-64484718~0 psa-api/src/auth.rs:339
✓ Trip display page, rev. 1, req
req~trip-display-page~1
The web server MUST serve a page that displays recorded trips in a tabular format.
Needs: impl
docs/specification.md:290
In: 1
- impl~trip-display-page-3112396871~0 psa-web/src/routes.rs:176
✓ Trip recording, rev. 1, req
req~trip-recording~1
The application MUST record and persist trip data including start/end positions, distance, and energy consumption.
Needs: impl, utest
docs/specification.md:156
In: 3
- impl~trip-recording-3236898454~0 psa-api/src/models.rs:256
- impl~trip-recording-4188742987~0 psa-web/src/db.rs:2
- utest~trip-recording-3481853349~0 psa-web/src/db.rs:277
✓ Trips endpoint, rev. 1, req
req~trips-endpoint~1
The web server MUST expose an endpoint that returns recorded trip data.
Needs: impl, utest
docs/specification.md:248
In: 2
- impl~trips-endpoint-403462206~0 psa-web/src/routes.rs:53
- utest~trips-endpoint-3746610129~0 psa-web/src/route_tests.rs:356
✓ Vehicle list retrieval, rev. 1, req
req~vehicle-list~1
The PSA API client MUST retrieve the list of vehicles associated with the authenticated user account.
Needs: impl, utest
docs/specification.md:78
In: 3
- impl~vehicle-list-2207120012~0 psa-api/src/models.rs:6
- impl~vehicle-list-546365147~0 psa-api/src/client.rs:155
- utest~vehicle-list-3938063136~0 psa-api/src/client.rs:474
✓ Vehicle model completeness, rev. 1, req
req~vehicle-model-completeness~1
The Vehicle data model MUST include the motorization field (Electric, Hybrid, Thermic, Hydrogen) and timestamp fields (createdAt, updatedAt) as defined in the PSA Connected Car v4 API specification.
Needs: impl, utest
docs/specification.md:452
In: 2
- impl~vehicle-model-completeness-3136032965~0 psa-api/src/models.rs:7
- utest~vehicle-model-completeness-1392914253~0 psa-api/src/client.rs:510
✓ Vehicle status endpoint, rev. 1, req
req~vehicle-status-endpoint~1
The web server MUST expose an endpoint that returns the current vehicle status as JSON.
Needs: impl, utest
docs/specification.md:179
In: 3
- impl~vehicle-status-endpoint-3118779795~0 psa-web/src/routes.rs:25
- utest~vehicle-status-endpoint-1251380128~0 psa-web/src/route_tests.rs:88
- utest~vehicle-status-endpoint-3561565442~0 psa-web/src/route_tests.rs:120
✓ Vehicle status retrieval, rev. 1, req
req~vehicle-status~1
The PSA API client MUST retrieve the current status of a vehicle, including battery level, charging state, odometer reading, and last-known position.
Needs: impl, utest
docs/specification.md:88
In: 3
- impl~vehicle-status-243822889~0 psa-api/src/client.rs:199
- impl~vehicle-status-3757730135~0 psa-api/src/models.rs:56
- utest~vehicle-status-2082696279~0 psa-api/src/client.rs:542
✓ Vehicle wakeup, rev. 1, req
req~vehicle-wakeup~1
The PSA API client MUST support sending a wakeup request to force a vehicle to report its current status.
Needs: impl, utest
docs/specification.md:98
In: 2
- impl~vehicle-wakeup-3082110841~0 psa-api/src/client.rs:210
- utest~vehicle-wakeup-239715378~0 psa-api/src/client.rs:605
✓ Vehicle wakeup endpoint, rev. 1, req
req~wakeup-endpoint~1
The web server MUST expose an endpoint to trigger a vehicle wakeup.
Needs: impl, utest
docs/specification.md:231
In: 2
- impl~wakeup-endpoint-2562392496~0 psa-web/src/routes.rs:28
- utest~wakeup-endpoint-331193840~0 psa-web/src/route_tests.rs:148
utest
✓ api-bearer-auth-3479688544, rev. 0, utest
utest~api-bearer-auth-3479688544~0
psa-web/src/route_tests.rs:429
Out: 1
- req~api-bearer-auth~1 docs/specification.md:338
✓ api-bearer-auth-3777300051, rev. 0, utest
utest~api-bearer-auth-3777300051~0
psa-web/src/route_tests.rs:412
Out: 1
- req~api-bearer-auth~1 docs/specification.md:338
✓ api-bearer-auth-4218653088, rev. 0, utest
utest~api-bearer-auth-4218653088~0
psa-web/src/route_tests.rs:403
Out: 1
- req~api-bearer-auth~1 docs/specification.md:338
✓ api-error-parsing-3742190790, rev. 0, utest
utest~api-error-parsing-3742190790~0
psa-api/src/client.rs:768
Out: 1
- req~api-error-parsing~1 docs/specification.md:445
✓ api-pagination-3039095650, rev. 0, utest
utest~api-pagination-3039095650~0
psa-api/src/client.rs:828
Out: 1
- req~api-pagination~1 docs/specification.md:428
✓ api-pagination-777454006, rev. 0, utest
utest~api-pagination-777454006~0
psa-api/src/client.rs:838
Out: 1
- req~api-pagination~1 docs/specification.md:428
✓ callback-registration-1454807273, rev. 0, utest
utest~callback-registration-1454807273~0
psa-api/src/client.rs:583
Out: 1
- req~callback-registration~1 docs/specification.md:401
✓ charge-control-3772743577, rev. 0, utest
utest~charge-control-3772743577~0
psa-api/src/client.rs:627
Out: 1
- req~charge-control~1 docs/specification.md:105
✓ charge-control-endpoint-2452198609, rev. 0, utest
utest~charge-control-endpoint-2452198609~0
psa-web/src/route_tests.rs:190
Out: 1
- req~charge-control-endpoint~1 docs/specification.md:189
✓ charge-control-endpoint-2899268274, rev. 0, utest
utest~charge-control-endpoint-2899268274~0
psa-web/src/route_tests.rs:208
Out: 1
- req~charge-control-endpoint~1 docs/specification.md:189
✓ charge-control-endpoint-947042234, rev. 0, utest
utest~charge-control-endpoint-947042234~0
psa-web/src/route_tests.rs:170
Out: 1
- req~charge-control-endpoint~1 docs/specification.md:189
✓ charge-scheduling-1578006227, rev. 0, utest
utest~charge-scheduling-1578006227~0
psa-api/src/client.rs:668
Out: 1
- req~charge-scheduling~1 docs/specification.md:119
✓ charge-threshold-3121472641, rev. 0, utest
utest~charge-threshold-3121472641~0
psa-api/src/client.rs:648
Out: 1
- req~charge-threshold~1 docs/specification.md:112
✓ charging-session-recording-4203613896, rev. 0, utest
utest~charging-session-recording-4203613896~0
psa-web/src/db.rs:302
Out: 1
- req~charging-session-recording~1 docs/specification.md:163
✓ charging-sessions-endpoint-1151769459, rev. 0, utest
utest~charging-sessions-endpoint-1151769459~0
psa-web/src/route_tests.rs:370
Out: 1
- req~charging-sessions-endpoint~1 docs/specification.md:258
✓ configuration-file-1007063596, rev. 0, utest
utest~configuration-file-1007063596~0
psa-web/src/config_tests.rs:1
Out: 1
- req~configuration-file~1 docs/specification.md:319
✓ credential-persistence-4025365217, rev. 0, utest
utest~credential-persistence-4025365217~0
psa-api/src/auth.rs:291
Out: 1
- req~credential-persistence~1 docs/specification.md:66
✓ door-lock-control-4071020293, rev. 0, utest
utest~door-lock-control-4071020293~0
psa-api/src/client.rs:708
Out: 1
- req~door-lock-control~1 docs/specification.md:133
✓ door-lock-endpoint-2659609197, rev. 0, utest
utest~door-lock-endpoint-2659609197~0
psa-web/src/route_tests.rs:252
Out: 1
- req~door-lock-endpoint~1 docs/specification.md:211
✓ electricity-pricing-3692298477, rev. 0, utest
utest~electricity-pricing-3692298477~0
psa-web/src/config_tests.rs:2
Out: 1
- req~electricity-pricing~1 docs/specification.md:326
✓ html-output-escaping-1665579512, rev. 0, utest
utest~html-output-escaping-1665579512~0
psa-web/src/route_tests.rs:486
Out: 1
- req~html-output-escaping~1 docs/specification.md:345
✓ lights-horn-control-2818728464, rev. 0, utest
utest~lights-horn-control-2818728464~0
psa-api/src/client.rs:728
Out: 1
- req~lights-horn-control~1 docs/specification.md:140
✓ lights-horn-control-2914937950, rev. 0, utest
utest~lights-horn-control-2914937950~0
psa-api/src/client.rs:748
Out: 1
- req~lights-horn-control~1 docs/specification.md:140
✓ lights-horn-endpoint-857922029, rev. 0, utest
utest~lights-horn-endpoint-857922029~0
psa-web/src/route_tests.rs:277
Out: 1
- req~lights-horn-endpoint~1 docs/specification.md:221
✓ lights-horn-endpoint-87676781, rev. 0, utest
utest~lights-horn-endpoint-87676781~0
psa-web/src/route_tests.rs:298
Out: 1
- req~lights-horn-endpoint~1 docs/specification.md:221
✓ oauth2-authentication-1741593727, rev. 0, utest
utest~oauth2-authentication-1741593727~0
psa-api/src/auth.rs:252
Out: 1
- req~oauth2-authentication~1 docs/specification.md:49
✓ oauth2-authentication-3640715303, rev. 0, utest
utest~oauth2-authentication-3640715303~0
psa-api/src/auth.rs:270
Out: 1
- req~oauth2-authentication~1 docs/specification.md:49
✓ oauth2-scope-management-1516466815, rev. 0, utest
utest~oauth2-scope-management-1516466815~0
psa-api/src/client.rs:887
Out: 1
- req~oauth2-scope-management~1 docs/specification.md:435
✓ preconditioning-control-1078994845, rev. 0, utest
utest~preconditioning-control-1078994845~0
psa-api/src/client.rs:688
Out: 1
- req~preconditioning-control~1 docs/specification.md:126
✓ preconditioning-endpoint-2528258917, rev. 0, utest
utest~preconditioning-endpoint-2528258917~0
psa-web/src/route_tests.rs:228
Out: 1
- req~preconditioning-endpoint~1 docs/specification.md:201
✓ rate-limit-handling-1541361560, rev. 0, utest
utest~rate-limit-handling-1541361560~0
psa-api/src/client.rs:802
Out: 1
- req~rate-limit-handling~1 docs/specification.md:421
✓ remote-command-schema-1718971787, rev. 0, utest
utest~remote-command-schema-1718971787~0
psa-api/src/client.rs:649
Out: 1
- req~remote-command-schema~1 docs/specification.md:411
✓ remote-command-schema-1754432858, rev. 0, utest
utest~remote-command-schema-1754432858~0
psa-api/src/client.rs:749
Out: 1
- req~remote-command-schema~1 docs/specification.md:411
✓ remote-command-schema-222535676, rev. 0, utest
utest~remote-command-schema-222535676~0
psa-api/src/client.rs:604
Out: 1
- req~remote-command-schema~1 docs/specification.md:411
✓ remote-command-schema-2352021151, rev. 0, utest
utest~remote-command-schema-2352021151~0
psa-api/src/client.rs:628
Out: 1
- req~remote-command-schema~1 docs/specification.md:411
✓ remote-command-schema-2568030586, rev. 0, utest
utest~remote-command-schema-2568030586~0
psa-api/src/client.rs:709
Out: 1
- req~remote-command-schema~1 docs/specification.md:411
✓ remote-command-schema-2944466858, rev. 0, utest
utest~remote-command-schema-2944466858~0
psa-api/src/client.rs:689
Out: 1
- req~remote-command-schema~1 docs/specification.md:411
✓ remote-command-schema-3788558186, rev. 0, utest
utest~remote-command-schema-3788558186~0
psa-api/src/client.rs:729
Out: 1
- req~remote-command-schema~1 docs/specification.md:411
✓ remote-command-schema-515156891, rev. 0, utest
utest~remote-command-schema-515156891~0
psa-api/src/client.rs:669
Out: 1
- req~remote-command-schema~1 docs/specification.md:411
✓ rust-best-practices-1053556775, rev. 0, utest
utest~rust-best-practices-1053556775~0
psa-web/src/config_tests.rs:105
Out: 1
- req~rust-best-practices~1 docs/specification.md:33
✓ sanitized-errors-2327127686, rev. 0, utest
utest~sanitized-errors-2327127686~0
psa-web/src/route_tests.rs:466
Out: 1
- req~sanitized-errors~1 docs/specification.md:366
✓ security-headers-2534069269, rev. 0, utest
utest~security-headers-2534069269~0
psa-web/src/route_tests.rs:454
Out: 1
- req~security-headers~1 docs/specification.md:359
✓ settings-endpoint-2327043275, rev. 0, utest
utest~settings-endpoint-2327043275~0
psa-web/src/route_tests.rs:333
Out: 1
- req~settings-endpoint~1 docs/specification.md:241
✓ settings-endpoint-4257766401, rev. 0, utest
utest~settings-endpoint-4257766401~0
psa-web/src/route_tests.rs:321
Out: 1
- req~settings-endpoint~1 docs/specification.md:241
✓ status-history-3328178117, rev. 0, utest
utest~status-history-3328178117~0
psa-web/src/db.rs:258
Out: 1
- req~status-history~1 docs/specification.md:149
✓ token-refresh-3341851934, rev. 0, utest
utest~token-refresh-3341851934~0
psa-api/src/auth.rs:327
Out: 1
- req~token-refresh~1 docs/specification.md:56
✓ token-refresh-64484718, rev. 0, utest
utest~token-refresh-64484718~0
psa-api/src/auth.rs:339
Out: 1
- req~token-refresh~1 docs/specification.md:56
✓ trip-recording-3481853349, rev. 0, utest
utest~trip-recording-3481853349~0
psa-web/src/db.rs:277
Out: 1
- req~trip-recording~1 docs/specification.md:156
✓ trips-endpoint-3746610129, rev. 0, utest
utest~trips-endpoint-3746610129~0
psa-web/src/route_tests.rs:356
Out: 1
- req~trips-endpoint~1 docs/specification.md:248
✓ vehicle-list-3938063136, rev. 0, utest
utest~vehicle-list-3938063136~0
psa-api/src/client.rs:474
Out: 1
- req~vehicle-list~1 docs/specification.md:78
✓ vehicle-model-completeness-1392914253, rev. 0, utest
utest~vehicle-model-completeness-1392914253~0
psa-api/src/client.rs:510
Out: 1
- req~vehicle-model-completeness~1 docs/specification.md:452
✓ vehicle-status-2082696279, rev. 0, utest
utest~vehicle-status-2082696279~0
psa-api/src/client.rs:542
Out: 1
- req~vehicle-status~1 docs/specification.md:88
✓ vehicle-status-endpoint-1251380128, rev. 0, utest
utest~vehicle-status-endpoint-1251380128~0
psa-web/src/route_tests.rs:88
Out: 1
- req~vehicle-status-endpoint~1 docs/specification.md:179
✓ vehicle-status-endpoint-3561565442, rev. 0, utest
utest~vehicle-status-endpoint-3561565442~0
psa-web/src/route_tests.rs:120
Out: 1
- req~vehicle-status-endpoint~1 docs/specification.md:179
✓ vehicle-wakeup-239715378, rev. 0, utest
utest~vehicle-wakeup-239715378~0
psa-api/src/client.rs:605
Out: 1
- req~vehicle-wakeup~1 docs/specification.md:98
✓ wakeup-endpoint-331193840, rev. 0, utest
utest~wakeup-endpoint-331193840~0
psa-web/src/route_tests.rs:148
Out: 1
- req~wakeup-endpoint~1 docs/specification.md:231