diff --git a/api-coverage-report.md b/api-coverage-report.md index f24e498..232a556 100644 --- a/api-coverage-report.md +++ b/api-coverage-report.md @@ -12,8 +12,8 @@ opens or updates a PR only when coverage actually changes. | --- | ---: | | Reconciliation status | PASS | | Published operations | 174 | -| First-class CLI operations | 124 | -| Reviewed gaps | 50 | +| First-class CLI operations | 117 | +| Reviewed gaps | 57 | | Client operations | 125 | Catalog: https://api.coval.dev/v1/openapi @@ -52,11 +52,15 @@ Catalog: https://api.coval.dev/v1/openapi ## All current published gaps +- `DELETE /alerts/{alert_id}` - `DELETE /integrations/slack` - `DELETE /metrics/flows/{flow_id}` - `DELETE /test-sets/{test_set_id}/agents/{agent_id}` - `DELETE /webhooks/{webhook_id}` - `GET /agents/{agent_id}/versions` +- `GET /alerts` +- `GET /alerts/{alert_id}` +- `GET /alerts/{alert_id}/events` - `GET /integrations/slack` - `GET /metrics/flows` - `GET /metrics/recently-deleted` @@ -79,12 +83,15 @@ Catalog: https://api.coval.dev/v1/openapi - `GET /test-sets/{test_set_id}/records` - `GET /test-sets/{test_set_id}/versions` - `GET /webhooks` +- `PATCH /alerts/{alert_id}` - `PATCH /metrics/flows/{flow_id}` - `PATCH /organization/conversation-metrics` - `PATCH /organization/monitoring-metrics` - `PATCH /webhooks/{webhook_id}` - `POST /agents/{agent_id}/duplicate` - `POST /agents/{agent_id}/versions/{version_id}/revert` +- `POST /alerts` +- `POST /alerts/{alert_id}/test-evaluate` - `POST /audio:upload` - `POST /integrations/slack/connect` - `POST /metrics/flows` diff --git a/api-coverage.toml b/api-coverage.toml index 6296a61..f049de9 100644 --- a/api-coverage.toml +++ b/api-coverage.toml @@ -3,14 +3,51 @@ [snapshot] catalog_url = "https://api.coval.dev/v1/openapi" -reviewed_at = "2026-07-30" +reviewed_at = "2026-08-04" published_operations = 174 -cli_supported_operations = 124 +cli_supported_operations = 117 [[allowed_extra]] operation = "POST /test-cases/{test_case_id}/media:upload-url" reason = "Implemented by the public API but currently omitted from its published OpenAPI specs." +# The public API renamed its published spec from monitors-v1 to alerts-v1 in +# coval-ai/backend#6368. The /v1/monitors routes were deliberately retained as a +# serving legacy alias rather than removed, so `coval monitors` is not broken. +# Verified against production on 2026-08-04: every /v1/monitors route below still +# reaches its Lambda and returns a Coval-shaped response, while an unrouted path +# returns API Gateway's own {"message":"Not Found"}. These entries keep the CLI's +# existing command surface reviewed until it moves to the canonical /v1/alerts +# paths; see the matching alerts known_gap entries below. + +[[allowed_extra]] +operation = "GET /monitors" +reason = "Retained legacy alias for the published GET /alerts operation." + +[[allowed_extra]] +operation = "POST /monitors" +reason = "Retained legacy alias for the published POST /alerts operation." + +[[allowed_extra]] +operation = "GET /monitors/{id}" +reason = "Retained legacy alias for the published GET /alerts/{alert_id} operation." + +[[allowed_extra]] +operation = "PATCH /monitors/{id}" +reason = "Retained legacy alias for the published PATCH /alerts/{alert_id} operation." + +[[allowed_extra]] +operation = "DELETE /monitors/{id}" +reason = "Retained legacy alias for the published DELETE /alerts/{alert_id} operation." + +[[allowed_extra]] +operation = "GET /monitors/{monitor_id}/events" +reason = "Retained legacy alias for the published GET /alerts/{alert_id}/events operation." + +[[allowed_extra]] +operation = "POST /monitors/{monitor_id}/test-evaluate" +reason = "Retained legacy alias for the published POST /alerts/{alert_id}/test-evaluate operation." + [[known_gap]] operation = "GET /agents/{agent_id}/versions" reason = "Agent version history remains to be modeled under COVAL-2079." @@ -23,6 +60,42 @@ reason = "Agent version rollback remains to be modeled under COVAL-2079." operation = "POST /agents/{agent_id}/duplicate" reason = "Agent duplication remains to be modeled under COVAL-2079." +# Alerts is the canonical published surface after coval-ai/backend#6368. The +# behaviour is already reachable from the CLI today via `coval monitors`, which +# calls the retained /v1/monitors legacy alias, so these are naming gaps rather +# than missing functionality. Closing them means pointing the CLI at the +# canonical /v1/alerts paths and renaming the command to `coval alerts` with +# `monitors` kept as an alias, which is a deliberate follow-up rather than part +# of this reconciliation. + +[[known_gap]] +operation = "GET /alerts" +reason = "Served today by `coval monitors list` through the retained /v1/monitors alias; a first-class `coval alerts` surface is a follow-up." + +[[known_gap]] +operation = "POST /alerts" +reason = "Served today by `coval monitors create` through the retained /v1/monitors alias; a first-class `coval alerts` surface is a follow-up." + +[[known_gap]] +operation = "GET /alerts/{alert_id}" +reason = "Served today by `coval monitors get` through the retained /v1/monitors alias; a first-class `coval alerts` surface is a follow-up." + +[[known_gap]] +operation = "PATCH /alerts/{alert_id}" +reason = "Served today by `coval monitors update` through the retained /v1/monitors alias; a first-class `coval alerts` surface is a follow-up." + +[[known_gap]] +operation = "DELETE /alerts/{alert_id}" +reason = "Served today by `coval monitors delete` through the retained /v1/monitors alias; a first-class `coval alerts` surface is a follow-up." + +[[known_gap]] +operation = "GET /alerts/{alert_id}/events" +reason = "Served today by `coval monitors events` through the retained /v1/monitors alias; a first-class `coval alerts` surface is a follow-up." + +[[known_gap]] +operation = "POST /alerts/{alert_id}/test-evaluate" +reason = "Served today by `coval monitors test-evaluate` through the retained /v1/monitors alias; a first-class `coval alerts` surface is a follow-up." + [[known_gap]] operation = "POST /audio:upload" reason = "Generic audio upload has not yet been given a CLI file-upload workflow."