Status and limits
What poagen supports today, what it refuses by name, and what is deliberately left for later.
poagen is pre-alpha. The OpenAPI 3.0 and 3.1 pipeline is correct on the four real documents in Examples, and the output is byte-stable across runs.
Supported
- OpenAPI 3.0 and 3.1, parsed through
devizzent/cebe-php-openapi. - Models for
components.schemas, synthesised models for inline payloads, backed enums,oneOf/anyOfunions,allOfmerges, and discriminated unions. - Every operation, with typed path, query, header and cookie parameters.
- JSON bodies,
application/x-www-form-urlencoded,application/xmlrequest bodies named inProfile::$xmlElements, and binary bodies asStreamInterface. - Query, header and bearer security schemes as required constructor arguments.
http basic,oauth2andopenIdConnectare described on the client, not acquired by it. - Responses as envelopes: a declared status is a value, not a throw.
Refused by name
These stop the run instead of producing a client that says less than the document does:
multipart/form-datarequest bodies. Each part carries its own content type and encoding; poagen will not flatten that into a JSON object.- XML response bodies. The request side is serialised; the response side is refused rather than decoded or handed back raw.
- JSON Schema 2020-12 keywords
const,prefixItems,unevaluatedPropertiesandcontentMediaType. - An OpenAPI 3.1
webhooksentry. It describes a call the vendor makes to you, the opposite direction from the client poagen emits. Name it inProfile::$skipas'<name>.webhook'to generate thepathshalf alone.
Every refusal names the construct, where it sits, and the one change that would make it acceptable. Profile::$skip is the only way to accept an omission, and each entry needs a reason.
Not in this release
http basic,oauth2andopenIdConnectcredential acquisition. The client carries the value you pass; obtaining and refreshing it is your transport’s job.- Multipart bodies.
- XML responses.
- A release pipeline for the examples. They are regenerated by
juston demand, not published as packages.
check-examples
History
ROADMAP.md records what the first release required and how each requirement closed. It is kept as history, not as a live checklist. The work queue lives in the repository’s MindTape files. The project’s decisions and specs live under truth/, next to the code they describe.