Skip to content

Import reusable OpenAPI request bodies, responses, and headers - #1052

Merged
CaliLuke merged 11 commits into
mainfrom
luca/openapi-components
Oct 28, 2026
Merged

CaliLuke merged 11 commits into
mainfrom
luca/openapi-components

Conversation

@CaliLuke

Copy link
Copy Markdown
Owner

OpenAPI import now resolves reusable request bodies, responses, and headers through one shared planner. It preserves component names, forward aliases, and occurrence summary/description overrides—including empty strings—without changing shared definitions. Generated component allocation reserves authored names, and JSON/YAML serializers retain the reference annotations.

Unresolved, cyclic, wrong-kind, and unused components remain explicit import errors. OpenAPI 3.0 ignores Reference Object siblings; 3.1/3.2 preserve them. Closes #966.

Validation: import/generate/compile round trips, shared success/error response probes, CLI diagnostic aggregation, JSON/YAML annotation cases, libopenapi and pinned Vacuum, and independent-process determinism. Two existing control designs remain byte-identical; the reference specimen changes only the intended OpenAPI graph, with unchanged generated Go. Independent exact-diff review passed. Canonical pre-commit lint and the mandatory pre-push lint and complete root test suite passed.

Stacked on the reference-sibling change (#1015).

@coderabbitai

coderabbitai Bot commented Oct 28, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 203 files, which is 103 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: 1b9cf39c-d0d0-4b64-9d07-67484b8cb571
Commits

Reviewing files that changed from the base of the PR and between c74af63 and 0aaf75a.

Files ignored due to path filters: 1
  • go.sum is excluded by !**/*.sum
Files selected for processing: 203
  • .agents/skills/loom-framework/SKILL.md
  • .agents/skills/loom-framework/references/formal-models.md
  • .agents/skills/loom-framework/references/repo-map.md
  • .agents/skills/loom/SKILL.md
  • admission/concurrency.go
  • admission/concurrency_test.go
  • admission/rate.go
  • admission/rate_admission.go
  • admission/rate_admission_test.go
  • admission/rate_deadline_test.go
  • admission/rate_test.go
  • admission/tla/concurrency/Concurrency.tla
  • admission/tla/concurrency/README.md
  • admission/tla/concurrency/cancel.cfg
  • admission/tla/concurrency/checked.cfg
  • admission/tla/concurrency/resize.cfg
  • admission/tla/rate/CheckDeadline.tla
  • admission/tla/rate/README.md
  • admission/tla/rate/RatePolicy.tla
  • admission/tla/rate/checked.cfg
  • admission/tla/rate/deadline-checked.cfg
  • admission/tla/rate/deadline-err-only.cfg
  • admission/tla/rate/reset.cfg
  • admission/tla/rate/split.cfg
  • codegen/field_facts_regression_test.go
  • codegen/generator/admission_integration_test.go
  • codegen/generator/testdata/concurrency_admission_test.go.txt
  • codegen/generator/testdata/rate_admission_test.go.txt
  • codegen/generator/testdata/security_required_scopes.go.txt
  • codegen/service/endpoint_method_section.go
  • codegen/service/security_required_scopes_test.go
  • codegen/service/service_data_methods.go
  • codegen/service/service_data_security.go
  • codegen/service/service_data_types.go
  • codegen/service/service_data_union_order_test.go
  • codegen/service/testdata/security_required_scopes.go
  • codegen/transformer.go
  • codegen/unionjson/README.md
  • codegen/unionjson/shape.go
  • codegen/unionjson/union.go
  • codegen/unionjson/union_test.go
  • codegen/validation.go
  • docs/admission.md
  • docs/authorization.md
  • docs/code-generation.md
  • docs/dsl-reference.md
  • docs/examples/concurrency/design.go.txt
  • docs/examples/concurrency/main.go.txt
  • docs/examples/rate/design.go.txt
  • docs/examples/rate/main.go.txt
  • docs/openapi-import-coverage.md
  • docs/production.md
  • docs/rate-limiting.md
  • dsl/oneof_test.go
  • dsl/security.go
  • dsl/security_flow_scopes_test.go
  • dsl/security_oauth_flows.go
  • dsl/security_requirements.go
  • dsl/security_requirements_test.go
  • dsl/untagged_maps_test.go
  • dsl/untagged_nested_test.go
  • expr/attribute_composition.go
  • expr/attribute_composition_reference_test.go
  • expr/attribute_validate.go
  • expr/field_layout.go
  • expr/method.go
  • expr/method_validate_security.go
  • expr/object_field_facts.go
  • expr/object_field_facts_test.go
  • expr/security.go
  • expr/security_flow_scopes_test.go
  • expr/security_scopes.go
  • expr/security_scopes_test.go
  • expr/testdata/security_scope.go
  • expr/tla/oauth_flow_scopes/Inventories.tla
  • expr/tla/oauth_flow_scopes/README.md
  • expr/tla/oauth_flow_scopes/checked.cfg
  • expr/tla/oauth_flow_scopes/flatten.cfg
  • expr/tla/security_requirements/README.md
  • expr/tla/security_requirements/Requirements.tla
  • expr/tla/security_requirements/checked.cfg
  • expr/tla/security_requirements/flatten.cfg
  • expr/untagged_array_test.go
  • expr/untagged_validation.go
  • expr/value_plan_json_shape.go
  • expr/value_plan_json_shape_test.go
  • go.mod
  • grpc/codegen/security_scope_test.go
  • http/codegen/openapi/internal/ir/analyzer.go
  • http/codegen/openapi/internal/ir/analyzer_composition.go
  • http/codegen/openapi/internal/ir/document.go
  • http/codegen/openapi/internal/ir/model.go
  • http/codegen/openapi/internal/ir/response_allocation_test.go
  • http/codegen/openapi/internal/ir/response_description_test.go
  • http/codegen/openapi/internal/ir/response_identity_test.go
  • http/codegen/openapi/internal/ir/response_keys_test.go
  • http/codegen/openapi/internal/ir/reusable_authored.go
  • http/codegen/openapi/internal/ir/reusable_authored_test.go
  • http/codegen/openapi/internal/ir/reusable_components.go
  • http/codegen/openapi/internal/ir/reusable_components_helpers.go
  • http/codegen/openapi/internal/ir/reusable_components_test.go
  • http/codegen/openapi/internal/ir/security_bindings.go
  • http/codegen/openapi/v3/builder.go
  • http/codegen/openapi/v3/effective_composition_test.go
  • http/codegen/openapi/v3/ir_adapter.go
  • http/codegen/openapi/v3/object_ref.go
  • http/codegen/openapi/v3/object_ref_test.go
  • http/codegen/openapi/v3/ref.go
  • http/codegen/openapi/v3/response_ref.go
  • http/codegen/openapi/v3/reusable_reference_test.go
  • http/codegen/openapi/v3/security_required_scopes_test.go
  • http/codegen/openapi/v3/testdata/golden/security_file0.golden
  • http/codegen/openapi/v3/testdata/golden/security_file1.golden
  • http/codegen/openapi/v3/untagged_arrays_test.go
  • http/codegen/openapi_operation_security_test.go
  • http/codegen/security_scope_test.go
  • http/codegen/testdata/effective_composition_dsl.go
  • http/codegen/testdata/openapi_dsls_02.go
  • http/codegen/testdata/untagged_arrays_dsl.go
  • http/codegen/testdata/untagged_arrays_harness.go
  • http/middleware/rate.go
  • http/middleware/rate_test.go
  • internal/openapiimport/analyze.go
  • internal/openapiimport/analyze_reference.go
  • internal/openapiimport/analyze_reference_object.go
  • internal/openapiimport/analyze_reference_siblings.go
  • internal/openapiimport/analyze_schema_composition.go
  • internal/openapiimport/analyze_test.go
  • internal/openapiimport/analyze_value_domain.go
  • internal/openapiimport/diagnostics.go
  • internal/openapiimport/empty_object_test.go
  • internal/openapiimport/grammar_coverage_test.go
  • internal/openapiimport/issues_295_298_test.go
  • internal/openapiimport/model.go
  • internal/openapiimport/numeric_source.go
  • internal/openapiimport/numeric_source_identity.go
  • internal/openapiimport/object_field_names_test.go
  • internal/openapiimport/plan.go
  • internal/openapiimport/plan_reusable.go
  • internal/openapiimport/plan_reusable_test.go
  • internal/openapiimport/reference_object_siblings_test.go
  • internal/openapiimport/reference_siblings_test.go
  • internal/openapiimport/reference_source_ownership_test.go
  • internal/openapiimport/render.go
  • internal/openapiimport/render_composition_test.go
  • internal/openapiimport/render_recursive_test.go
  • internal/openapiimport/render_reference_contract_test.go
  • internal/openapiimport/render_request_body.go
  • internal/openapiimport/render_required.go
  • internal/openapiimport/render_response.go
  • internal/openapiimport/render_reusable.go
  • internal/openapiimport/render_schema.go
  • internal/openapiimport/render_test.go
  • internal/openapiimport/reusable_components_test.go
  • internal/openapiimport/security.go
  • internal/openapiimport/security_credentials.go
  • internal/openapiimport/security_credentials_import_test.go
  • internal/openapiimport/security_credentials_partial_test.go
  • internal/openapiimport/security_credentials_readiness_test.go
  • internal/openapiimport/security_flow_scopes_test.go
  • internal/openapiimport/security_per_scheme_test.go
  • internal/openapiimport/symmetry_test.go
  • internal/openapiimport/testdata/security_credentials/imported.json
  • internal/openapiimport/testdata/security_credentials/imported_wire.go.txt
  • internal/openapiimport/testdata/security_credentials/partial_wire.go.txt
  • internal/openapiimport/tla/reference_siblings/README.md
  • internal/openapiimport/tla/reference_siblings/ReferenceSiblings.tla
  • internal/openapiimport/tla/reference_siblings/conjoin.cfg
  • internal/openapiimport/tla/reference_siblings/flatten.cfg
  • internal/openapiimport/tla/reference_siblings/mutate.cfg
  • internal/openapiimport/tla/reference_siblings/nullable.cfg
  • internal/openapiimport/tla/reference_siblings/reject.cfg
  • internal/openapiimport/tla/reference_siblings/replace.cfg
  • internal/openapiimport/tla/reference_siblings/source.cfg
  • internal/openapiimport/tla/reference_siblings/storage.cfg
  • internal/openapiimport/tla/reusable_references/README.md
  • internal/openapiimport/tla/reusable_references/ReusableReferences.tla
  • internal/openapiimport/tla/reusable_references/copy.cfg
  • internal/openapiimport/tla/reusable_references/cycle.cfg
  • internal/openapiimport/tla/reusable_references/inline.cfg
  • internal/openapiimport/tla/reusable_references/mutate.cfg
  • internal/openapiimport/tla/reusable_references/reject.cfg
  • internal/openapiimport/tla/schema_references/README.md
  • internal/openapiimport/tla/security_credentials/README.md
  • internal/openapiref/object.go
  • jsonrpc/codegen/security_scope_test.go
  • jsonrpc/codegen/untagged_arrays_test.go
  • pkg/json_shape.go
  • pkg/json_shape_map_test.go
  • pkg/json_shape_union_test.go
  • pkg/json_union.go
  • pkg/json_union_nested_test.go
  • pkg/tla/untagged_json/MapChecked.cfg
  • pkg/tla/untagged_json/MapExistential.cfg
  • pkg/tla/untagged_json/MapMembership.tla
  • pkg/tla/untagged_json/NestedAny.cfg
  • pkg/tla/untagged_json/NestedChecked.cfg
  • pkg/tla/untagged_json/NestedFailure.tla
  • pkg/tla/untagged_json/NestedFailureChecked.cfg
  • pkg/tla/untagged_json/NestedFailureUnclassified.cfg
  • pkg/tla/untagged_json/NestedMembership.tla
  • pkg/tla/untagged_json/README.md
  • security/scheme.go

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@CaliLuke
CaliLuke changed the base branch from luca/openapi-references to main October 28, 2026 15:32
@CaliLuke
CaliLuke merged commit 75e6b6f into main Oct 28, 2026
16 checks passed
@CaliLuke
CaliLuke deleted the luca/openapi-components branch October 28, 2026 16:37
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.

OpenAPI 3.2: import reusable request bodies, responses and headers

1 participant