Skip to content

Upgrade to openapi2zig v0.4#92

Merged
jayvdb merged 2 commits into
mainfrom
openapi2zig-0.4
Jul 21, 2026
Merged

Upgrade to openapi2zig v0.4#92
jayvdb merged 2 commits into
mainfrom
openapi2zig-0.4

Conversation

@jayvdb

@jayvdb jayvdb commented Jul 21, 2026

Copy link
Copy Markdown
Member

Summary by CodeRabbit

  • Bug Fixes

    • Improved error handling for external command failures, including clearer reporting of unsuccessful processes.
    • Stabilized generated Zig output by removing variable timestamps and supporting updated generator output.
    • Improved behavior when optional code-generation tools are unavailable.
  • Developer Experience

    • Added automated checks for Rust documentation formatting and safer command execution patterns.
    • Improved test helpers for temporary environment configuration and more reliable test execution.

@coderabbitai

coderabbitai Bot commented Jul 21, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The PR standardizes Rust subprocess error handling with command-error, adds AST-grep and documentation guidance, introduces a shared empty-PATH test helper, reorganizes et-int-gen errors, and updates Zig generation normalization and unavailable-tool behavior.

Changes

Command error rollout

Layer / File(s) Summary
Repository rules and workspace configuration
.deepsource.toml, CLAUDE.md, Cargo.toml, config/ast-grep/rules/*
Adds the shared command-error dependency, coverage exclusions, subprocess-import enforcement, doc-summary enforcement, and related contributor guidance.
Shared test environment helpers
libs/test-helpers/*, libs/ws-runner-common/*, services/ws/*
Adds with_empty_path, re-exports temp_env, and updates environment-driven tests and dependencies to use the shared helpers.
Edge toolkit command checks
libs/edge-toolkit/*
Uses checked mise command output and updates the unavailable-mise test to temporarily clear PATH.
Runner subprocess checks
services/ws-pyo3-runner/*, services/ws-wasi-runner/*, services/ws-web-runner/*, utilities/wasm-cov-wrapper/*
Replaces manual status and spawn checks with status_checked, output_checked, or spawn_checked.
Int-gen errors and Zig generation
utilities/int-gen/*
Moves the public error type into a module, adds checked openapi2zig execution, strips volatile timestamps, updates inline-fetch matching, and tests behavior when the tool is unavailable.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Suggested reviewers: pierre-tenedero

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately reflects the main change: upgrading openapi2zig to v0.4 and adapting codegen-related tooling around it.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch openapi2zig-0.4

Comment @coderabbitai help to get the list of available commands.

@deepsource-io

deepsource-io Bot commented Jul 21, 2026

Copy link
Copy Markdown

DeepSource Code Review

We reviewed changes in 15af375...c08720c on this pull request. Below is the summary for the review, and you can see the individual issues we found as inline review comments.

See full review on DeepSource ↗

PR Report Card

Overall Grade   Security  

Reliability  

Complexity  

Hygiene  

Coverage  

Code Review Summary

Analyzer Status Updated (UTC) Details
C# Jul 21, 2026 2:52a.m. Review ↗
C & C++ Jul 21, 2026 2:52a.m. Review ↗
Docker Jul 21, 2026 2:52a.m. Review ↗
Java Jul 21, 2026 2:52a.m. Review ↗
JavaScript Jul 21, 2026 2:52a.m. Review ↗
Python Jul 21, 2026 2:52a.m. Review ↗
Rust Jul 21, 2026 2:52a.m. Review ↗
Secrets Jul 21, 2026 2:52a.m. Review ↗
Code coverage Jul 21, 2026 3:17a.m. Review ↗

Code Coverage Summary

Language Line Coverage (New Code) Line Coverage (Overall)
Aggregate
92.3%
56.4%
Python -
66.2%
Rust
92.3%
56%

➟ Additional coverage metrics may have been reported. See full coverage report ↗


Important

AI Review is run only on demand for your team. We're only showing results of static analysis review right now. To trigger AI Review, comment @deepsourcebot review on this thread.

@codacy-production

Copy link
Copy Markdown

Up to standards ✅

🟢 Issues 0 issues

Results:
0 new issues

View in Codacy

🟢 Metrics 0 complexity · 0 duplication

Metric Results
Complexity 0
Duplication 0

View in Codacy

AI Reviewer: first review requested successfully. AI can make mistakes. Always validate suggestions.

Run reviewer

TIP This summary will be updated as you push new changes.

@codecov

codecov Bot commented Jul 21, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ All tests successful. No failed tests found.

📢 Thoughts on this report? Let us know!

@jayvdb
jayvdb marked this pull request as ready for review July 21, 2026 03:27

@codacy-production codacy-production Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull Request Overview

While the code is technically up to standards according to Codacy, this PR suffers from significant scope creep. The title suggests a simple dependency upgrade to openapi2zig v0.4, but the changes include a workspace-wide migration to the command-error crate and the introduction of new ast-grep linting infrastructure.

Crucially, the PR description is empty, providing no context for these secondary changes. Furthermore, the test plan is incomplete; while some environment-handling tests were found, there are no tests verifying the 0.4-specific regex replacement logic or the enforcement of the new command-requires-command-error linting rule. These gaps should be addressed to ensure the new infrastructure functions as intended.

About this PR

  • The PR description is empty, and the scope significantly exceeds the title 'Upgrade to openapi2zig v0.4'. It includes workspace-wide error handling migrations and new linting infrastructure which should be documented or split into separate PRs.

Test suggestions

  • Verify generate_zig and is_available correctly handle the absence of the openapi2zig binary via PATH manipulation.
  • Verify mise_is_available returns false when mise is not present on PATH.
  • Verify that rewrite correctly identifies and replaces the 0.4-specific inlined binary/text request pattern.
  • Verify that the command-requires-command-error ast-grep rule correctly flags std::process::Command imports lacking the extension trait.
Prompt proposal for missing tests
Consider implementing these tests if applicable:
1. Verify that `rewrite` correctly identifies and replaces the 0.4-specific inlined binary/text request pattern.
2. Verify that the `command-requires-command-error` ast-grep rule correctly flags `std::process::Command` imports lacking the extension trait.

TIP Improve review quality by adding custom instructions
TIP How was this review? Give us feedback

/// `.body = body,` field -- as of openapi2zig 0.4 that arm hoists the response body into a `const body` and
/// stores it via `.body = body,` (0.3 inlined `.body = ...toOwnedSlice(),` in the struct literal directly).
/// [`reroute_inline_binary_ops`] splices both captures into a delegation.
const INLINE_FETCH_BLOCK_PATTERN: &str = r#"(?s)requestBody;.*?"([^"]+)".*?Method\.([A-Z]+).*?\.body = body,\n \};"#;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🟡 MEDIUM RISK

Suggestion: The regex INLINE_FETCH_BLOCK_PATTERN is sensitive to exact whitespace and structural formatting. Consider making the whitespace matches more flexible to avoid breakage if the generator's output style changes slightly.

Suggested change
const INLINE_FETCH_BLOCK_PATTERN: &str = r#"(?s)requestBody;.*?"([^"]+)".*?Method\.([A-Z]+).*?\.body = body,\n \};"#;
const INLINE_FETCH_BLOCK_PATTERN: &str = r#"(?s)requestBody;.*?\"([^\"]+)\".*?Method\.([A-Z]+).*?\.body\s*=\s*body,\n\s*\};"#;

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 5

🧹 Nitpick comments (2)
Cargo.toml (1)

439-460: 🔒 Security & Privacy | 🔵 Trivial

These entries are package-name only. cargo-unmaintained does not support version-scoped ignores, so this suppresses every future windows-* occurrence too; keep it only if that broad suppression is intentional.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Cargo.toml` around lines 439 - 460, Review the cargo-unmaintained ignore list
in Cargo.toml and confirm whether suppressing all current and future versions of
these windows-* package names is intentional. If the suppression should not be
broad, remove these package-name entries and use a supported narrower mechanism;
otherwise retain them and document the deliberate scope.

Source: Coding guidelines

services/ws-pyo3-runner/tests/modules.rs (1)

139-140: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Make the intentional raw-outcome exception explicit.

The new command-requires-command-error rule reserves fully qualified std::process::Command for tests that must inspect a non-zero result. This file imports Command, so the raw Command::new(...).output() call is indistinguishable from an unchecked subprocess call; qualify only this call as std::process::Command::new(...). (raw.githubusercontent.com)

Suggested change
-    let output = Command::new(env!("CARGO_BIN_EXE_et-ws-pyo3-runner"))
+    let output = std::process::Command::new(env!("CARGO_BIN_EXE_et-ws-pyo3-runner"))
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@services/ws-pyo3-runner/tests/modules.rs` around lines 139 - 140, In the test
case around the intentional raw subprocess outcome, qualify only the
`Command::new(...).output()` call as `std::process::Command::new(...)` instead
of using the imported `Command`. Preserve the existing raw output inspection and
leave other command invocations unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@CLAUDE.md`:
- Around line 892-900: Reduce the “Expand doc-summary-ends-with-period as you
touch Rust files” section in CLAUDE.md to only the actionable imperative: when
modifying a Rust file, add it to the rule’s sorted files list and fix its
first-line summary violations. Remove the duplicated rollout, backlog, scoping,
and future-coverage explanation while preserving the required behavior.

In `@config/ast-grep/rules/command-requires-command-error.yaml`:
- Around line 18-20: Update the use_declaration matcher in
command-requires-command-error to require the CommandExt import specifically,
including the command_error::CommandExt as _ form, rather than matching any
import containing command_error. Ensure imports such as
command_error::CommandError do not satisfy the rule.
- Around line 5-10: The rule currently misses fully qualified
std::process::Command usages, allowing unchecked command execution to bypass
validation. Update command-requires-command-error.yaml to detect fully qualified
command construction and require command_error::CommandExt with checked methods,
while explicitly allowing only the narrow raw-command cases described in the
existing rule.

In `@config/ast-grep/rules/doc-summary-ends-with-period.yaml`:
- Around line 20-25: Update the follows guard in the doc-summary rule so only
preceding /// lines containing visible content are treated as doc lines; exclude
an empty /// line while preserving the existing handling for non-empty doc
comments.

In `@utilities/int-gen/tests/generate_zig.rs`:
- Around line 3-4: Update the module-level documentation describing the
absent-Zig behavior near generate_zig so it no longer calls the skip quiet. Keep
the description consistent with generate_zig’s eprintln! notice and the existing
wording around line 17.

---

Nitpick comments:
In `@Cargo.toml`:
- Around line 439-460: Review the cargo-unmaintained ignore list in Cargo.toml
and confirm whether suppressing all current and future versions of these
windows-* package names is intentional. If the suppression should not be broad,
remove these package-name entries and use a supported narrower mechanism;
otherwise retain them and document the deliberate scope.

In `@services/ws-pyo3-runner/tests/modules.rs`:
- Around line 139-140: In the test case around the intentional raw subprocess
outcome, qualify only the `Command::new(...).output()` call as
`std::process::Command::new(...)` instead of using the imported `Command`.
Preserve the existing raw output inspection and leave other command invocations
unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: c8cc42be-fa10-402b-80a4-74d4b97877b2

📥 Commits

Reviewing files that changed from the base of the PR and between 15af375 and c08720c.

⛔ Files ignored due to path filters (2)
  • Cargo.lock is excluded by !**/*.lock
  • generated/zig-rest/src/et_rest_client.zig is excluded by !**/generated/**
📒 Files selected for processing (29)
  • .deepsource.toml
  • CLAUDE.md
  • Cargo.toml
  • config/ast-grep/rules/command-requires-command-error.yaml
  • config/ast-grep/rules/doc-summary-ends-with-period.yaml
  • libs/edge-toolkit/Cargo.toml
  • libs/edge-toolkit/src/config.rs
  • libs/edge-toolkit/tests/no_mise.rs
  • libs/test-helpers/Cargo.toml
  • libs/test-helpers/src/lib.rs
  • libs/ws-runner-common/Cargo.toml
  • libs/ws-runner-common/tests/config.rs
  • services/ws-pyo3-runner/Cargo.toml
  • services/ws-pyo3-runner/tests/modules.rs
  • services/ws-wasi-runner/Cargo.toml
  • services/ws-wasi-runner/tests/modules.rs
  • services/ws-wasi-runner/tests/otel_propagation.rs
  • services/ws-wasi-runner/tests/vector_otlp_relay.rs
  • services/ws-web-runner/Cargo.toml
  • services/ws-web-runner/build.rs
  • services/ws/Cargo.toml
  • services/ws/tests/config.rs
  • utilities/int-gen/Cargo.toml
  • utilities/int-gen/src/error.rs
  • utilities/int-gen/src/lib.rs
  • utilities/int-gen/src/zig.rs
  • utilities/int-gen/tests/generate_zig.rs
  • utilities/wasm-cov-wrapper/Cargo.toml
  • utilities/wasm-cov-wrapper/src/main.rs

Comment thread CLAUDE.md
Comment on lines +892 to +900
### Expand `doc-summary-ends-with-period` as you touch Rust files

`config/ast-grep/rules/doc-summary-ends-with-period.yaml` enforces that a doc comment's first line is a
one-line summary ending in terminal punctuation (`.`, `!`, or `?`). The workspace had a large pre-existing
backlog of violations, so the rule is scoped by a `files:` allowlist rather than applied workspace-wide, and it
is rolled out incrementally. **Whenever you modify a Rust file, add it to that rule's `files:` list (keep the
list sorted) and fix any first-line-summary violations in it as part of the same change** -- so the rule's
coverage only ever grows. Once the `files:` list covers effectively everything, drop the `files:` scoping and
let it apply workspace-wide.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win

Avoid duplicating the doc-summary rollout policy.

This repeats the incremental allowlist and backlog guidance already documented in config/ast-grep/rules/doc-summary-ends-with-period.yaml Lines 1-4. Keep one canonical explanation and reduce the other location to only the necessary imperative.

As per coding guidelines, “Document each thing exactly once in its most relevant location; do not duplicate explanations or add documentation cross-references.”

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@CLAUDE.md` around lines 892 - 900, Reduce the “Expand
doc-summary-ends-with-period as you touch Rust files” section in CLAUDE.md to
only the actionable imperative: when modifying a Rust file, add it to the rule’s
sorted files list and fix its first-line summary violations. Remove the
duplicated rollout, backlog, scoping, and future-coverage explanation while
preserving the required behavior.

Source: Coding guidelines

Comment on lines +5 to +10
A file that imports `std::process::Command` via `use` must also `use command_error::CommandExt` (import it as
`use command_error::CommandExt as _;`) so command execution goes through the checked methods
(`status_checked` / `output_checked` / `spawn_checked`), whose errors carry the command line and exit status --
a raw `std` `Command`'s `.status()` / `.output()` / `.spawn()` errors carry none of that. If a call genuinely
needs the raw outcome (e.g. a test that asserts a non-zero exit, or an exit-code proxy), fully-qualify
`std::process::Command` at the call site instead of importing it, so this rule does not apply.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf 'Files:\n'
git ls-files 'config/ast-grep/rules/*command*' 'config/ast-grep/rules/*process*' | sed -n '1,120p'

printf '\nTarget file:\n'
cat -n config/ast-grep/rules/command-requires-command-error.yaml

printf '\nRelated rules mentioning CommandExt or Command:\n'
rg -n --no-heading 'CommandExt|std::process::Command|status_checked|output_checked|spawn_checked|command_error' config/ast-grep/rules

Repository: edge-toolkit/core

Length of output: 2164


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf 'All ast-grep rules mentioning process::Command or command_error:\n'
rg -n --no-heading 'std\s*::\s*process\s*::.*\bCommand\b|command_error|status_checked|output_checked|spawn_checked' config/ast-grep/rules

printf '\nPotential companion rules about fully-qualified Command calls:\n'
rg -n --no-heading 'process::Command|Command::new|\.status\(\)|\.output\(\)|\.spawn\(\)' config/ast-grep/rules

Repository: edge-toolkit/core

Length of output: 1537


Close the fully-qualified Command bypass. This rule only matches use std::process::Command, so fully-qualified std::process::Command calls skip the check entirely. Add a companion rule for fully-qualified command use, or make the raw-command exception explicit and narrow.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@config/ast-grep/rules/command-requires-command-error.yaml` around lines 5 -
10, The rule currently misses fully qualified std::process::Command usages,
allowing unchecked command execution to bypass validation. Update
command-requires-command-error.yaml to detect fully qualified command
construction and require command_error::CommandExt with checked methods, while
explicitly allowing only the narrow raw-command cases described in the existing
rule.

Comment on lines +18 to +20
has:
kind: use_declaration
regex: "command_error"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '--- file context ---\n'
cat -n config/ast-grep/rules/command-requires-command-error.yaml

printf '\n--- related occurrences ---\n'
rg -n "command_error|CommandExt|CommandError" config/ast-grep/rules -S || true

printf '\n--- any tests or docs for this rule ---\n'
rg -n "command-requires-command-error|command_error" . -S || true

Repository: edge-toolkit/core

Length of output: 246


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo '--- file context ---'
cat -n config/ast-grep/rules/command-requires-command-error.yaml

echo
echo '--- related occurrences ---'
rg -n "command_error|CommandExt|CommandError" config/ast-grep/rules -S || true

echo
echo '--- any tests or docs for this rule ---'
rg -n "command-requires-command-error|command_error" . -S || true

Repository: edge-toolkit/core

Length of output: 3153


Match CommandExt, not just any command_error import. A file like use command_error::CommandError; should not satisfy this rule; only use command_error::CommandExt as _; actually puts the checked methods in scope.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@config/ast-grep/rules/command-requires-command-error.yaml` around lines 18 -
20, Update the use_declaration matcher in command-requires-command-error to
require the CommandExt import specifically, including the
command_error::CommandExt as _ form, rather than matching any import containing
command_error. Ensure imports such as command_error::CommandError do not satisfy
the rule.

Comment on lines +20 to +25
# ...and which starts a doc block (is not preceded by another `///` doc line).
- not:
follows:
kind: line_comment
regex: "^///($|[^/])"
stopBy: neighbor

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

sed -n '1,220p' config/ast-grep/rules/doc-summary-ends-with-period.yaml

Repository: edge-toolkit/core

Length of output: 2064


Empty /// lines still bypass the summary check.
follows treats a blank /// as a preceding doc line, so /// + ///Summary without punctuation skips the first-line punctuation rule. Narrow the guard to visible doc lines only.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@config/ast-grep/rules/doc-summary-ends-with-period.yaml` around lines 20 -
25, Update the follows guard in the doc-summary rule so only preceding /// lines
containing visible content are treated as doc lines; exclude an empty /// line
while preserving the existing handling for non-empty doc comments.

Comment on lines +3 to +4
//! `generate_zig` probes for the `openapi2zig` binary via [`zig::is_available`] and quietly skips Zig REST-client
//! generation when it is absent (upstream ships no linux/arm64 release, so that lane always takes this path). We

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Correct the skip-path description.

generate_zig() emits an eprintln! notice on this branch, so it does not skip "quietly"; Line 17 already describes this correctly.

Proposed fix
-//! generation when it is absent (upstream ships no linux/arm64 release, so that lane always takes this path). We
+//! generation when it is absent after printing a notice (upstream ships no linux/arm64 release, so that lane
+//! always takes this path). We
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
//! `generate_zig` probes for the `openapi2zig` binary via [`zig::is_available`] and quietly skips Zig REST-client
//! generation when it is absent (upstream ships no linux/arm64 release, so that lane always takes this path). We
//! `generate_zig` probes for the `openapi2zig` binary via [`zig::is_available`] and quietly skips Zig REST-client
//! generation when it is absent after printing a notice (upstream ships no linux/arm64 release, so that lane
//! always takes this path). We
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@utilities/int-gen/tests/generate_zig.rs` around lines 3 - 4, Update the
module-level documentation describing the absent-Zig behavior near generate_zig
so it no longer calls the skip quiet. Keep the description consistent with
generate_zig’s eprintln! notice and the existing wording around line 17.

@jayvdb
jayvdb requested a review from pierre-tenedero July 21, 2026 03:38
@coderabbitai coderabbitai Bot mentioned this pull request Jul 21, 2026
@jayvdb
jayvdb merged commit f2b4c0e into main Jul 21, 2026
34 of 36 checks passed
@jayvdb
jayvdb deleted the openapi2zig-0.4 branch July 21, 2026 04:11
This was referenced Jul 21, 2026
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