You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The sebuf protoc-gen-openapiv3 generator hardcodes required:false on every query parameter — 340/341 across the surface (only 1 is required:true). So parameters the handler treats as effectively required are documented as optional, and the request component schema's required:[…] array is contradicted by the parameter object (e.g. AnalyzeStockRequest.required:[symbol] vs the symbol query param required:false). Consumers omit them and get an empty/error 200 with no signal.
Single upstream fix
Make the generator read the proto field's requiredness (buf.validate.field.required / the (sebuf.http.query) annotation) and set the OpenAPI parameter required:true accordingly; regenerate. One codegen change flips ~30 params at once and removes the parameter-vs-component contradiction. If the external plugin can't be configured, apply it via the post-generation injector shipped in #4602.
Problem
The sebuf
protoc-gen-openapiv3generator hardcodesrequired:falseon every query parameter — 340/341 across the surface (only 1 isrequired:true). So parameters the handler treats as effectively required are documented as optional, and the request component schema'srequired:[…]array is contradicted by the parameter object (e.g.AnalyzeStockRequest.required:[symbol]vs thesymbolquery paramrequired:false). Consumers omit them and get an empty/error200with no signal.Single upstream fix
Make the generator read the proto field's requiredness (
buf.validate.field.required/ the(sebuf.http.query)annotation) and set the OpenAPI parameterrequired:trueaccordingly; regenerate. One codegen change flips ~30 params at once and removes the parameter-vs-component contradiction. If the external plugin can't be configured, apply it via the post-generation injector shipped in #4602.Confirmed effectively-required params (marked
required:falsetoday)get-flight-status—flight_numberget-humanitarian-summary—country_codelist-consumer-price-movers—limit(omitted → 0 results, contradicts documented default 10)get-bls-series/get-fred-series—series_id;list-world-bank-indicators—indicator_codesearch-imagery—bboxget-temporal-baseline—type(also a fixed allow-list)compute-energy-shock—country_code;get-country-port-activity—country_codesubmit-contact—name,organization,phone,email;register-interest—turnstileTokenanalyze-stock,backtest-stock,get-insider-transactions—symbollist-military-bases,list-military-flights— bbox (also tracked in feat(api/dx): military bbox endpoints return silent empty 200 on missing/all-zero bbox — surface 400 or debug header #4595)summarize-article-cache—cache_keylookup-sanction-entity—qget-scenario-status—jobId(handler 400s on missing)iso2/chokepointId/fromIso2/toIso2onget-chokepoint-history,get-bypass-options,get-country-cost-shock,get-multi-sector-cost-shock,get-country-products,get-route-impact,get-country-chokepoint-index,get-sector-dependency,get-route-explorer-laneget-webcam-image—webcam_idAcceptance criteria
required:truein its OpenAPI parameter object.required:falsewhile listed in its request schema'srequired:[…].Part of the umbrella audit #4599. Sibling workstreams: #4595 (bbox 400/router), #4602 (auth — in flight).