| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
Sorry, something went wrong.
…pi-codegen#2010) PR oapi-codegen#1387 added an `$isExternalRef` branch to the strict-{,fiber-,iris-} interface templates that strips the `<NameTag>Response` suffix when embedding an external response ref. That made external refs to a `components/responses/...` resolve to the bare schema name (`N400`) instead of the strict envelope (`N400JSONResponse`). The result: when spec A and spec B both generate strict-server and A $refs B's response component, A's local envelope embeds `N400JSONResponse` while A's external-ref envelope embeds `externalRef0.N400`. The two struct shapes are no longer identical, so cross-package response casts (the standard pattern for sharing error shapes across services) stop compiling — the regression filed as oapi-codegen#2010. Investigation showed there is no smarter alternative: non-strict server modes emit no top-level type for `components/responses/...`, only `models: true` (gives the bare alias) and `strict-server: true` (gives the `<Name>JSONResponse` envelope, which is also the only form that carries a `Headers` field in the with-headers case) do. Changes: - Drop the `$isExternalRef` carve-out from the three strict-interface templates so external refs use the same `<Name>JSONResponse` embedding as internal refs. - Update `internal/test/issues/issue-removed-external-ref` golden output to match. - Update `internal/test/issues/issue-2113`'s common-package config to also generate `strict-server: true`. The fixture was relying on the PR oapi-codegen#1387 behavior; under the new policy the destination of a strict-server external ref must also generate a strict server, so `StandardErrorJSONResponse` is in scope. - Add `internal/test/issues/issue-2010` regression fixture: two specs with strict-server, the second `$ref`s the first's `components/responses/400`, and the test exercises the cross-package cast that was broken. - README: note the cross-spec strict-server requirement under the strict-server section. The earlier two commits of oapi-codegen#1387 are kept: the `Schema.IsExternalRef` helper, and the alias-vs-defined-type fix for content-schema external refs (which is a genuinely independent bug fix — methods can't be attached to non-local aliases). BREAKING CHANGE: external `$ref` to a `components/responses/...` from a strict-server target now requires the destination spec to also generate `strict-server: true`. This restores cross-package response casting that worked in v2.0.0 and earlier. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Greptile SummaryThis PR reverts the $isExternalRef carve-out introduced in #1387 from all three strict-server interface templates (strict-interface.tmpl, strict-fiber-interface.tmpl, strict-iris-interface.tmpl). The carve-out caused external $ref to components/responses/... to embed the bare schema type instead of the <Name>JSONResponse strict envelope, breaking cross-package response casts (#2010). Golden files and fixture configs are updated to match, and a new regression test (issue-2010) is added. Confidence Score: 4/5Safe to merge; the template fix is minimal and correct, the regression test exercises the exact broken path, and all golden files are updated consistently. No logic bugs or security issues found. The behavior change is unconditional (per repo rule 3, changes that alter generated output should be opt-in), but the PR makes a strong case that opt-in is infeasible here and the new behavior restores v2.0.0 semantics. All fixture files and template changes are consistent across the three interface backends. No files require special attention; all generated golden files match the template change and the regression test is well-structured. Important Files Changed
Reviews (1): Last reviewed commit: "revert external-ref carve-out in strict-..." | Re-trigger Greptile |
Sorry, something went wrong.
| Back | FazBrowse Home | New Git URL |
Closes: #2010
PR #1387 added an $isExternalRef branch to the strict-{,fiber-,iris-} interface templates that strips the <NameTag>Response suffix when embedding an external response ref. That made external refs to a components/responses/... resolve to the bare schema name (N400) instead of the strict envelope (N400JSONResponse).
The result: when spec A and spec B both generate strict-server and A $refs B's response component, A's local envelope embeds N400JSONResponse while A's external-ref envelope embeds externalRef0.N400. The two struct shapes are no longer identical, so cross-package response casts (the standard pattern for sharing error shapes across services) stop compiling — the regression filed as #2010.
Investigation showed there is no smarter alternative: non-strict server modes emit no top-level type for components/responses/..., only models: true (gives the bare alias) and strict-server: true (gives the <Name>JSONResponse envelope, which is also the only form that carries a Headers field in the with-headers case) do.
Changes:
The earlier two commits of #1387 are kept: the Schema.IsExternalRef helper, and the alias-vs-defined-type fix for content-schema external refs (which is a genuinely independent bug fix — methods can't be attached to non-local aliases).
BREAKING CHANGE: external $ref to a components/responses/... from a strict-server target now requires the destination spec to also generate strict-server: true. This restores cross-package response casting that worked in v2.0.0 and earlier.