Skip to content

feat: add OpenResponses 2026-04-24 API support - #245

Closed
matdev83 wants to merge 3 commits into
mainfrom
feat/openresponses-api-support
Closed

feat: add OpenResponses 2026-04-24 API support#245
matdev83 wants to merge 3 commits into
mainfrom
feat/openresponses-api-support

Conversation

@matdev83

@matdev83 matdev83 commented Aug 2, 2026

Copy link
Copy Markdown
Owner

What changed

  • add the OpenResponses 2026-04-24 frontend for JSON, SSE, compaction, continuation, and WebSocket transports
  • add the dependency-free generic OpenResponses-compatible backend and versioned ordered-item backend plugin ABI
  • add independent OpenResponses reference client/backend emulators and pinned official compliance tester
  • expand executable compatibility evidence to the authoritative 5 x 9 matrix, including connector-hosted ACP and configured OpenRouter/NVIDIA provider modes
  • archive the completed Kiro specification and wire mandatory compliance/quality gates

Main integration

  • merged current \origin/main\ before submission
  • preserved main's ACP relocation to \connector-support/acp\ / \connectors/acp\
  • ported pre-output recoverability to the relocated ACP support module
  • conformance ACP cells launch the actual executable connector through the backend-plugin host adapter; ACP was not reintroduced as an essential builtin

Verification

  • \pwsh -NoProfile -File scripts/test-openresponses-compliance.ps1\ (official suite 17/17; all suites passed)
  • \make quality-checks\
  • \make parity-checks\
  • \make test\

Platform note

  • race verification remains unavailable on Windows because the local cgo/ThreadSanitizer toolchain cannot run it; ordinary stress, fuzz, leak, architecture, and full test gates pass.

@coderabbitai

coderabbitai Bot commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 441 files, which is 341 over the limit of 100.

To get a review, narrow the scope:
• coderabbit review --committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

Upgrade to a paid plan to raise the limit.

Usage-priced reviews support at most 300 files.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 365e2e15-d5b1-4359-b16c-a742dd815269

📥 Commits

Reviewing files that changed from the base of the PR and between 40474cb and 35c4fd5.

⛔ Files ignored due to path filters (113)
  • api/backendplugin/v1/backend.pb.go is excluded by !**/*.pb.go, !**/*.pb.go
  • tools/openresponses-compliance/package-lock.json is excluded by !**/package-lock.json
  • tools/openresponses-compliance/src/generated/kubb/zod/allowedToolChoiceSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/allowedToolsParamSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/annotationSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/assistantMessageItemParamSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/compactResourceSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/compactResponseMethodPublicBodySchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/compactResponseSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/compactionBodySchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/compactionSummaryItemParamSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/createResponseBodySchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/createResponseSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/detailEnumSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/developerMessageItemParamSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/emptyModelParamSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/errorPayloadSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/errorSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/errorStreamingEventSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/functionCallItemParamSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/functionCallItemStatusSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/functionCallOutputItemParamSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/functionCallOutputSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/functionCallOutputStatusEnumSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/functionCallSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/functionCallStatusSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/functionToolChoiceSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/functionToolParamSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/functionToolSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/imageDetailSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/includeEnumSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/incompleteDetailsSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/index.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/inputFileContentParamSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/inputFileContentSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/inputImageContentParamAutoParamSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/inputImageContentSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/inputTextContentParamSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/inputTextContentSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/inputTokensDetailsSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/inputVideoContentSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/itemFieldSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/itemParamSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/itemReferenceParamSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/jsonObjectResponseFormatSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/jsonSchemaResponseFormatParamSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/jsonSchemaResponseFormatSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/logProbSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/messageRoleSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/messageSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/messageStatusSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/metadataParamSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/outputTextContentParamSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/outputTextContentSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/outputTokensDetailsSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/reasoningBodySchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/reasoningEffortEnumSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/reasoningItemParamSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/reasoningParamSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/reasoningSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/reasoningSummaryContentParamSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/reasoningSummaryEnumSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/reasoningTextContentSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/refusalContentParamSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/refusalContentSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/responseCompletedStreamingEventSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/responseContentPartAddedStreamingEventSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/responseContentPartDoneStreamingEventSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/responseCreatedStreamingEventSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/responseFailedStreamingEventSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/responseFunctionCallArgumentsDeltaStreamingEventSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/responseFunctionCallArgumentsDoneStreamingEventSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/responseInProgressStreamingEventSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/responseIncompleteStreamingEventSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/responseOutputItemAddedStreamingEventSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/responseOutputItemDoneStreamingEventSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/responseOutputTextAnnotationAddedStreamingEventSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/responseOutputTextDeltaStreamingEventSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/responseOutputTextDoneStreamingEventSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/responseQueuedStreamingEventSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/responseReasoningDeltaStreamingEventSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/responseReasoningDoneStreamingEventSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/responseReasoningSummaryDeltaStreamingEventSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/responseReasoningSummaryDoneStreamingEventSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/responseReasoningSummaryPartAddedStreamingEventSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/responseReasoningSummaryPartDoneStreamingEventSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/responseRefusalDeltaStreamingEventSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/responseRefusalDoneStreamingEventSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/responseResourceSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/responsesToolParamSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/serviceTierEnumSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/specificFunctionParamSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/specificToolChoiceParamSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/streamOptionsParamSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/summaryTextContentSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/systemMessageItemParamSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/textContentSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/textFieldSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/textFormatParamSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/textParamSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/textResponseFormatSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/toolChoiceParamSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/toolChoiceValueEnumSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/toolSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/topLogProbSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/truncationEnumSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/urlCitationBodySchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/urlCitationParamSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/usageSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/userMessageItemParamSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/verbosityEnumSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/webSocketErrorEventSchema.ts is excluded by !**/generated/**
  • tools/openresponses-compliance/src/generated/kubb/zod/webSocketResponseCreateEventSchema.ts is excluded by !**/generated/**
📒 Files selected for processing (441)
  • .kiro/specs/archive/openresponses-api-support/design.md
  • .kiro/specs/archive/openresponses-api-support/gap-analysis.md
  • .kiro/specs/archive/openresponses-api-support/requirements.md
  • .kiro/specs/archive/openresponses-api-support/research.md
  • .kiro/specs/archive/openresponses-api-support/spec.json
  • .kiro/specs/archive/openresponses-api-support/tasks.md
  • .kiro/specs/archive/windows-task-reliability/design.md
  • .release-files
  • Makefile
  • api/backendplugin/v1/backend.proto
  • connector-support/acp/config.go
  • connector-support/acp/ndjson_stream.go
  • connector-support/acp/ndjson_stream_test.go
  • connector-support/acp/recoverable.go
  • connector-support/acp/recoverable_test.go
  • connector-support/acp/transport.go
  • docs/conformance-golden-coverage.md
  • docs/conformance-matrix-evidence.md
  • internal/archtest/attempt_transform_open_order_test.go
  • internal/archtest/budgets.go
  • internal/archtest/emulator_boundary_test.go
  • internal/archtest/frontend_backend_zone_imports_test.go
  • internal/archtest/import_rules.go
  • internal/archtest/openresponses_dependency_policy_test.go
  • internal/archtest/openresponses_js_tool_boundary_test.go
  • internal/archtest/openresponses_provider_boundary_test.go
  • internal/archtest/openresponses_refbackend_boundary_test.go
  • internal/archtest/openresponses_refclient_boundary_test.go
  • internal/core/capabilities/admit.go
  • internal/core/capabilities/admit_test.go
  • internal/core/continuation/doc.go
  • internal/core/continuation/id.go
  • internal/core/continuation/materialize.go
  • internal/core/continuation/materialize_phase42_test.go
  • internal/core/continuation/memory_store.go
  • internal/core/continuation/round5_regression_test.go
  • internal/core/continuation/security_test.go
  • internal/core/continuation/store_close_test.go
  • internal/core/continuation/stream_recorder.go
  • internal/core/continuation/stream_recorder_phase42_test.go
  • internal/core/diag/compatible_backends.go
  • internal/core/diag/inventory.go
  • internal/core/diag/inventory_extensions.go
  • internal/core/execbackend/backend.go
  • internal/core/interleavedthinking/shape_test.go
  • internal/core/modelregistry/inventory_provenance_test.go
  • internal/core/routing/candidate_admission.go
  • internal/core/routing/candidate_admission_phase42_test.go
  • internal/core/routing/candidate_admission_test.go
  • internal/core/runtime/executor_admission.go
  • internal/core/runtime/executor_admission_projection_test.go
  • internal/core/runtime/executor_attempt_transform.go
  • internal/core/runtime/executor_open_attempt.go
  • internal/core/runtime/executor_open_loop.go
  • internal/core/runtime/executor_recv_loop.go
  • internal/core/runtime/executor_retry_stream.go
  • internal/core/runtime/executor_route_plan.go
  • internal/core/runtime/executor_transport_span_test.go
  • internal/core/runtime/interleaved_open.go
  • internal/core/runtime/post_hook_rederive_test.go
  • internal/core/runtime/reasoning_preservation_composition_red_test.go
  • internal/core/runtime/secure_session_record_build.go
  • internal/infra/backendplugins/adapter/adapter_test.go
  • internal/infra/backendplugins/adapter/backend.go
  • internal/infra/backendplugins/adapter/bufconn_test.go
  • internal/infra/backendplugins/adapter/convert.go
  • internal/infra/backendplugins/adapter/create_compact_equivalence_test.go
  • internal/infra/backendplugins/adapter/dial.go
  • internal/infra/backendplugins/adapter/grpc_session.go
  • internal/infra/backendplugins/adapter/invocation.go
  • internal/infra/backendplugins/adapter/invocation_parts_test.go
  • internal/infra/backendplugins/adapter/invocation_tool_choice_test.go
  • internal/infra/backendplugins/adapter/session.go
  • internal/infra/backendplugins/adapter/stream.go
  • internal/infra/continuation/file_lock.go
  • internal/infra/continuation/file_lock_unix.go
  • internal/infra/continuation/file_lock_windows.go
  • internal/infra/continuation/file_store.go
  • internal/infra/continuation/file_store_lifecycle_test.go
  • internal/infra/continuation/file_store_test.go
  • internal/infra/continuation/replace_unix.go
  • internal/infra/continuation/replace_windows.go
  • internal/infra/runtimebundle/candidate_http.go
  • internal/infra/runtimebundle/compatible_diagnostics_test.go
  • internal/infra/runtimebundle/compile_generation.go
  • internal/infra/runtimebundle/discovered_factories.go
  • internal/infra/runtimebundle/discovered_factories_test.go
  • internal/infra/runtimebundle/inventory_live.go
  • internal/infra/runtimebundle/routes_read.go
  • internal/infra/runtimebundle/validate_structural.go
  • internal/infra/runtimebundle/ws_generation_reload_test.go
  • internal/infra/tokenizers/tiktoken/counter.go
  • internal/infra/tokenizers/tiktoken/counter_differential_test.go
  • internal/integration/openresponses/cell_select_test.go
  • internal/integration/openresponses/compact_full_path_test.go
  • internal/integration/openresponses/compliance_official_test.go
  • internal/integration/openresponses/doc.go
  • internal/integration/openresponses/existing_family_client_test.go
  • internal/integration/openresponses/failure_injection_test.go
  • internal/integration/openresponses/harness_smoke_test.go
  • internal/integration/openresponses/leak_test.go
  • internal/integration/openresponses/security_test.go
  • internal/plugins/backends/openresponsescompat/backend.go
  • internal/plugins/backends/openresponsescompat/backend_test.go
  • internal/plugins/backends/openresponsescompat/compact.go
  • internal/plugins/backends/openresponsescompat/compact_mapping_test.go
  • internal/plugins/backends/openresponsescompat/config.go
  • internal/plugins/backends/openresponsescompat/config_test.go
  • internal/plugins/backends/openresponsescompat/doc.go
  • internal/plugins/backends/openresponsescompat/errors.go
  • internal/plugins/backends/openresponsescompat/errors_test.go
  • internal/plugins/backends/openresponsescompat/factory.go
  • internal/plugins/backends/openresponsescompat/http.go
  • internal/plugins/backends/openresponsescompat/http_test.go
  • internal/plugins/backends/openresponsescompat/integration_test.go
  • internal/plugins/backends/openresponsescompat/legacy.go
  • internal/plugins/backends/openresponsescompat/legacy_projection_test.go
  • internal/plugins/backends/openresponsescompat/lifecycle_contract_test.go
  • internal/plugins/backends/openresponsescompat/mapping_test.go
  • internal/plugins/backends/openresponsescompat/observer_test.go
  • internal/plugins/backends/openresponsescompat/options.go
  • internal/plugins/backends/openresponsescompat/options_test.go
  • internal/plugins/backends/openresponsescompat/provider_boundary_test.go
  • internal/plugins/backends/openresponsescompat/request.go
  • internal/plugins/backends/openresponsescompat/response.go
  • internal/plugins/backends/openresponsescompat/response_test.go
  • internal/plugins/backends/openresponsescompat/sse_parser.go
  • internal/plugins/backends/openresponsescompat/sse_parser_test.go
  • internal/plugins/backends/openresponsescompat/sse_stream.go
  • internal/plugins/backends/openresponsescompat/sse_stream_test.go
  • internal/plugins/backends/openresponsescompat/stream_mapper.go
  • internal/plugins/backends/openresponsescompat/stream_mapper_test.go
  • internal/plugins/backends/openresponsescompat/streaming.go
  • internal/plugins/backends/openresponsescompat/streaming_backend_test.go
  • internal/plugins/backends/openresponsescompat/tool_choice_test.go
  • internal/plugins/frontends/gemini/decode.go
  • internal/plugins/frontends/gemini/decode_test.go
  • internal/plugins/frontends/openresponses/allowed_tools.go
  • internal/plugins/frontends/openresponses/allowed_tools_e2e_test.go
  • internal/plugins/frontends/openresponses/allowed_tools_test.go
  • internal/plugins/frontends/openresponses/compact.go
  • internal/plugins/frontends/openresponses/compact_decode.go
  • internal/plugins/frontends/openresponses/compact_test.go
  • internal/plugins/frontends/openresponses/config.go
  • internal/plugins/frontends/openresponses/config_test.go
  • internal/plugins/frontends/openresponses/continuation.go
  • internal/plugins/frontends/openresponses/continuation_lifecycle_test.go
  • internal/plugins/frontends/openresponses/continuation_policy_test.go
  • internal/plugins/frontends/openresponses/continuation_security_test.go
  • internal/plugins/frontends/openresponses/continuation_storage.go
  • internal/plugins/frontends/openresponses/continuation_test.go
  • internal/plugins/frontends/openresponses/decode.go
  • internal/plugins/frontends/openresponses/decode_round8_regression_test.go
  • internal/plugins/frontends/openresponses/decode_test.go
  • internal/plugins/frontends/openresponses/diagnostics.go
  • internal/plugins/frontends/openresponses/handler.go
  • internal/plugins/frontends/openresponses/integration_test.go
  • internal/plugins/frontends/openresponses/mount.go
  • internal/plugins/frontends/openresponses/mount_continuation_lifecycle_test.go
  • internal/plugins/frontends/openresponses/nonstreaming.go
  • internal/plugins/frontends/openresponses/nonstreaming_test.go
  • internal/plugins/frontends/openresponses/observed_stream.go
  • internal/plugins/frontends/openresponses/protocol_limits.go
  • internal/plugins/frontends/openresponses/round4_regression_test.go
  • internal/plugins/frontends/openresponses/route_test.go
  • internal/plugins/frontends/openresponses/streaming.go
  • internal/plugins/frontends/openresponses/streaming_seam_test.go
  • internal/plugins/frontends/openresponses/streaming_test.go
  • internal/plugins/frontends/openresponses/unsupported_controls_test.go
  • internal/plugins/frontends/openresponses/websocket_continuation.go
  • internal/plugins/frontends/openresponses/websocket_continuation_store_test.go
  • internal/plugins/frontends/openresponses/websocket_continuation_test.go
  • internal/plugins/frontends/openresponses/websocket_fuzz_test.go
  • internal/plugins/frontends/openresponses/websocket_generation_test.go
  • internal/plugins/frontends/openresponses/websocket_phase6_review_internal_test.go
  • internal/plugins/frontends/openresponses/websocket_phase6_review_test.go
  • internal/plugins/frontends/openresponses/websocket_queue.go
  • internal/plugins/frontends/openresponses/websocket_robustness_internal_test.go
  • internal/plugins/frontends/openresponses/websocket_round5_test.go
  • internal/plugins/frontends/openresponses/websocket_stress_test.go
  • internal/plugins/frontends/openresponses/websocket_turn.go
  • internal/plugins/frontends/openresponses/websocket_turn_test.go
  • internal/plugins/frontends/openresponses/websocket_upgrade.go
  • internal/plugins/frontends/openresponses/websocket_upgrade_test.go
  • internal/plugins/frontends/openresponses/ws_goroutine_leak_test.go
  • internal/plugins/protocols/openresponses/compact_resource_test.go
  • internal/plugins/protocols/openresponses/compaction_item_preservation_test.go
  • internal/plugins/protocols/openresponses/coverage_registry_test.go
  • internal/plugins/protocols/openresponses/decode.go
  • internal/plugins/protocols/openresponses/encode.go
  • internal/plugins/protocols/openresponses/errors.go
  • internal/plugins/protocols/openresponses/errors_mapping_test.go
  • internal/plugins/protocols/openresponses/fuzz_test.go
  • internal/plugins/protocols/openresponses/limits.go
  • internal/plugins/protocols/openresponses/limits_test.go
  • internal/plugins/protocols/openresponses/more_coverage_test.go
  • internal/plugins/protocols/openresponses/phase7_quality_gate_test.go
  • internal/plugins/protocols/openresponses/presence.go
  • internal/plugins/protocols/openresponses/profile.go
  • internal/plugins/protocols/openresponses/profile_test.go
  • internal/plugins/protocols/openresponses/request_codec_test.go
  • internal/plugins/protocols/openresponses/resource_builder.go
  • internal/plugins/protocols/openresponses/response_resource_test.go
  • internal/plugins/protocols/openresponses/round4_limits_test.go
  • internal/plugins/protocols/openresponses/round6_regression_test.go
  • internal/plugins/protocols/openresponses/sse.go
  • internal/plugins/protocols/openresponses/sse_test.go
  • internal/plugins/protocols/openresponses/state_machine.go
  • internal/plugins/protocols/openresponses/state_machine_test.go
  • internal/plugins/protocols/openresponses/testdata/LICENSE
  • internal/plugins/protocols/openresponses/testdata/README.md
  • internal/plugins/protocols/openresponses/testdata/compliance/compliance-tests.ts
  • internal/plugins/protocols/openresponses/testdata/official_2026-04-24_manifest.json
  • internal/plugins/protocols/openresponses/testdata/official_examples/ResponseParam.json
  • internal/plugins/protocols/openresponses/testdata/official_examples/ResponseResource.json
  • internal/plugins/protocols/openresponses/testdata/schema/openapi.json
  • internal/plugins/protocols/openresponses/testdata/specifications/2026-04-24.mdx
  • internal/plugins/protocols/openresponses/unsupported_controls_test.go
  • internal/plugins/protocols/openresponses/wire_types.go
  • internal/refbackend/openresponses/auth_error_test.go
  • internal/refbackend/openresponses/capture.go
  • internal/refbackend/openresponses/capture_test.go
  • internal/refbackend/openresponses/clock.go
  • internal/refbackend/openresponses/coverage_gate_test.go
  • internal/refbackend/openresponses/coverage_test.go
  • internal/refbackend/openresponses/delay_cancel_test.go
  • internal/refbackend/openresponses/direct_wire_test.go
  • internal/refbackend/openresponses/doc.go
  • internal/refbackend/openresponses/errors.go
  • internal/refbackend/openresponses/fuzz_test.go
  • internal/refbackend/openresponses/helpers_test.go
  • internal/refbackend/openresponses/main_test.go
  • internal/refbackend/openresponses/malformed_test.go
  • internal/refbackend/openresponses/request.go
  • internal/refbackend/openresponses/request_test.go
  • internal/refbackend/openresponses/response.go
  • internal/refbackend/openresponses/response_test.go
  • internal/refbackend/openresponses/script.go
  • internal/refbackend/openresponses/script_test.go
  • internal/refbackend/openresponses/server.go
  • internal/refbackend/openresponses/server_test.go
  • internal/refbackend/openresponses/sse.go
  • internal/refbackend/openresponses/sse_test.go
  • internal/refbackend/openresponses/wire.go
  • internal/refbackend/openresponses/ws.go
  • internal/refbackend/openresponses/ws_test.go
  • internal/refclient/openresponses/client.go
  • internal/refclient/openresponses/client_test.go
  • internal/refclient/openresponses/clock.go
  • internal/refclient/openresponses/coverage2_test.go
  • internal/refclient/openresponses/coverage_test.go
  • internal/refclient/openresponses/doc.go
  • internal/refclient/openresponses/event.go
  • internal/refclient/openresponses/fixtures_test.go
  • internal/refclient/openresponses/fuzz_test.go
  • internal/refclient/openresponses/item.go
  • internal/refclient/openresponses/item_test.go
  • internal/refclient/openresponses/parse.go
  • internal/refclient/openresponses/request.go
  • internal/refclient/openresponses/request_test.go
  • internal/refclient/openresponses/response.go
  • internal/refclient/openresponses/response_test.go
  • internal/refclient/openresponses/scenarios_test.go
  • internal/refclient/openresponses/sse.go
  • internal/refclient/openresponses/sse_test.go
  • internal/refclient/openresponses/testdata/README.md
  • internal/refclient/openresponses/testdata/manifest.json
  • internal/refclient/openresponses/testdata/official_examples/ResponseParam.json
  • internal/refclient/openresponses/testdata/official_examples/ResponseResource.json
  • internal/refclient/openresponses/testdata/scenarios/compact_resource.json
  • internal/refclient/openresponses/testdata/scenarios/request_multimodal.json
  • internal/refclient/openresponses/testdata/scenarios/response_error.json
  • internal/refclient/openresponses/testdata/scenarios/response_extensions.json
  • internal/refclient/openresponses/testdata/scenarios/response_phase.json
  • internal/refclient/openresponses/testdata/scenarios/response_reasoning.json
  • internal/refclient/openresponses/testdata/scenarios/response_text.json
  • internal/refclient/openresponses/testdata/scenarios/response_tools.json
  • internal/refclient/openresponses/testdata/scenarios/stream_text.sse
  • internal/refclient/openresponses/ws.go
  • internal/refclient/openresponses/ws_test.go
  • internal/standardplugins/backend_prefix_inventory_test.go
  • internal/standardplugins/backends_openresponses.go
  • internal/standardplugins/backends_openresponses_test.go
  • internal/standardplugins/compatible_diagnostics.go
  • internal/standardplugins/compatible_diagnostics_test.go
  • internal/standardplugins/compatible_ownership.go
  • internal/standardplugins/custom_backends.go
  • internal/standardplugins/enforces_max_output_inventory_test.go
  • internal/standardplugins/essential_bundle.go
  • internal/standardplugins/frontend_continuation.go
  • internal/standardplugins/frontend_route_claims.go
  • internal/standardplugins/frontend_route_claims_test.go
  • internal/standardplugins/openresponses_frontend_diagnostics.go
  • internal/standardplugins/openresponses_frontend_diagnostics_test.go
  • internal/standardplugins/spec_bundle_standard_inventory_test.go
  • internal/standardplugins/standard_table.go
  • internal/stdhttp/contract/http_input.go
  • internal/stdhttp/contract/route_claim.go
  • internal/stdhttp/contract/route_claim_test.go
  • internal/stdhttp/contract/route_diagnostics.go
  • internal/stdhttp/contract/route_registry.go
  • internal/stdhttp/frontend_isolation_integration_test.go
  • internal/stdhttp/mount.go
  • internal/testkit/backendplugin/fake.go
  • internal/testkit/backendplugin/fake_ordered_items_test.go
  • internal/testkit/conformance/acp_connector.go
  • internal/testkit/conformance/backend_credentials_test.go
  • internal/testkit/conformance/baseline_lock_test.go
  • internal/testkit/conformance/client.go
  • internal/testkit/conformance/conformance_multimodal_test.go
  • internal/testkit/conformance/conformance_text_test.go
  • internal/testkit/conformance/conformance_tools_test.go
  • internal/testkit/conformance/deployment.go
  • internal/testkit/conformance/deployment_test.go
  • internal/testkit/conformance/doc.go
  • internal/testkit/conformance/dual_plane_economic_conformance_test.go
  • internal/testkit/conformance/error_upstream.go
  • internal/testkit/conformance/frontend_server.go
  • internal/testkit/conformance/harness.go
  • internal/testkit/conformance/matrix.go
  • internal/testkit/conformance/matrix_45_evidence_test.go
  • internal/testkit/conformance/matrix_contract.go
  • internal/testkit/conformance/matrix_contract_test.go
  • internal/testkit/conformance/matrix_evidence_45.go
  • internal/testkit/conformance/matrix_evidence_test.go
  • internal/testkit/conformance/matrix_general_conformance_test.go
  • internal/testkit/conformance/matrix_general_scenarios.go
  • internal/testkit/conformance/matrix_test.go
  • internal/testkit/conformance/openresponses_backend_column.go
  • internal/testkit/conformance/openresponses_backend_column_conformance_test.go
  • internal/testkit/conformance/openresponses_backend_column_evidence_test.go
  • internal/testkit/conformance/openresponses_backend_column_scenarios.go
  • internal/testkit/conformance/openresponses_backend_column_scenarios_test.go
  • internal/testkit/conformance/openresponses_backend_legacy_column_test.go
  • internal/testkit/conformance/openresponses_frontend_row.go
  • internal/testkit/conformance/openresponses_frontend_row_conformance_test.go
  • internal/testkit/conformance/openresponses_frontend_row_evidence_test.go
  • internal/testkit/conformance/openresponses_frontend_row_scenarios.go
  • internal/testkit/conformance/openresponses_frontend_row_scenarios_test.go
  • internal/testkit/conformance/openresponses_provider_mode.go
  • internal/testkit/conformance/openresponses_row_column_scenario_table_test.go
  • internal/testkit/conformance/origin.go
  • internal/testkit/conformance/parity_acp_test.go
  • internal/testkit/conformance/parity_evidence.go
  • internal/testkit/conformance/refparity.go
  • internal/testkit/conformance/sanity_emulator_wiring_test.go
  • internal/testkit/conformance/stage_checklist_14_evidence_test.go
  • internal/testkit/conformance/tools_refbackend.go
  • internal/testkit/conformance/tools_repair_refbackend.go
  • internal/testkit/conformance/wire_clients.go
  • internal/testkit/openresponses/contracts.go
  • internal/testkit/openresponses/contracts_test.go
  • internal/testkit/openresponses/fixtures.go
  • internal/testkit/openresponses/fixtures_test.go
  • internal/testkit/openresponses/scenarios.go
  • internal/testkit/openresponses/scenarios_test.go
  • pkg/lipapi/admission.go
  • pkg/lipapi/call.go
  • pkg/lipapi/call_clone.go
  • pkg/lipapi/call_clone_test.go
  • pkg/lipapi/call_validate_test.go
  • pkg/lipapi/capabilities.go
  • pkg/lipapi/events.go
  • pkg/lipapi/extensions_internal.go
  • pkg/lipapi/extensions_internal_test.go
  • pkg/lipapi/invocation.go
  • pkg/lipapi/item_event_test.go
  • pkg/lipapi/items.go
  • pkg/lipapi/items_test.go
  • pkg/lipapi/limits.go
  • pkg/lipapi/parts.go
  • pkg/lipapi/projection.go
  • pkg/lipapi/projection_admission_test.go
  • pkg/lipapi/projection_test.go
  • pkg/lipapi/reasoning.go
  • pkg/lipapi/reasoning_contract_test.go
  • pkg/lipapi/requirements.go
  • pkg/lipapi/requirements_admission_test.go
  • pkg/lipapi/session_errors_test.go
  • pkg/lipapi/token_accounting.go
  • pkg/lipapi/tool_choice_reconcile.go
  • pkg/lipapi/tool_choice_reconcile_test.go
  • pkg/lipapi/walkers.go
  • pkg/lipsdk/backendplugin/abi_ordered_items.go
  • pkg/lipsdk/backendplugin/abi_ordered_items_test.go
  • pkg/lipsdk/backendplugin/bounds.go
  • pkg/lipsdk/backendplugin/call_bridge.go
  • pkg/lipsdk/backendplugin/call_bridge_items.go
  • pkg/lipsdk/backendplugin/convert.go
  • pkg/lipsdk/backendplugin/convert_characterization_test.go
  • pkg/lipsdk/backendplugin/enum_convert.go
  • pkg/lipsdk/backendplugin/enums.go
  • pkg/lipsdk/backendplugin/errors.go
  • pkg/lipsdk/backendplugin/forward_execute.go
  • pkg/lipsdk/backendplugin/invocation.go
  • pkg/lipsdk/backendplugin/invocation_items_validate.go
  • pkg/lipsdk/backendplugin/invocation_items_validate_test.go
  • pkg/lipsdk/backendplugin/invocation_meta.go
  • pkg/lipsdk/backendplugin/invocation_validate_parity_test.go
  • pkg/lipsdk/backendplugin/items_convert.go
  • pkg/lipsdk/backendplugin/items_dto.go
  • pkg/lipsdk/backendplugin/items_wire.go
  • pkg/lipsdk/backendplugin/items_wire_test.go
  • pkg/lipsdk/backendplugin/rawjson.go
  • pkg/lipsdk/backendplugin/rawjson_depth_test.go
  • pkg/lipsdk/backendplugin/repair_test.go
  • pkg/lipsdk/backendplugin/requirements_bridge.go
  • pkg/lipsdk/backendplugin/requirements_bridge_test.go
  • pkg/lipsdk/backendplugin/server.go
  • pkg/lipsdk/backendplugin/server_test.go
  • pkg/lipsdk/backendplugin/tool_choice_bridge.go
  • pkg/lipsdk/backendplugin/tool_choice_bridge_test.go
  • pkg/lipsdk/backendplugin/types.go
  • pkg/lipsdk/continuation/contract_test.go
  • pkg/lipsdk/continuation/doc.go
  • pkg/lipsdk/continuation/errors.go
  • pkg/lipsdk/continuation/materialize.go
  • pkg/lipsdk/continuation/memory_store.go
  • pkg/lipsdk/continuation/policy.go
  • pkg/lipsdk/continuation/record.go
  • pkg/lipsdk/continuation/recorder.go
  • pkg/lipsdk/continuation/response_id.go
  • pkg/lipsdk/continuation/response_id_generation.go
  • pkg/lipsdk/continuation/scope.go
  • pkg/lipsdk/continuation/security_slice_a_test.go
  • pkg/lipsdk/continuation/store.go
  • pkg/lipsdk/continuation/stream_recorder.go
  • pkg/lipsdk/factory.go
  • scripts/check-adhoc-goroutines.ps1
  • scripts/check-adhoc-goroutines.sh
  • scripts/test-openresponses-compliance.ps1
  • scripts/test-openresponses-compliance.sh
  • tools/openresponses-compliance/.gitignore
  • tools/openresponses-compliance/LICENSE
  • tools/openresponses-compliance/MANIFEST.json
  • tools/openresponses-compliance/README.md
  • tools/openresponses-compliance/bin/compliance-test.ts
  • tools/openresponses-compliance/package.json
  • tools/openresponses-compliance/scripts/run.mjs
  • tools/openresponses-compliance/src/lib/compliance-tests.ts
  • tools/openresponses-compliance/src/lib/sse-parser.ts

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


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.

return `{
"id": "resp_provider_1",
"object": "response",
"created_at": ` + itoa64(created) + `,
func openAIResponsesCompatSSE(created int64) string {
txt := `provider-mode-ok`
return "event: response.created\n" +
"data: " + `{"type":"response.created","sequence_number":1,"response":{"id":"resp_provider_stream","object":"response","created_at":` + itoa64(created) + `,"status":"in_progress","model":"gpt-4o-mini","output":[]}}` + "\n\n" +
"event: response.output_item.done\n" +
"data: " + `{"type":"response.output_item.done","sequence_number":7,"output_index":0,"item":{"type":"message","id":"msg_provider_1","status":"completed","role":"assistant","content":[{"type":"output_text","text":"` + txt + `"}]}}` + "\n\n" +
"event: response.completed\n" +
"data: " + `{"type":"response.completed","sequence_number":8,"response":{"id":"resp_provider_stream","object":"response","created_at":` + itoa64(created) + `,"status":"completed","model":"gpt-4o-mini","output":[{"type":"message","id":"msg_provider_1","status":"completed","role":"assistant","content":[{"type":"output_text","text":"` + txt + `"}]}]}}` + "\n\n" +
return `{
"id": "resp_harness_1",
"object": "response",
"created_at": ` + itoa64(created) + `,
"id": "msg_harness_out",
"status": "completed",
"role": "assistant",
"content": [{"type": "output_text", "text": ` + string(txt) + `}]
func openResponsesRichSSE(text string, created int64) string {
txt, _ := json.Marshal(text)
return "event: response.created\n" +
"data: " + `{"type":"response.created","sequence_number":1,"response":{"id":"resp_harness_stream","object":"response","created_at":` + itoa64(created) + `,"status":"in_progress","model":"gpt-4o-mini","output":[]}}` + "\n\n" +
"event: response.output_item.done\n" +
"data: " + `{"type":"response.output_item.done","sequence_number":7,"output_index":0,"item":{"type":"message","id":"msg_harness_1","status":"completed","role":"assistant","content":[{"type":"output_text","text":` + string(txt) + `}]}}` + "\n\n" +
"event: response.completed\n" +
"data: " + `{"type":"response.completed","sequence_number":8,"response":{"id":"resp_harness_stream","object":"response","created_at":` + itoa64(created) + `,"status":"completed","model":"gpt-4o-mini","output":[{"type":"message","id":"msg_harness_1","status":"completed","role":"assistant","content":[{"type":"output_text","text":` + string(txt) + `}]}]}}` + "\n\n" +
}

func deriveRecordRequirements(rec ContinuationRecord) lipapi.ProtocolRequirements {
items := make([]lipapi.Item, 0, len(rec.InputItems)+len(rec.OutputItems))
}

func deriveRecordRequirements(rec ContinuationRecord) lipapi.ProtocolRequirements {
items := make([]lipapi.Item, 0, len(rec.InputItems)+len(rec.OutputItems))

@matdev83 matdev83 left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Merge-blocking review findings

I found several compatibility/correctness issues that should be resolved before merge:

  1. The OpenRouter and NVIDIA cells in the claimed 5×9 matrix do not instantiate those connectors; they instantiate the generic custom-openai-responses-compatible backend under a different ID. The matrix therefore does not exercise connector-specific mapping, headers, capabilities, errors, credentials, or inventory.
  2. The production OpenResponses codec omits standard file/video content variants and coerces valid prefixed content extensions into text, losing their discriminator and structured payload.
  3. Standard request controls are incomplete: create rejects instructions, while compact explicitly accepts and ignores instructions/prompt_cache_key. The pinned schema contains additional standard controls not represented by WireResponseParam; passing the 17 official scenarios does not prove full 2026-04-24 request compatibility.
  4. The generic backend advertises documents/annotations by default although its request encoder rejects those content kinds, so routing admission can accept a candidate that fails only inside the backend adapter.
  5. Continuation item-count arithmetic uses unchecked len(a)+len(b) both before bounds checks and as a make capacity. This can overflow and bypass the intended materialization limits or panic on a malformed durable record.

Separately, the submitted head is not CI-green: the main CI workflow fails the Repo hygiene job because the new release files are not fully approved in .release-files. Backend plugin cross-platform is still in progress. Please make the release manifest complete and rerun the required gates after addressing the findings.

I did not rerun the repository locally in this environment; this review is based on the submitted head, targeted source inspection, the merged SDD, and GitHub Actions evidence.

_ = d.Close()
tb.Fatalf("harness: provider-mode config: %v", err)
}
be, err := openaicompat.BuildCompatible(backendID, "custom-openai-responses-compatible", n, primaryOrigin.Client(), openaicompat.FlavorResponses, providerModeTransportCaps())

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P1] Exercise the actual OpenRouter/NVIDIA connectors in these matrix cells. backendID is only used as an identity here; the constructed backend is always the generic custom-openai-responses-compatible implementation. Consequently every row scenario labeled openrouter or nvidia bypasses the connector-specific request mapping, attribution/auth headers, capability declarations, error handling, inventory, and credential behavior. This cannot serve as evidence for the required OpenResponses→OpenRouter/NVIDIA cells. Please instantiate the real connectors (through the plugin host if needed), or classify these as separate generic provider-mode cells and add actual connector conformance coverage.

"output_text": true,
"text": true,
"input_image": true,
"refusal": true,

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P1] Implement the pinned standard file/video content variants instead of rejecting them. The checked-in 2026-04-24 schema includes input_file and input_video, the wire type already has file_url/video_url, and the canonical model has ContentPartFileRef/ContentPartVideoRef; however this discriminator table admits only text/image/refusal. Such requests are therefore rejected as unknown, despite the PR claiming the pinned API and document/video compatibility. The same codec later stringifies valid prefixed custom content parts, which loses extension identity and structured data. Add typed lossless mappings (and a bounded opaque content representation where required) with direct-emulator and full-path tests; do not coerce structured variants to text.

// separately by compactUnsupportedControls. Metadata is deliberately excluded:
// it maps to Call.Session.Metadata end-to-end.
var createUnsupportedControls = []unsupportedControl{
{"instructions", func(p *proto.WireResponseParam) bool { return p.Instructions != nil }},

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P1] Preserve standard OpenResponses request controls instead of shrinking the advertised API. instructions is a standard 2026-04-24 field and the approved design explicitly includes canonical Instructions/request controls, but every non-null value is rejected here. Other standard schema fields (include, presence/frequency penalties, stream_options, top_logprobs, etc.) are absent from WireResponseParam and become unknown-field failures. On compact, the code explicitly accepts instructions and prompt_cache_key while ignoring them, which is silent semantic loss. Please map the supported controls into canonical fields/residual requirements and forward/project them safely; any intentionally unsupported field must be consistently rejected and documented, not accepted-and-dropped.

lipapi.CapabilityStreaming,
lipapi.CapabilityTools,
lipapi.CapabilityVision,
lipapi.CapabilityDocuments,

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P1] Do not advertise capabilities that the request mapper cannot encode. The default profile claims CapabilityDocuments (and later CapabilityAnnotations), while representableContentPartKind accepts only text, image, and refusal. A file or annotation request can therefore pass routing capability admission and fail only when this backend builds the request. That breaks honest capability negotiation and can distort failover selection. Either implement the corresponding wire mappings first or remove these capabilities from the defaults; add an admission test proving every advertised default capability reaches the reference backend without ErrUnrepresentable.

if total > bounds.MaxMaterializedBytes {
return MaterializedTrajectory{}, ErrMaterializedSizeExceeded
}
recordItems := len(rec.InputItems) + len(rec.OutputItems)

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P1] Use checked addition for record item counts. len(rec.InputItems)+len(rec.OutputItems) can overflow int before this bounds comparison, making recordItems negative and bypassing MaxMaterializedItems. The same unchecked sum is later used as the capacity in deriveRecordRequirements, where it can panic. Durable continuation records are an input boundary, so validate each length and perform a checked sum (for example if len(input) > max-len(output)) before both accounting and allocation; add a malformed-record regression test.

@matdev83

matdev83 commented Aug 2, 2026

Copy link
Copy Markdown
Owner Author

Superseded by #246. The replacement PR contains the same verified feature plus the Advanced Security remediations, and uses a single clean commit so CI's per-commit release-manifest check can pass without force-rewriting this published branch.

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.

2 participants