Skip to content

docs(get-voices): sync sibling override description with base spec - #407

Merged
abhishekmishragithub merged 1 commit into
mainfrom
fix/waves-get-voices-override-drift
Aug 31, 2026
Merged

docs(get-voices): sync sibling override description with base spec#407
abhishekmishragithub merged 1 commit into
mainfrom
fix/waves-get-voices-override-drift

Conversation

@abhishekmishragithub

Copy link
Copy Markdown
Collaborator

Summary

Post-#402 merge, the sibling SDK-generation override at `fern/apis/waves/openapi/get-voices-openapi-overrides.yaml` had its enum updated to match the base spec but its description stopped short: the two markdown links (unified TTS route + `get-all-models` cross-link) were omitted from the override.

The `Waves spec drift` CI check compares base vs sibling override and this mismatch was failing every open PR that touched any Waves spec file (#394, #401, #406, plus any new spec edit).

Fix

Copy the two link lines verbatim so the two files match token-for-token.

Test plan

  • Local `scripts/spec-live-tests/spec_drift_check.py` -> PASS
  • CI spec-drift check green
  • Waves TTS smoke test passes

The sibling SDK-generation override at fern/apis/waves/openapi/
get-voices-openapi-overrides.yaml was updated in #402 to match the
base spec on the pool-scoped enum, but the description stopped short:
the two markdown links (unified TTS route + get-all-models cross-link)
were omitted from the override.

The Waves spec drift CI check compares base vs sibling override, and
this mismatch was failing every open PR that touched any waves spec
file (#394, #401, #406, and any future spec edit). Copy the two link
lines verbatim so the two files match token-for-token.

Local run of scripts/spec-live-tests/spec_drift_check.py now reports
PASS — no drift.
@crim-app

crim-app Bot commented Aug 31, 2026

Copy link
Copy Markdown

crim doesn't review pull requests automatically here.

Comment crim review on this pull request whenever you want a review.

@github-actions

Copy link
Copy Markdown

@abhishekmishragithub
abhishekmishragithub merged commit a7b14ed into main Aug 31, 2026
4 of 5 checks passed
abhishekmishragithub pushed a commit that referenced this pull request Sep 1, 2026
Rebased on top of current main. Delta vs main:

Atoms openapi.yaml corrections:
- DELETE /agent/{id}/archive: 'on' becomes required string enum
- Length caps added on campaign.name (40), audience.name (80),
  knowledgebase.description (150), account.name (2-50)
- provider enum extended to [twilio, plivo, custom, whatsapp]
- POST /product/import-phone-number gains cpsLimit
- LLM enums extended with gpt-5.2-azure across four schema sites
- WorkflowType adds multi_agents (kept workflow_graph + single_prompt)
- Path-param regex + minLength on the two conversation endpoints

Waves API spec corrections:
- GET /waves/v1/{model}/get_voices: security: [] (endpoint is public,
  live-verified with 200 without Authorization)
- GET /waves/v1/voice/get-all-models: auth optional (- {})
- POST /waves/v1/pulse/get_text: adds webhook_method, redact_pii,
  redact_pci, numerals query params
- POST /waves/v1/voice-cloning: language field 22-value enum, drops
  retired /waves/v1/lightning-large/add_voice reference from prose
- PCA + Waves analytics response schemas extended to match backend

Explicitly NOT included (from the original PR):

- callId path-param renames (callId->id, callId->conversationId):
  path parameter names in OpenAPI are docs-only; the URL is identical
  regardless. Rename would break SDK method arg names with no customer
  benefit and force a semi-major release.
- generators.yml refs to openapi/generated/*.json and
  asyncapi/generated/*.json: the JSON files don't exist yet, they
  are produced by atoms-platform / waves-platform CI on merge-to-main.
  Adding refs before the files exist would break fern generate.

Review comments addressed:

- Wasim (voice-cloning-openapi.yaml:10): dropped the retired
  /waves/v1/lightning-large/add_voice reference from the description.
- Wasim (waves-v4/overrides/get-voices-openapi-overrides.yaml:15):
  already resolved by #402/#407; nothing to do here.
- Hamees (pulse-stt-openapi.yaml:213): the redact_pii/redact_pci
  descriptions cover the 'en + hi only' language constraint. The
  redaction feature itself works on regular Pulse; the language
  constraint is orthogonal to the pulse-pro question.

Changelog entry added. spec_drift_check.py -> PASS.
abhishekmishragithub added a commit that referenced this pull request Sep 1, 2026
* docs(atoms + waves): API-spec crosscheck against backend Zod validators

Rebased on top of current main. Delta vs main:

Atoms openapi.yaml corrections:
- DELETE /agent/{id}/archive: 'on' becomes required string enum
- Length caps added on campaign.name (40), audience.name (80),
  knowledgebase.description (150), account.name (2-50)
- provider enum extended to [twilio, plivo, custom, whatsapp]
- POST /product/import-phone-number gains cpsLimit
- LLM enums extended with gpt-5.2-azure across four schema sites
- WorkflowType adds multi_agents (kept workflow_graph + single_prompt)
- Path-param regex + minLength on the two conversation endpoints

Waves API spec corrections:
- GET /waves/v1/{model}/get_voices: security: [] (endpoint is public,
  live-verified with 200 without Authorization)
- GET /waves/v1/voice/get-all-models: auth optional (- {})
- POST /waves/v1/pulse/get_text: adds webhook_method, redact_pii,
  redact_pci, numerals query params
- POST /waves/v1/voice-cloning: language field 22-value enum, drops
  retired /waves/v1/lightning-large/add_voice reference from prose
- PCA + Waves analytics response schemas extended to match backend

Explicitly NOT included (from the original PR):

- callId path-param renames (callId->id, callId->conversationId):
  path parameter names in OpenAPI are docs-only; the URL is identical
  regardless. Rename would break SDK method arg names with no customer
  benefit and force a semi-major release.
- generators.yml refs to openapi/generated/*.json and
  asyncapi/generated/*.json: the JSON files don't exist yet, they
  are produced by atoms-platform / waves-platform CI on merge-to-main.
  Adding refs before the files exist would break fern generate.

Review comments addressed:

- Wasim (voice-cloning-openapi.yaml:10): dropped the retired
  /waves/v1/lightning-large/add_voice reference from the description.
- Wasim (waves-v4/overrides/get-voices-openapi-overrides.yaml:15):
  already resolved by #402/#407; nothing to do here.
- Hamees (pulse-stt-openapi.yaml:213): the redact_pii/redact_pci
  descriptions cover the 'en + hi only' language constraint. The
  redaction feature itself works on regular Pulse; the language
  constraint is orthogonal to the pulse-pro question.

Changelog entry added. spec_drift_check.py -> PASS.

* docs(stt): drop 'Pulse Pro only' from async webhook description

The three webhook query params (webhook_url, webhook_method,
webhook_extra) and the async webhook mode bullet in the endpoint
overview said 'Pulse Pro only'. Async webhook mode is not restricted
to Pulse Pro; the wording was leaking a stale model constraint into
customer-facing docs. Drop the qualifier without replacement.

Response-field descriptions on processing_time_ms, rtfx, num_chunks,
and totalBytes are left intact for now; those genuinely differ per
model in the response envelope. Revisit if the pulse response starts
carrying them too.

* docs(get-voices): drop get-all-models fallback line from all three spec files

Removes the sentence 'To browse every voice across every model in one
call, use GET /waves/v1/voice/get-all-models instead.' from the
Get Voices endpoint description on the customer-facing API-ref page.

Kept the following sentence about the Lightning v3.1 + Lightning v3.1
Pro model cards for the canonical per-language voice list.

Removed in all three sync-locked files so spec_drift_check.py stays
green:
- fern/apis/waves-v4/overrides/get-voices-openapi-overrides.yaml
- fern/apis/waves/openapi/get-voices-openapi.yaml
- fern/apis/waves/openapi/get-voices-openapi-overrides.yaml

Local drift check PASS. llms.txt regenerated.

* docs(atoms): correct 'on' query on archive — live test says not required

Verification-loop finding: DELETE /agent/{id}/archive without any ?on=
query returns HTTP 200 with 'Agent archived' (or 409 'already archived').
The server accepts the request and defaults to on=true when the param
is omitted. Akshat's required: true claim did not match live behavior.

Revert to:
- required: false (server default kicks in when omitted)
- schema: string enum ['true', 'false'] with default 'true'
- description: '"true" (default) — archive the agent'.

Verified with 4 curl probes: ?on=true -> 200 archived; no param ->
409 (already archived, means default TRUE applied); ?on=false -> 200
unarchived; other values -> Zod reject.

* docs(atoms): cpsLimit max=50 + workflow_graph org-gating note

Two live-verified corrections rolled into one commit:

- cpsLimit on POST /product/import-phone-number: server rejects values
  > 50 with 'CPS limit cannot exceed 50' and < 1 with 'CPS limit must
  be at least 1'. Add maximum: 50 to the schema and quote both error
  strings in the description so integrators see the exact bounds.
- WorkflowType.workflow_graph: live check on POST /agent with
  workflowType=workflow_graph returns HTTP 403 'Conversational Flow
  agents are no longer available for your organization.' The Zod enum
  still lists the value, so keeping it in the enum is correct; the
  gating happens at the authorization middleware, not the schema. Add
  a Restricted note so integrators know a 403 does not mean the enum
  value is wrong.

---------

Co-authored-by: abhishekmishragithub <abhishek@smallest.ai>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant