Commit fbc8e0d
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:
- 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 #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 #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>
1 parent 7517e09 commit fbc8e0d
18 files changed
Lines changed: 645 additions & 8 deletions
File tree
- internal/test/issues
- issue-2010
- gen
- spec_base
- spec_other
- issue-2113
- gen
- api
- common
- issue-removed-external-ref/gen/spec_base
- pkg/codegen/templates/strict
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1534 | 1534 | | |
1535 | 1535 | | |
1536 | 1536 | | |
| 1537 | + | |
| 1538 | + | |
| 1539 | + | |
1537 | 1540 | | |
1538 | 1541 | | |
1539 | 1542 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
Whitespace-only changes.
Lines changed: 271 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Whitespace-only changes.
0 commit comments