v0.25.0
⚠️ Behavior changes
This release changes what appears in your generated OpenAPI document for handlers that previously relied on defaults. No API signatures were removed and no code changes are required, but the emitted spec may differ:
- Return-type inference is on by default. When a handler declares a return type (e.g.
-> User,-> list[Item],-> Optional[Item]) and no explicitresponses=is supplied for the success case, the200response schema is now inferred from that return type (#530). Explicitresponses=always wins; handlers returningfunc.HttpResponse,None,Any, bare scalars, or unsupported generics infer nothing. This is gap-fill only and never raises. An opt-out switch (infer_return_types=False, analogous to FastAPI'sresponse_model=None) is planned for 0.25.1.- Note:
-> Optional[T]currently emits a200whose schema includes a null branch; the exact shape is being finalized (tracked in a follow-up issue).
- Note:
- Docstring inference remains opt-in. Summary/description inference from docstrings is available via
infer_docstring=Trueon@openapi/scan_endpoint_metadataand is off by default in this release (#533 / #553). It is scheduled to become the default in the next minor.
If your CI diffs the generated spec, expect return-type-derived 200 schemas to appear for annotated handlers; regenerate/commit the baseline or set the opt-out switch once 0.25.1 ships.
What's Changed
🚀 Features
- ci(screenshots): scan screenshots & manifest for leaked secrets by @yeongseon in #517
🧹 Maintenance
- chore(deps): bump mypy from 2.3.0 to 2.3.1 by @dependabot[bot] in #465
- chore(deps): bump ruff from 0.16.2 to 0.16.3 by @dependabot[bot] in #464
- chore(deps): bump github/codeql-action/init from 4.37.5 to 4.37.7 by @dependabot[bot] in #467
- chore(deps): bump github/codeql-action/analyze from 4.37.5 to 4.37.7 by @dependabot[bot] in #466
- chore(deps): bump ruff from 0.16.3 to 0.16.4 in the python-dependencies group by @dependabot[bot] in #503
- chore(deps): bump the github-actions group with 2 updates by @dependabot[bot] in #504
- chore(deps): bump dependabot/fetch-metadata from 2.5.0 to 3.1.0 by @dependabot[bot] in #505
- chore(deps): bump ruff from 0.16.4 to 0.16.5 in the python-dependencies group by @dependabot[bot] in #523
- chore(deps): bump the github-actions group with 5 updates by @dependabot[bot] in #524
- build(deps): add Dependabot cooldown to age new releases by @yeongseon in #518
Other Changes
- feat(spec): surface version-downgrade drops as structured warnings (#479) by @yeongseon in #489
- refactor(openapi): record itemSchema downgrade via VERSION_DOWNGRADE_DROP channel by @yeongseon in #498
- feat(openapi): passthrough top-level servers/contact/license/externalDocs/tags by @yeongseon in #500
- docs(openapi): clarify auth_level admin=host master key vs APIM subscription keys by @yeongseon in #501
- test(openapi): pin legacy request_model/response_model hoisting paths by @yeongseon in #497
- chore(ci): group dependabot updates + auto-merge patch/minor by @yeongseon in #490
- ci: notify cookbook to re-run e2e after PyPI release by @yeongseon in #507
- feat(openapi): restrict responses= generic shorthand to container origins; raise ValueError on Callable by @yeongseon in #499
- ci: add non-blocking azure-functions 2.x compat lane (Py 3.13) by @yeongseon in #508
- docs: explain route discovery and @app.route authority by @yeongseon in #511
- refactor(openapi): retire 4 deprecated decorator params per 2-minor alias policy by @yeongseon in #509
- ci(pins): update canonical azure/login pin to v3.0.2 by @yeongseon in #526
- ci(2x): fix azure-functions 2.x lane to install via wheel on Py 3.13 by @yeongseon in #525
- docs(readme): add azure-functions-logging companion callout by @yeongseon in #522
- ci(branch-naming): allow build/ branch prefix by @yeongseon in #527
- build(swagger-ui): add Subresource Integrity hashes to CDN assets by @yeongseon in #516
- feat(schema): infer 200 response from handler return type by @yeongseon in #530
- feat(deps): lift azure-functions <2.0.0 cap on Python 3.13+ by @yeongseon in #529
- feat(schema): infer summary/description from handler docstring by @yeongseon in #533
- fix(bridge): register summary/description for docstring-only bare routes by @yeongseon in #535
- docs(usage): document return-type and docstring inference + precedence by @yeongseon in #537
- ci(e2e): parameterize Function App Python runtime for 3.13 certification by @yeongseon in #538
- ci(e2e): wait for SCM readiness and retry func publish by @yeongseon in #540
- ci(release): scope cookbook dispatch token to the dispatch step by @yeongseon in #539
- ci(e2e): migrate infra to Flex Consumption for Python 3.13 certification by @yeongseon in #541
- docs(readme): reflect completed real-Azure 3.13 certification on Flex Consumption by @yeongseon in #545
- docs: codify issue-based project management convention in AGENTS.md by @yeongseon in #543
- docs(readme): sync translated READMEs with interpreter-aware pin and Flex/3.13 certification by @yeongseon in #547
- chore: ignore local Bicep build artifacts (infra/*.json) by @yeongseon in #549
- fix(decorator): make docstring inference opt-in before it ships by @yeongseon in #553
- fix(deps): re-add <3.0.0 upper cap on azure-functions for Python 3.13+ by @yeongseon in #552
Full Changelog: v0.24.0...v0.25.0