|
53 | 53 | {"id":"openapi-generator-cv4","title":"Support exploded query parameters (GH #27)","description":"GH issue 27: query params with style=form, explode=true (OAS defaults) and object schemas currently map to Option\u003cimpl AsRef\u003cstr\u003e\u003e and are sent as one opaque string. Per OAS/RFC6570 form-explode, each object property must become its own query pair (?color=red). Fix: analyzer synthesizes/resolves a typed struct for object query params with form+explode semantics; client generator emits req.query(\u0026struct) so reqwest/serde_urlencoded serializes properties as individual pairs.","notes":"Implemented on branch issue-27-exploded-query-params, draft PR https://github.com/gpu-cli/openapi-to-rust/pull/28. Close when PR merges. Follow-ups: openapi-generator-anu (deepObject/explode=false/arrays), openapi-generator-0jz (server side).","status":"closed","priority":1,"issue_type":"feature","assignee":"James Lal","owner":"james@littlebearlabs.io","created_at":"2026-07-12T23:22:24Z","created_by":"James Lal","updated_at":"2026-07-13T04:21:19Z","started_at":"2026-07-12T23:22:49Z","closed_at":"2026-07-13T04:21:19Z","close_reason":"Released in v0.6.0 (PR #28)","dependency_count":0,"dependent_count":0,"comment_count":0} |
54 | 54 | {"id":"openapi-generator-5q8","title":"DateStrategy::Time emits broken serde codec for time::Date/time::Time (GH #25)","description":"GitHub issue gpu-cli/openapi-to-rust#25: fields with format: date/time under DateStrategy::Time get #[serde(with = \"time::serde::iso8601\")], but that module only supports OffsetDateTime — generated code fails to compile. Fix: emit time::serde::format_description! helper codec modules (time_date_format / time_time_format) into generated code, and correct the time dep requirement features (serde alone doesn't even enable rfc3339).","notes":"Fixed in PR https://github.com/gpu-cli/openapi-to-rust/pull/26 (branch worktree-issue-25-time-date-serde). Close when PR merges.","status":"closed","priority":1,"issue_type":"bug","assignee":"James Lal","owner":"james@littlebearlabs.io","created_at":"2026-07-11T18:36:28Z","created_by":"James Lal","updated_at":"2026-07-11T18:57:02Z","started_at":"2026-07-11T18:36:45Z","closed_at":"2026-07-11T18:57:02Z","close_reason":"Fixed in PR #26, merged to main, released in v0.5.3","dependency_count":0,"dependent_count":0,"comment_count":0} |
55 | 55 | {"id":"openapi-generator-dpd","title":"Hybrid string-or-object discriminated unions deserialize-fail","description":"When an anyOf/oneOf union contains a discriminator AND a non-object branch (e.g. string-enum like ToolChoiceOptions), the generator emits a tagged enum that cannot deserialize the string form. Real-world hit: OpenAI ToolChoiceParam returns 'auto' in Response.tool_choice, but generated type is #[serde(tag=\"type\")] enum with no untagged String variant. Need to fall back to #[serde(untagged)] when the union mixes string/scalar branches with tagged-object branches, OR add a String fallback variant before the tagged variants.","notes":"Live repro: `ToolChoiceParam` from openai.yaml line 52518. anyOf has 8 branches; the first (`ToolChoiceOptions`) is a string-enum (\"none\"|\"auto\"|\"required\"), the rest are objects with discriminator propertyName=type. Generator emits `#[serde(tag=\"type\")] enum ToolChoiceParam { ToolChoiceOptions(ToolChoiceOptions), ... }` which cannot deserialize the string \"auto\" because serde tries to read a \"type\" field from a JSON string. Fix: when an anyOf/oneOf branch is a non-object schema (string/number/etc), the generator must emit `#[serde(untagged)]` with the scalar branch first OR add a String variant before the tagged variants. Hit on real OpenAI Responses API `Response.tool_choice` field.","status":"closed","priority":1,"issue_type":"bug","assignee":"James Lal","owner":"james@littlebearlabs.io","created_at":"2026-05-10T23:47:35Z","created_by":"James Lal","updated_at":"2026-05-11T00:12:46Z","started_at":"2026-05-10T23:54:10Z","closed_at":"2026-05-11T00:12:46Z","close_reason":"Fixed in src/analysis.rs: (dpd) analyze_oneof_union now downgrades to untagged when any branch is non-object — verified live against OpenAI Response.tool_choice='auto' which now deserializes as ToolChoiceParam::ToolChoiceOptions(Auto). (bgo) merge_schema_into_properties now ORs in is_nullable_pattern() for allOf-merged props — verified live against OpenAI Response.incomplete_details which is now Option\u003cResponseIncompleteDetails\u003e and deserializes null cleanly. All 4 smoke tests (OpenAI+Anthropic, sync+stream) pass.","dependency_count":0,"dependent_count":0,"comment_count":0} |
56 | | -{"id":"openapi-generator-he1","title":"Publish a source-linked Progenitor comparison","description":"Add a respectful, dated website and README comparison between openapi-to-rust and Progenitor. Frame the projects around their different target use cases, cite Progenitor's primary documentation, include benchmark results with methodology caveats, represent Progenitor strengths, and avoid treating undocumented features as unsupported.","acceptance_criteria":"Website comparison uses version-pinned, source-linked claims; README contains a concise non-adversarial summary; benchmark claims link to reproducible evidence; navigation exposes the comparison; website quality gates pass.","notes":"Added /compare hub and /compare/progenitor source-linked decision page, benchmark table with limitations, README summary, navigation/footer/docs/LLM links, and corrected stale openapi-to-rust version/corpus count on the existing comparison. Astro build, html-validate, and SEO audit pass. In-app browser was unavailable for screenshot QA.","status":"in_progress","priority":2,"issue_type":"task","assignee":"James Lal","owner":"james@littlebearlabs.io","created_at":"2026-07-29T01:50:41Z","created_by":"James Lal","updated_at":"2026-07-29T01:54:36Z","started_at":"2026-07-29T01:50:49Z","dependency_count":0,"dependent_count":0,"comment_count":0} |
57 | | -{"id":"openapi-generator-dwn","title":"Benchmark openapi-to-rust against Progenitor build workflows","description":"Create a reproducible, version-pinned benchmark comparing ahead-of-time openapi-to-rust generation with Progenitor's procedural-macro workflow on the same OpenAPI fixture. Measure clean Cargo check, no-op check, Rust source rebuild, and spec-change regeneration; document methodology and avoid unsupported marketing claims.","acceptance_criteria":"Benchmark records hardware/toolchain, pinned versions, fixture, commands, repeated samples, and reports median results with methodological caveats.","status":"in_progress","priority":2,"issue_type":"task","assignee":"James Lal","owner":"james@littlebearlabs.io","created_at":"2026-07-29T01:34:49Z","created_by":"James Lal","updated_at":"2026-07-29T01:34:54Z","started_at":"2026-07-29T01:34:54Z","dependency_count":0,"dependent_count":0,"comment_count":0} |
| 56 | +{"id":"openapi-generator-qav","title":"Let comparison tables use the available desktop width","description":"Fix comparison-page layout so wide tables use the available content column instead of being constrained to the 72ch prose measure, while preserving readable paragraph line lengths, the desktop TOC, and mobile horizontal scrolling.","acceptance_criteria":"Both comparison tables fit their desktop content area without premature horizontal clipping; prose remains capped at the reading measure; mobile tables remain accessible and scrollable; Astro, HTML, and SEO quality gates pass.","status":"in_progress","priority":2,"issue_type":"bug","assignee":"James Lal","owner":"james@littlebearlabs.io","created_at":"2026-07-29T02:29:03Z","created_by":"James Lal","updated_at":"2026-07-29T02:29:10Z","started_at":"2026-07-29T02:29:10Z","dependency_count":0,"dependent_count":0,"comment_count":0} |
| 57 | +{"id":"openapi-generator-he1","title":"Publish a source-linked Progenitor comparison","description":"Add a respectful, dated website and README comparison between openapi-to-rust and Progenitor. Frame the projects around their different target use cases, cite Progenitor's primary documentation, include benchmark results with methodology caveats, represent Progenitor strengths, and avoid treating undocumented features as unsupported.","acceptance_criteria":"Website comparison uses version-pinned, source-linked claims; README contains a concise non-adversarial summary; benchmark claims link to reproducible evidence; navigation exposes the comparison; website quality gates pass.","notes":"Added /compare hub and /compare/progenitor source-linked decision page, benchmark table with limitations, README summary, navigation/footer/docs/LLM links, and corrected stale openapi-to-rust version/corpus count on the existing comparison. Astro build, html-validate, and SEO audit pass. In-app browser was unavailable for screenshot QA.","status":"closed","priority":2,"issue_type":"task","assignee":"James Lal","owner":"james@littlebearlabs.io","created_at":"2026-07-29T01:50:41Z","created_by":"James Lal","updated_at":"2026-07-29T01:54:41Z","started_at":"2026-07-29T01:50:49Z","closed_at":"2026-07-29T01:54:41Z","close_reason":"Implemented, benchmarked, documented, and verified","dependency_count":0,"dependent_count":0,"comment_count":0} |
| 58 | +{"id":"openapi-generator-dwn","title":"Benchmark openapi-to-rust against Progenitor build workflows","description":"Create a reproducible, version-pinned benchmark comparing ahead-of-time openapi-to-rust generation with Progenitor's procedural-macro workflow on the same OpenAPI fixture. Measure clean Cargo check, no-op check, Rust source rebuild, and spec-change regeneration; document methodology and avoid unsupported marketing claims.","acceptance_criteria":"Benchmark records hardware/toolchain, pinned versions, fixture, commands, repeated samples, and reports median results with methodological caveats.","notes":"Implemented benchmarks/progenitor-builds/run.mjs plus methodology and raw dated result. Pinned openapi-to-rust 0.11.0, Progenitor 0.14.0, and direct consumer dependency versions. Apple M4 Max / Cargo 1.97 medians for the 120-operation fixture: clean 5.91s vs 8.04s; no-op 0.08s vs 0.08s; Rust-source rebuild 0.445s vs 0.58s; schema-change regeneration/check 0.54s vs 0.64s. Harness smoke-tested end to end.","status":"closed","priority":2,"issue_type":"task","assignee":"James Lal","owner":"james@littlebearlabs.io","created_at":"2026-07-29T01:34:49Z","created_by":"James Lal","updated_at":"2026-07-29T01:54:41Z","started_at":"2026-07-29T01:34:54Z","closed_at":"2026-07-29T01:54:41Z","close_reason":"Implemented, benchmarked, documented, and verified","dependency_count":0,"dependent_count":0,"comment_count":0} |
58 | 59 | {"id":"openapi-generator-36a","title":"Run playground WASM lock bump only for release tags","description":"The playground WASM workflow currently runs on matching pushes to main and commits website/playground-wasm.lock. Restrict automatic runs to v* release tag pushes, while ensuring the generated lock bump is committed back to main rather than attempting to update the tag ref.","acceptance_criteria":"Pushes to main do not trigger the workflow; v* tag pushes publish the WASM asset; the lock bump is committed to main; manual dispatch remains safe.","status":"closed","priority":2,"issue_type":"bug","assignee":"James Lal","owner":"james@littlebearlabs.io","created_at":"2026-07-28T21:28:57Z","created_by":"James Lal","updated_at":"2026-07-28T21:30:21Z","started_at":"2026-07-28T21:29:00Z","closed_at":"2026-07-28T21:30:21Z","close_reason":"Restricted automatic playground WASM publishing to v* tag pushes and made tag-triggered lock commits target main; actionlint and diff checks pass.","dependency_count":0,"dependent_count":0,"comment_count":0} |
59 | 60 | {"id":"openapi-generator-zeg","title":"Add Storyden OpenAPI document to the real-world corpus","description":"Vendor Southclaws/storyden api/openapi.yaml into specs, register its canonical download source, preserve its MPL-2.0 per-file licensing notice, update documented corpus counts, and run Storyden generation/compile coverage after the three discovered fixes.","acceptance_criteria":"specs/storyden.yaml is reproducibly sourced and carries clear MPL-2.0 attribution; corpus documentation counts are updated; parse-only and compile generation for Storyden pass with the fixed generator.","notes":"Approach: copy the canonical main-branch spec to specs/storyden.yaml, add an MPL-2.0/source notice at the file boundary, register the raw GitHub URL in specs/download.sh, update README/CONTRIBUTING counts from 55/54 to 56/55, then run scripts/spec-compile.sh storyden and the Storyden all-operation Axum compile smoke. Files: specs/storyden.yaml, specs/download.sh, README.md, CONTRIBUTING.md. License: upstream repository LICENSE is MPL-2.0; keep the vendored file under MPL-2.0 with explicit source/license notice.","status":"closed","priority":2,"issue_type":"task","assignee":"James Lal","owner":"james@littlebearlabs.io","created_at":"2026-07-28T21:26:54Z","created_by":"James Lal","updated_at":"2026-07-28T22:26:29Z","started_at":"2026-07-28T21:27:01Z","closed_at":"2026-07-28T22:26:29Z","close_reason":"Implemented and verified against the vendored Storyden spec: generated clients and Axum servers compile and round-trip; response/request media handling is representation-safe and all buffered client responses are bounded.","dependency_count":0,"dependent_count":0,"comment_count":0} |
60 | 61 | {"id":"openapi-generator-2yk","title":"Exercise Storyden OpenAPI document through generators","description":"Fetch Southclaws/storyden api/openapi.yaml, run validation and representative generation workflows against this checkout, investigate reproducible failures or malformed output, and record concrete generator bugs.","acceptance_criteria":"The specification is exercised through relevant generator paths; failures are reduced to actionable evidence; confirmed generator bugs are tracked or fixed and verified.","notes":"Fetched Southclaws/storyden main/api/openapi.yaml (13,105 lines, 457,079 bytes). Direct client generation parsed 615 schemas and 237 operations, emitted types/client/mod/dependency manifest, and passed cargo check. Semantic inspection found scalar-alias array query fallback and discarded non-JSON success bodies. Per-operation Axum sweep found 13 front-end failures: 5 scalar-alias query arrays and 8 non-JSON response media operations. After excluding those, combined server output exposed 8 response enum/schema naming collisions (E0659/E0072). After also excluding collision operations, remaining 216 operations generated together with validation enabled and passed cargo check. Follow-up bugs: openapi-generator-6z1, openapi-generator-9en, openapi-generator-8c6.","status":"closed","priority":2,"issue_type":"task","assignee":"James Lal","owner":"james@littlebearlabs.io","created_at":"2026-07-28T21:05:25Z","created_by":"James Lal","updated_at":"2026-07-28T21:12:16Z","started_at":"2026-07-28T21:05:30Z","closed_at":"2026-07-28T21:12:16Z","close_reason":"Investigation complete; three concrete generator bug classes reproduced, reduced, tracked, and remaining Storyden server surface compile-verified.","dependency_count":0,"dependent_count":0,"comment_count":0} |
|
0 commit comments