Skip to content

[pull] main from fern-api:main#584

Merged
pull[bot] merged 17 commits intocode:mainfrom
fern-api:main
Mar 16, 2026
Merged

[pull] main from fern-api:main#584
pull[bot] merged 17 commits intocode:mainfrom
fern-api:main

Conversation

@pull
Copy link

@pull pull bot commented Mar 16, 2026

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

amckinney and others added 17 commits March 16, 2026 15:31
…ipt project (#13574)

Co-authored-by: Niels Swimberghe <3382717+Swimburger@users.noreply.github.com>
* fix(go): use || instead of && for Basic Auth header condition in ToHeader

Per RFC 7617, an empty user-id is valid in Basic Auth. The previous
condition required both username and password to be non-empty, which
silently dropped the Authorization header when username was empty
(e.g., WithBasicAuth("", "my-api-key")).

* fix(go): remove if guard entirely for Basic Auth header in ToHeader

Per user feedback, remove the conditional check entirely instead of
changing && to ||. The Authorization header is now always set when
Basic Auth is configured, matching RFC 7617 which considers even
empty username:password as valid credentials.

* fix(go): revert to || guard for Basic Auth to avoid overwriting other auth

Removing the if guard entirely would overwrite Bearer/API key auth in
multi-auth SDKs. The || approach correctly sets the Basic Auth header
when either username or password is non-empty while preserving other
auth mechanisms when Basic Auth is not configured.

* fix(go): fix pre-existing space-after-colon in Basic Auth test fixture

The test fixture used ': ' (space after colon) instead of ':' in the
Basic Auth credential string, inconsistent with the generator output
and all seed files. This was missed when v1.16.5 fixed the same issue
in the generator. Per RFC 7617 the format is user-id:password with no
whitespace around the colon.
Co-authored-by: iamnamananand996 <iamnamananand996@users.noreply.github.com>
…13575)

* wrap ci python version in quotes

* Update python sdk version
…condition with $ref request body (#13568)

* fix(openapi): disambiguate streaming request wrapper name for stream-condition with $ref request body

When x-fern-streaming with stream-condition is used on an endpoint whose
request body is a $ref to a named schema, both streaming and non-streaming
variants previously resolved to the same wrapper name (e.g. ChatRequest),
causing TypeScript SDK generation to fail with duplicate declaration errors.

Changes:
- buildEndpoint.ts: For streaming endpoints, use generatedRequestName
  (derived from endpoint breadcrumbs, already includes stream suffix)
  instead of resolvedSchema.generatedName
- Add stream-request-name property to x-fern-streaming extension in both
  V2 and V3 importer pipelines for explicit user override
- Wire streamRequestNameOverride through convertStreamingOperation and
  convertHttpOperation to set requestNameOverride on streaming endpoints
- Update V3 RequestBodyConverter to use stream-request-name override
- Update test snapshots for discriminator-context, vellum, and
  x-fern-streaming-with-sse fixtures

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* refactor: align V2 streaming request name with V3 convention (<OriginalName>Streaming)

Instead of using breadcrumb-derived generatedRequestName (which produces
unpredictable names like SseStreamRequest), append 'Streaming' to the
original schema name (e.g., StreamRequest -> StreamRequestStreaming).
This aligns with the V3 importer's convention of ${schemaId}_streaming.

Updated 9 test snapshots to reflect the new naming convention.

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* docs: update versions.yml changelog to reflect Streaming suffix convention

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* fix: narrow Streaming suffix to stream-condition variants with $ref request bodies only

Move auto-disambiguation logic from buildEndpoint.ts (which applied to ALL
streaming endpoints) to convertStreamingOperation.ts (which only applies
to stream-condition variants). The Streaming suffix is now only appended
when the request body has a $ref to a named schema that would collide
with the non-streaming variant. This avoids unnecessary breaking name
changes for stream-only and plain SSE endpoints.

Reverted 8 snapshots that were incorrectly getting the Streaming suffix.

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* test: add streaming-parameter-openapi seed fixture for TS SDK

Validates that stream-condition with $ref request body produces distinct
request wrapper names (ChatRequest vs ChatRequestStreaming) in the
generated TypeScript SDK.

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* revert: remove streaming-parameter-openapi seed fixture to fix CI

The non-prefixed fixture name was auto-discovered by all generators,
causing CI failures for generators without committed seed output.
The fix is already validated by unit test snapshots and the existing
python-streaming-parameter-openapi fixture.

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* test: update v3-importer-tests baseline-sdks snapshots for streaming request name changes

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: jsklan <jsklan@users.noreply.github.com>
Co-authored-by: jsklan <jsklan@users.noreply.github.com>
Co-authored-by: jsklan <jsklan@users.noreply.github.com>
…#13438)

* fix(python): raise default minimum Python version from ^3.8 to ^3.9

Co-Authored-By: judah <jsklan.development@gmail.com>

* fix(python): raise default minimum Python version from ^3.8 to ^3.10

Co-Authored-By: judah <jsklan.development@gmail.com>

* fix(python): fix versions.yml indentation and bump to 5.0.0

Co-Authored-By: judah <jsklan.development@gmail.com>

* Update seed fixture outputs

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: fern-support <126544928+fern-support@users.noreply.github.com>
Co-authored-by: jsklan <jsklan@users.noreply.github.com>
Co-authored-by: jsklan <jsklan@users.noreply.github.com>
…13588)

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…ated Python SDKs (#13593)

* chore: upgrade pytest-asyncio from ^0.23.5 to ^1.0.0 in generated pyproject.toml

Co-Authored-By: judah <jsklan.development@gmail.com>

* fix: bump pytest to ^8.2.0 for pytest-asyncio ^1.0.0 compat; keep old versions for Python <3.9

Co-Authored-By: judah <jsklan.development@gmail.com>

* fix: use regex to parse min Python version for pytest-asyncio conditional (handles ^3.8.1)

Co-Authored-By: judah <jsklan.development@gmail.com>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: jsklan <jsklan@users.noreply.github.com>
@pull pull bot locked and limited conversation to collaborators Mar 16, 2026
@pull pull bot added the ⤵️ pull label Mar 16, 2026
@pull pull bot merged commit 234a7fe into code:main Mar 16, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants