[pull] main from fern-api:main#690
Merged
Merged
Conversation
…d modes (#15421) * fix(rust): only retry on 408, 429, and 5xx except 500 Added HTTP status code-based retry logic to execute_with_retries. Previously only network errors were retried. Now also retries on 408, 429, and 501-599 status codes with exponential backoff. * fix: update Rust test snapshot for retry status codes * fix: add 5XX hyperlink to features.yml to match TS PR pattern * fix(rust): update changelog wording to match PR pattern * fix(rust): drop retryable response explicitly and add is_retryable_status tests Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(rust): remove unnecessary drop(response) — variable already used in guard Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat(rust): add config-driven retryStatusCodes with legacy/recommended modes - Add retryStatusCodes field to BaseRustConfigSchema (legacy | recommended) - Legacy (default): 408, 429, >= 500 - Recommended: 408, 429, 502, 503, 504 (excludes 500 Internal Server Error) - Apply string replacement in RustProject.ts when config is recommended - Create 1.0.0 migration to auto-pin legacy for existing users - Register Rust SDK migrations in main index - Update features.yml documenting both modes - Revert seed http_client.rs files to legacy behavior * ci: retry after Docker cleanup failures * fix: mark @boundaryml/baml as external in rust-sdk build to fix esbuild native module errors * refactor: use template variable for retryStatusCodes instead of find/replace * fix: update snapshot to match template variable * fix: drop @boundaryml/baml external from build.mjs (now in shared build-utils) * refactor(rust): use array .contains() for retry status check to match TS .includes() pattern Replace chained equality checks with array-style contains: - Legacy: [408, 429].contains(&status_code) || status_code >= 500 - Recommended: [408, 429, 502, 503, 504].contains(&status_code) This makes the generator code structurally identical to the TS generator, which uses [408, 429, 502, 503, 504].includes(statusCode). --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: iamnamananand996 <31537362+iamnamananand996@users.noreply.github.com>
…d modes (#15418) * fix(ruby): only retry on 408, 429, and 5xx except 500 Replaced fixed RETRYABLE_STATUSES list [408, 429, 500, 502, 503, 504, 521, 522, 524] with [408, 429] plus range check (>= 501 && < 600). 500 Internal Server Error is no longer retried. * fix: add 5XX hyperlink to features.yml to match TS PR pattern * fix(ruby): update changelog wording to match PR pattern * fix(ruby): rename RETRYABLE_STATUSES to RETRYABLE_4XX_STATUSES and add should_retry? tests Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat(ruby): add config-driven retryStatusCodes with legacy/recommended modes - Add retryStatusCodes field to BaseRubyCustomConfigSchema (legacy | recommended) - Legacy (default): [408, 429, 500, 502, 503, 504, 521, 522, 524] - Recommended: [408, 429, 502, 503, 504] (excludes 500 Internal Server Error) - Apply string replacement in RubyProject.ts when config is recommended - Add TestHttpRawClient as-is file with should_retry? tests - Create 2.0.0 migration to auto-pin legacy for existing users - Register Ruby SDK migrations in main index - Update features.yml documenting both modes - Revert 125 seed raw_client.rb files to legacy behavior - Update 125 seed test_raw_client.rb files to test legacy behavior * fix: biome formatting for RubyProject.ts return statement * fix: mark @boundaryml/baml as external in ruby-sdk build to fix esbuild native module errors * refactor: use template variable for retryStatusCodes instead of find/replace * fix: drop @boundaryml/baml external from build.mjs (now in shared build-utils) * refactor(ruby): use {{RETRY_STATUS_CODES_ARRAY}} placeholder pattern like TS/Rust Replace EJS retryStatusCodes ternary with {{RETRY_STATUS_CODES_ARRAY}} placeholder resolved by RubyProject.ts after EJS rendering, matching the identical pattern used in TS and Rust generators. --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: dsinghvi <10870189+dsinghvi@users.noreply.github.com>
…modes (#15417) * fix(go): only retry on 408, 429, and 5xx except 500 Updated shouldRetry to check > StatusInternalServerError instead of >= StatusInternalServerError, so that 500 is no longer retried. Added test case verifying 500 is not retried. * fix: add 5XX hyperlink to features.yml to match TS PR pattern * fix(go): update changelog wording and add 501/599 boundary tests * feat(go): add retryStatusCodes config with legacy and recommended modes Add config-driven retry behavior with 'retryStatusCodes' field: - 'legacy' (default): retries on 408, 429, and all >= 500 - 'recommended': retries only on transient codes 408, 429, 502, 503, 504 Includes: - BaseGoCustomConfigSchema field - String replacement in GoProject.ts for retrier.go_ - 1.0.0 migration (first Go migration) to pin legacy for upgrading users - Updated features.yml, changelog, tests, and seed fixtures * fix: update migration index test - Go SDK now has migrations * fix: mark @boundaryml/baml as external in go-v2 build to prevent esbuild native module errors * ci: re-trigger quality checks * refactor: use template variable for retryStatusCodes instead of find/replace * fix: drop @boundaryml/baml external from build.mjs (now in shared build-utils) * fix: remove unused AsIsFiles import (biome) * refactor(go): use {{RETRY_STATUS_CHECK}} placeholder pattern like TS/Rust Replace {{ .RetryStatusCheck }} Handlebars-style template variable with {{RETRY_STATUS_CHECK}} placeholder resolved by GoProject.ts, matching the identical pattern used in TS and Rust generators.
…ed modes (#15419) * fix(swift): only retry on 408, 429, and 5xx except 500 Updated shouldRetry to use (>= 501 && < 600) instead of >= 500. Updated retry tests: renamed testRetryOn500 to testRetryOn502BadGateway, added testNoRetryOn500InternalServerError, and changed testEndpointLevelMaxRetriesOverride to use 502. * fix: add 5XX hyperlink to features.yml to match TS PR pattern * fix(swift): update changelog wording and add 501/599 boundary tests * feat(swift): add config-driven retryStatusCodes with legacy/recommended modes - Add retryStatusCodes field to BaseSwiftCustomConfigSchema (legacy | recommended) - Legacy (default): 408, 429, >= 500 - Recommended: 408, 429, 502, 503, 504 (excludes 500 Internal Server Error) - Apply string replacement in SdkGeneratorCli.ts when config is recommended - Create 1.0.0 migration to auto-pin legacy for existing users - Register Swift SDK migrations in main index - Update features.yml documenting both modes - Revert seed HTTPClient.swift and ClientRetryTests.swift to legacy behavior * fix: mark @boundaryml/baml as external in swift build to prevent esbuild native module errors * refactor: use template variable for retryStatusCodes instead of find/replace * fix: drop @boundaryml/baml external from build.mjs (now in shared build-utils) * refactor(swift): use {{RETRY_STATUS_CHECK}} placeholder pattern like TS/Rust Replace EJS retryStatusCheck variable with {{RETRY_STATUS_CHECK}} placeholder resolved by SdkGeneratorCli.ts after EJS rendering, matching the identical pattern used in TS and Rust generators. * fix: update migration test - Swift SDK now has migrations --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: dsinghvi <10870189+dsinghvi@users.noreply.github.com>
Co-authored-by: dsinghvi <10870189+dsinghvi@users.noreply.github.com>
…wire tests (#15563) * fix(typescript): dedupe discriminant in generated SSE protocol-union wire tests * chore(typescript): update IR-to-JSONSchema snapshots for new SSE seed types
… modes (#15420) * fix(php): only retry on 408, 429, and 5xx except 500 Updated shouldRetry to use (>= 501 && < 600) instead of >= 500, so that 500 Internal Server Error is no longer retried. * fix: add 5XX hyperlink to features.yml to match TS PR pattern * fix(php): update changelog wording to match PR pattern * fix(php): fix broken retry tests and add 500/600 boundary tests Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(php): remove invalid status 600 retry test (PSR-7 rejects status outside 1xx-5xx) * feat(php): add config-driven retryStatusCodes with legacy/recommended modes - Add retryStatusCodes field to BasePhpCustomConfigSchema (legacy | recommended) - Legacy (default): 408, 429, >= 500 - Recommended: 408, 429, 502, 503, 504 (excludes 500 Internal Server Error) - Apply string replacement in PhpProject.ts when config is recommended - Create 3.0.0 migration to auto-pin legacy for existing users - Register PHP SDK migrations in main index - Update features.yml documenting both modes - Revert seed RetryDecoratingClient.php and RawClientTest.php to legacy behavior * fix: biome formatting in PhpProject.ts * ci: retry after Docker cleanup failures * fix: sort imports alphabetically for biome * fix: mark @boundaryml/baml as external in php-sdk build to fix esbuild native module errors * refactor: use template variable for retryStatusCodes instead of find/replace * fix: drop @boundaryml/baml external from build.mjs (now in shared build-utils) * refactor(php): use {{RETRY_STATUS_CHECK}} placeholder pattern like TS/Rust Replace EJS conditionals with {{RETRY_STATUS_CHECK}} and {{RETRY_STATUS_CODES_ARRAY}} placeholders resolved by PhpProject.ts, matching the identical pattern used in TS and Rust generators. * fix(php): biome format fix * fix: update migration test - use fern-openapi as undefined generator --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…15564) Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: kenny <kenny@buildwithfern.com>
Co-authored-by: patrickthornton <70873350+patrickthornton@users.noreply.github.com>
Co-authored-by: patrickthornton <70873350+patrickthornton@users.noreply.github.com>
Co-authored-by: patrickthornton <70873350+patrickthornton@users.noreply.github.com>
Co-authored-by: patrickthornton <70873350+patrickthornton@users.noreply.github.com>
Co-authored-by: patrickthornton <70873350+patrickthornton@users.noreply.github.com>
Co-authored-by: patrickthornton <70873350+patrickthornton@users.noreply.github.com>
Co-authored-by: patrickthornton <70873350+patrickthornton@users.noreply.github.com>
Co-authored-by: patrickthornton <70873350+patrickthornton@users.noreply.github.com>
Co-authored-by: patrickthornton <70873350+patrickthornton@users.noreply.github.com>
Co-authored-by: patrickthornton <70873350+patrickthornton@users.noreply.github.com>
Co-authored-by: dsinghvi <10870189+dsinghvi@users.noreply.github.com>
Co-authored-by: dsinghvi <10870189+dsinghvi@users.noreply.github.com>
Co-authored-by: dsinghvi <10870189+dsinghvi@users.noreply.github.com>
* fix(ruby-v2): strip trailing whitespace from comment lines Layout/TrailingWhitespace was previously autocorrected by 'rubocop -A' at generation time. Now that the autocorrect pass is removed, spec-controlled docstrings with trailing whitespace surface as offenses (caught on the Square nightly baseline benchmark). Co-Authored-By: barry.zou <barry.zou@buildwithfern.com> * chore(ruby-v2): add changelog for trailing-whitespace fix Co-Authored-By: barry.zou <barry.zou@buildwithfern.com> --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: barry.zou <barry.zou@buildwithfern.com>
…ion (#15493) * fix(csharp-sdk): add brackets to safe query key characters Add `[` and `]` to SafeQueryKeyChars so array-style query parameter names like `page[size]` are sent unencoded. Previously these were percent-encoded as `page%5Bsize%5D`, causing WireMock.Net mock server test failures when the test setup used decoded names in WithParam(). Update all seed test outputs and add a unit test for bracket preservation. Co-Authored-By: will.kendall@buildwithfern.com <wpk235@gmail.com> * fix(csharp): add brackets to IsSafeQueryKeyChar fallback for non-NET8 targets Co-Authored-By: will.kendall@buildwithfern.com <wpk235@gmail.com> * fix(csharp): update test assertions to expect unencoded brackets in query keys Co-Authored-By: will.kendall@buildwithfern.com <wpk235@gmail.com> * fix(csharp): split comma-delimited query param values for WireMock.Net matching WireMock.Net splits comma-separated query parameter values into arrays. When a query param example contains commas (e.g. 'merchant,offer'), generate separate .WithParam() calls for each value so they match correctly. Co-Authored-By: will.kendall@buildwithfern.com <wpk235@gmail.com> * fix(csharp): use single WithParam call with multiple values for comma-delimited params WireMock.Net requires all values for the same param name in a single WithParam() call. Multiple separate calls for the same key cause matcher failures. Co-Authored-By: will.kendall@buildwithfern.com <wpk235@gmail.com> * chore(csharp): add changelog entry for comma-delimited query param fix Co-Authored-By: will.kendall@buildwithfern.com <wpk235@gmail.com> * fix(csharp): escape quotes and backslashes in comma-split query param values Properly escape special characters before wrapping values in C# string literals to prevent syntax errors in generated WithParam() calls. Co-Authored-By: will.kendall@buildwithfern.com <wpk235@gmail.com> * fix(csharp): remove trim() to preserve whitespace in comma-split query values WireMock.Net preserves whitespace when splitting comma-delimited values, so trimming in the generator would cause a mismatch for values like 'foo, bar' where the space after the comma is significant. Co-Authored-By: will.kendall@buildwithfern.com <wpk235@gmail.com> * fix(csharp): percent-encode query param keys in WireMock test generation Revert the SafeQueryKeyChars change that added [ and ] to safe characters. Per RFC 3986, brackets are reserved gen-delims and must be percent-encoded. Instead, fix the test generator (MockEndpointGenerator.ts) to percent-encode query parameter key names using the same safe character set as the C# SDK's QueryStringBuilder. This ensures the WireMock matcher expects the encoded key that the spec-compliant HTTP client actually sends on the wire. Co-Authored-By: will.kendall@buildwithfern.com <wpk235@gmail.com> * fix(csharp): fix biome formatting for SAFE_QUERY_KEY_CHARS Co-Authored-By: will.kendall@buildwithfern.com <wpk235@gmail.com> --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: will.kendall@buildwithfern.com <wpk235@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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 : )