Skip to content

chore(build): refresh harness and dependency floor#62

Merged
amery merged 5 commits into
mainfrom
pr-amery-build
May 19, 2026
Merged

chore(build): refresh harness and dependency floor#62
amery merged 5 commits into
mainfrom
pr-amery-build

Conversation

@amery
Copy link
Copy Markdown
Collaborator

@amery amery commented May 19, 2026

Summary

Refresh the build harness from darvaza.org/core after drift, raise
the toolchain and dependency floors, and apply the source-side
adjustments the new revive tier asks for.

Toolchain and dependency floor

  • Go directive: 1.23.0 → 1.24.0 in pkg/nanorpc/go.mod and
    pkg/generator/go.mod. pkg/nanopb carries no darvaza dependency
    and is unchanged.
  • golangci-lint: v2.3.0 (single tier) → v2.8.0 (Go 1.24) /
    v2.11.4 (Go 1.25+).
  • revive: v1.7 (single tier) → v1.14.0 (Go 1.24) / v1.15.0
    (Go 1.25+). The Makefile selects the tier-aware config via
    REVIVE_CONF_FILE, matching the pattern used in darvaza.org/x.
  • darvaza dependencies: core v0.18.5 → v0.19.0, slog v0.8.1 → v0.9.0, slog/handlers/discard v0.6.2 → v0.7.0,
    x/config v0.5.0 → v0.6.0, x/container v0.3.1 → v0.4.0,
    x/fs v0.5.2 → v0.6.0, x/net v0.6.2 → v0.7.0,
    x/sync v0.3.0 → v0.4.0. Transitive
    golang.org/x/{crypto,net,sys,text} pulled forward to match.

See chore(deps): bump darvaza.org/x, slog, and core to latest
releases
.

Build harness and CI workflows

Drift correction on Makefile and internal/build/. Substantive
changes:

  • pnpx is deprecated. The Makefile now resolves a DLX variable
    to pnpm dlx, with a true fallback when pnpm is absent. All
    four pnpx callsites (markdownlint, languagetool, cspell,
    shellcheck) follow.
  • .tmp joins the find-prune list.
  • fix_whitespace.sh strips a UTF-8 BOM and trailing blank lines
    via new get_bytes / quote_arg / filter_file helpers.
  • make_codecov.sh writes through a ~ sidecar and renames only
    when content changes, preserving codecov.sh's mtime so make's
    prerequisite tracking stays stable.
  • markdownlint: code-block line length raised to 120; MD060
    enabled.
  • gen_mk.sh: .PHONY: merge-coverage typo corrected to
    merged-coverage.
  • The codecov target's recipe drops its inline make_codecov.sh
    call; the script is produced solely through the
    $(COVERAGE_DIR)/codecov.sh prerequisite chain.

For revive, pkg/nanorpc/utils trips the default bad-name list. A
rename is outside scope. The new internal/build/revive.toml
(v1.15+) enables only package-naming.skipDefaultBadNameCheck. The
new internal/build/revive-v1.14.toml (Go 1.24 tier) expresses the
same intent via var-naming's skipPackageNameChecks option, since
package-naming did not exist as a separate rule until v1.15.0.
Convention, top-level, and stdlib-collision checks stay active in
both tiers.

The only retained nanorpc-local divergences from core are
gen_index.sh's GROUPS=pkg and cspell.json's project
vocabulary.

The GitHub Actions workflows under .github/workflows/ pick up
the matching drift correction from darvaza.org/x:

  • A top-level permissions: contents: read block on every
    workflow, locking the default GITHUB_TOKEN to read-only.
  • actions/checkout pinned to v6 across all five workflows;
    actions/setup-node to v6 in renovate.yml.
  • The Go matrix shifts to ['1.24', '1.25', '1.26'] in
    build.yml and test.yml; codecov.yml and race.yml move
    their single-version pin to '1.26'.
  • build.yml's matrix variable is renamed from go to
    go-version for consistency with test.yml.

See chore(build): sync build harness and CI workflows and
build(mk): force -count=1 on the generated test target.

cspell config

  • Drop the .vscode/cspell.json symlink. Point the cSpell VS Code
    extension at internal/build/cspell.json via the cSpell.import
    setting. Single canonical wordlist on disk.
  • Prefix every ignorePaths entry with **/ so the patterns
    recurse into subdirectories. The bare basename nanopb.pb.go
    failed to match pkg/nanopb/nanopb.pb.go under cspell 10, leaking
    32 false positives. Widen the entry to **/*.pb.go.
  • Drop the leading $schema URL; it was the sole non-data line.

See refactor(cspell): drop vscode symlink and broaden ignore
globs
.

Source-side adjustments

Triggered by the new revive tier:

  • Explicit default: clauses on the switches in
    ResponseError.String, HashCache.computeHash, and
    Session.Send, each with a one-line comment naming what is kept
    instead of handled.
  • Arg-less t.Fatalf becomes t.Fatal in the protocol and
    request-handler tests (the correct form when there is no format
    string to apply).

No behaviour change.

See refactor: make switch no-ops explicit; t.Fatal where unused.

Notes for reviewers

  • make test re-executes every package every run; -count=1 is
    forced through gen_mk.sh so a cached pass from a previous run
    cannot mask a regression. GOTEST_FLAGS is unchanged, so callers
    can still layer -race, -run, or -v on top.
  • The revive tier-aware config pattern lives in two files
    (revive.toml for v1.15+, revive-v1.14.toml for the Go 1.24
    tier). Both files exist permanently; the Makefile picks the right
    one for the active Go version.

Test plan

  • make is green — tidy across all four modules, cspell,
    shellcheck, build.
  • make test is green across generator, nanopb, and
    nanorpc.
  • revive runs clean under the Go 1.24 tier
    (revive-v1.14.toml).
  • revive runs clean under the Go 1.25+ tier (revive.toml).
  • CI on the published branch passes against the new toolchain
    floor.

Summary by CodeRabbit

  • Chores
    • Updated Go toolchain to 1.24 and bumped related module/tool versions
    • Enhanced linting/formatting configs (Revive, markdownlint, LanguageTool, cSpell) and moved spellchecker config
    • Reworked Makefile/tool bootstrap to use a DLX helper and extended file pruning
    • Improved build scripts: whitespace fixer, codecov script generation, and generated Makefile tweaks
    • Updated CI workflows and action versions, expanding tested Go versions and permissions

Review Change Stack

amery added 4 commits May 14, 2026 16:02
Pull the workspace-resident upstreams forward to their latest tagged
versions:

- darvaza.org/core v0.18.5 -> v0.19.0
- darvaza.org/slog v0.8.1 -> v0.9.0
- darvaza.org/slog/handlers/discard v0.6.2 -> v0.7.0
- darvaza.org/x/config v0.5.0 -> v0.6.0
- darvaza.org/x/container v0.3.1 -> v0.4.0
- darvaza.org/x/fs v0.5.2 -> v0.6.0
- darvaza.org/x/net v0.6.2 -> v0.7.0
- darvaza.org/x/sync v0.3.0 -> v0.4.0

Transitive: golang.org/x/{crypto,net,sys,text} pulled forward to match
the new floor. pkg/nanopb carries no darvaza dependency and is unchanged.

Signed-off-by: Alejandro Mery <amery@apptly.co>
Two clean-ups on the cspell configuration:

- Remove the .vscode/cspell.json symlink and point the cSpell VSCode
  extension at internal/build/cspell.json via the cSpell.import setting
  in .vscode/settings.json. Keeps a single canonical wordlist on disk
  and removes the need for a symlinked duplicate.
- Prefix every internal/build/cspell.json ignorePaths entry with
  `**/` so the patterns recurse into subdirectories. The bare basename
  `nanopb.pb.go` failed to match `pkg/nanopb/nanopb.pb.go` under
  cspell 10, leaking 32 false positives from the generated protobuf
  file. Widen the entry to `**/*.pb.go` while we're here.
- Drop the leading `$schema` URL; the value is informational only and
  was the sole non-data line in the file.

Signed-off-by: Alejandro Mery <amery@apptly.co>
A `default:` clause makes a switch's no-match handling visible
instead of leaving the reader to guess whether the omission was
deliberate. Add explicit defaults — each with a one-line comment
naming what is kept instead of handled — to the switches in
ResponseError.String, HashCache.computeHash, and Session.Send.

The arg-less t.Fatalf calls in the protocol and request-handler
tests become t.Fatal, the correct form when there is no format
string to apply. No behaviour change.

Signed-off-by: Alejandro Mery <amery@apptly.co>
Pass -count=1 to `go test` from the per-module `test-<name>` recipe
emitted by gen_mk.sh so the cached pass from a previous run cannot
mask a regression. Every `make test` now re-executes the package
tests rather than reprinting `(cached)`.

GOTEST_FLAGS is unchanged, so callers can still layer -race, -run,
or -v on top from the command line.

Signed-off-by: Alejandro Mery <amery@apptly.co>
@amery amery added enhancement New feature or request Review effort 3/5 labels May 19, 2026
@codecov
Copy link
Copy Markdown

codecov Bot commented May 19, 2026

Codecov Report

❌ Patch coverage is 33.33333% with 2 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
pkg/nanorpc/client/session.go 0.00% 1 Missing ⚠️
pkg/nanorpc/hashcache.go 0.00% 1 Missing ⚠️

📢 Thoughts on this report? Let us know!

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 19, 2026

📝 Walkthrough

Walkthrough

Upgrades build/tooling to Go 1.24, centralizes and tightens lint/spellcheck configs, refactors CLI tool invocation to DLX, improves whitespace tooling, updates module dependencies, adjusts CI workflow versions/permissions, and adds explicit default branches and test assertion simplifications.

Changes

Build System & Code Quality Modernization

Layer / File(s) Summary
Build Tool Configuration & Wiring
Makefile, internal/build/gen_mk.sh, internal/build/make_codecov.sh
Makefile uses get_version.sh to select Go 1.24 tooling and introduces DLX for pnpm dlx fallback; pruning rules updated and codecov now depends on generated $(COVERAGE_DIR)/codecov.sh. gen_mk.sh emits go ... -count=1 for the up target and fixes .PHONY naming. make_codecov.sh writes to temp and atomically replaces output only when changed.
Linting & Code Quality Rules Configuration
.vscode/settings.json, internal/build/cspell.json, internal/build/markdownlint.json, internal/build/revive.toml, internal/build/revive-v1.14.toml, internal/build/languagetool.cfg
VS Code settings import centralized internal/build/cspell.json. internal/build/cspell.json expands ignore patterns to recursive globs. Markdownlint raises MD013 code block length to 120 and enables MD060. Revive configs added/annotated for v1.14/Go 1.24 and package-naming behavior adjusted. Languagetool comment updated.
File Processing Utilities Enhancement
internal/build/fix_whitespace.sh
Adds get_bytes, quote_arg, filter_file helpers; refactors fix_file to remove optional BOM, trim trailing whitespace, truncate trailing empty lines, and ensure exactly one trailing newline; run_find uses the new quoting helper.
Go Module Dependency Updates
pkg/generator/go.mod, pkg/nanorpc/go.mod
Module go directives bumped to 1.24.0 and several direct/indirect dependencies updated (notably darvaza.org/* and golang.org/x/*).
Code Path Clarifications & Test Improvements
pkg/nanorpc/client/session.go, pkg/nanorpc/errors.go, pkg/nanorpc/hashcache.go, pkg/nanorpc/nanorpc_protocol_test.go, pkg/nanorpc/server/handler_request_test.go
Added explicit default cases to switches in Session.Send, ResponseError.String(), and HashCache.computeHash for clarity; tests replace formatted t.Fatalf with t.Fatal in failure branches.
CI Workflow Updates
.github/workflows/*
Multiple workflows add permissions.contents: read, bump actions/checkout to v6, and update Go versions in job matrices and setup steps (1.24–1.26 or 1.26 where applicable).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested labels

Review effort 4/5

Poem

"I nibble through diffs, a small white spark,
Upgraded Go versions guide my park,
DLX hums softly, linters align,
Whitespace trimmed—each file ends fine. 🐇✨"

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely summarizes the main changes: a build system refresh and updating of dependency version requirements. It aligns with the PR's primary objectives of refreshing the build harness and raising toolchain/dependency floors.
Docstring Coverage ✅ Passed Docstring coverage is 85.71% 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.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ 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 pr-amery-build

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 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 `@internal/build/fix_whitespace.sh`:
- Around line 53-56: The use of "chmod --reference" (in the tmp/file replacement
block around tmp, file) is GNU-only and breaks on macOS/BSD; replace it with a
portable fallback: attempt "chmod --reference" first, and if it fails, read the
original file's mode using a portable stat fallback (try "stat -c %a" for GNU,
"stat -f %Lp" for BSD/macOS) into a variable and then call "chmod $mode $tmp"
before mv "$tmp" "$file"; keep references to the existing tmp and file variables
and ensure the fallback path only runs when the --reference invocation fails.

In `@Makefile`:
- Line 60: The prune rule is hardcoding ".tmp" in the FIND_FILES_PRUNE_RULES
variable; change it to reference the TMPDIR make variable so the rule follows
any overridden TMPDIR (e.g., replace occurrences of ".tmp" with $(TMPDIR) or
$${TMPDIR} as appropriate), and ensure TMPDIR has a sensible default earlier in
the Makefile if not already defined; update the FIND_FILES_PRUNE_RULES
definition that currently contains ".tmp" so it uses the TMPDIR symbol instead.
🪄 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

Run ID: 90c7e4d3-29b7-4ac1-b454-fa19310d2406

📥 Commits

Reviewing files that changed from the base of the PR and between 62f5acb and ff53944.

⛔ Files ignored due to path filters (2)
  • pkg/generator/go.sum is excluded by !**/*.sum
  • pkg/nanorpc/go.sum is excluded by !**/*.sum
📒 Files selected for processing (18)
  • .vscode/cspell.json
  • .vscode/settings.json
  • Makefile
  • internal/build/cspell.json
  • internal/build/fix_whitespace.sh
  • internal/build/gen_mk.sh
  • internal/build/languagetool.cfg
  • internal/build/make_codecov.sh
  • internal/build/markdownlint.json
  • internal/build/revive-v1.14.toml
  • internal/build/revive.toml
  • pkg/generator/go.mod
  • pkg/nanorpc/client/session.go
  • pkg/nanorpc/errors.go
  • pkg/nanorpc/go.mod
  • pkg/nanorpc/hashcache.go
  • pkg/nanorpc/nanorpc_protocol_test.go
  • pkg/nanorpc/server/handler_request_test.go
💤 Files with no reviewable changes (1)
  • .vscode/cspell.json

Comment thread internal/build/fix_whitespace.sh
Comment thread Makefile
endif

FIND_FILES_PRUNE_RULES ?= -name vendor -o -name .git -o -name node_modules
FIND_FILES_PRUNE_RULES ?= -name vendor -o -name .git -o -name node_modules -o -name .tmp
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Tie prune rules to TMPDIR instead of hardcoding .tmp.

Line 60 hardcodes .tmp, so overriding TMPDIR to another in-repo directory can cause temp artifacts to be linted/formatted unexpectedly.

Suggested patch
+TMPDIR_BASENAME ?= $(notdir $(TMPDIR))
-FIND_FILES_PRUNE_RULES ?= -name vendor -o -name .git -o -name node_modules -o -name .tmp
+FIND_FILES_PRUNE_RULES ?= -name vendor -o -name .git -o -name node_modules -o -name $(TMPDIR_BASENAME)
🤖 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 `@Makefile` at line 60, The prune rule is hardcoding ".tmp" in the
FIND_FILES_PRUNE_RULES variable; change it to reference the TMPDIR make variable
so the rule follows any overridden TMPDIR (e.g., replace occurrences of ".tmp"
with $(TMPDIR) or $${TMPDIR} as appropriate), and ensure TMPDIR has a sensible
default earlier in the Makefile if not already defined; update the
FIND_FILES_PRUNE_RULES definition that currently contains ".tmp" so it uses the
TMPDIR symbol instead.

The top-level Makefile and the scripts under internal/build/ are
shared across the darvaza.org and protomcp.org repos. The nanorpc
copy had drifted; this brings it back into line with core.

Toolchain pins move to tier-aware versions:

- golangci-lint: v2.8.0 (Go 1.24) / v2.11.4 (Go 1.25+)
- revive: v1.14.0 (Go 1.24) / v1.15.0 (Go 1.25+)

Other substantive changes:

- `pnpx` gives way to `pnpm dlx` throughout (pnpx is
  deprecated); DLX falls back to `true` when pnpm is absent
- `.tmp` joins the find-prune list
- fix_whitespace.sh strips a UTF-8 BOM and trailing blank
  lines, via new get_bytes/quote_arg/filter_file helpers
- make_codecov.sh writes through a `~` sidecar and renames
  only when content changes, preserving codecov.sh's mtime
- markdownlint code-block line length is raised to 120; MD060
  is enabled
- gen_mk.sh fixes a `.PHONY` typo (merge-coverage →
  merged-coverage)
- the codecov target's recipe loses its inline
  make_codecov.sh call; the script is produced solely through
  the `$(COVERAGE_DIR)/codecov.sh` prerequisite

For revive, `pkg/nanorpc/utils` trips the default bad-name list.
A rename sits outside this commit's scope, so revive.toml's
`[rule.package-naming]` enables only `skipDefaultBadNameCheck`;
convention, top-level, and stdlib-collision checks stay active.
The new internal/build/revive-v1.14.toml expresses the same
intent for the Go 1.24 tier through `var-naming`'s
`skipPackageNameChecks` option, since `package-naming` did not
exist as a separate rule until v1.15.0. The Makefile selects
between the two configs via `REVIVE_CONF_FILE`, matching the
pattern used by darvaza.org/x.

The GitHub Actions workflows under .github/workflows/ pick up
the matching drift correction from darvaza.org/x:

- A top-level `permissions: contents: read` block on every
  workflow, locking the default GITHUB_TOKEN to read-only.
- actions/checkout pinned to v6 across all five workflows;
  actions/setup-node to v6 in renovate.yml.
- The Go matrix shifts to ['1.24', '1.25', '1.26'] in
  build.yml and test.yml; codecov.yml and race.yml move their
  single-version pin to '1.26'.
- build.yml's matrix variable is renamed from `go` to
  `go-version` for consistency with test.yml.

The only retained nanorpc-local divergences from core are
gen_index.sh's `GROUPS=pkg` and cspell.json's project
vocabulary.

Signed-off-by: Alejandro Mery <amery@apptly.co>
@amery amery force-pushed the pr-amery-build branch from ff53944 to fd15b51 Compare May 19, 2026 17:43
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 5

🤖 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 @.github/workflows/build.yml:
- Around line 21-22: Update the GitHub Actions steps that use actions/checkout
and actions/setup-go to pin to specific commit SHAs instead of tags (replace
uses: actions/checkout@v6 and uses: actions/setup-go@v6 with the corresponding
full SHA references) and add persist-credentials: false to the checkout step to
disable credential persistence; ensure the checkout step includes the
persist-credentials: false field and the setup-go step uses the exact commit SHA
for the referenced action.

In @.github/workflows/codecov.yml:
- Around line 18-21: Replace mutable action tags actions/checkout@v6 and
actions/setup-go@v6 with their corresponding pinned commit SHAs and disable
checkout credential persistence: update the checkout step (referenced by
actions/checkout@v6) to include persist-credentials: false and pin to the
checkout action's digest SHA, and pin the setup-go step (actions/setup-go@v6) to
its digest SHA as well so the workflow no longer relies on mutable tags and the
CODECOV_TOKEN is not persisted in the runner credentials.

In @.github/workflows/race.yml:
- Around line 18-21: Update the workflow to harden the two actions: replace the
actions/checkout@v6 reference with the full 40-character commit SHA and add the
checkout step input persist-credentials: false (since no authenticated Git
operations are needed), and replace actions/setup-go@v6 with its full
40-character commit SHA as well; ensure both action uses keep the same step
names (actions/checkout and actions/setup-go) so reviewers can easily locate and
verify the pinned SHAs and the persist-credentials setting.

In @.github/workflows/renovate.yml:
- Around line 20-21: Replace the mutable action pins with immutable commit SHAs
and disable persisted checkout credentials: update the uses entries for
actions/checkout and actions/setup-node (the two lines using actions/checkout@v6
and actions/setup-node@v6) to use their full commit SHA refs, and add
persist-credentials: false under the actions/checkout step so the checkout does
not retain authentication tokens.

In @.github/workflows/test.yml:
- Around line 21-24: Replace the mutable action pins for actions/checkout@v6 and
actions/setup-go@v6 with their corresponding full commit SHAs and add
persist-credentials: false to the checkout step; locate the checkout step (uses:
actions/checkout) and update it to include persist-credentials: false, and
replace both uses: actions/checkout@v6 and uses: actions/setup-go@v6 with the
exact commit SHAs (from the actions repositories) to ensure immutability and
supply-chain safety.
🪄 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

Run ID: 37a83671-d6e1-4498-ba8a-0faf6b168f40

📥 Commits

Reviewing files that changed from the base of the PR and between ff53944 and fd15b51.

📒 Files selected for processing (13)
  • .github/workflows/build.yml
  • .github/workflows/codecov.yml
  • .github/workflows/race.yml
  • .github/workflows/renovate.yml
  • .github/workflows/test.yml
  • Makefile
  • internal/build/fix_whitespace.sh
  • internal/build/gen_mk.sh
  • internal/build/languagetool.cfg
  • internal/build/make_codecov.sh
  • internal/build/markdownlint.json
  • internal/build/revive-v1.14.toml
  • internal/build/revive.toml
✅ Files skipped from review due to trivial changes (3)
  • internal/build/languagetool.cfg
  • internal/build/revive-v1.14.toml
  • internal/build/markdownlint.json
🚧 Files skipped from review as they are similar to previous changes (4)
  • internal/build/revive.toml
  • internal/build/make_codecov.sh
  • internal/build/gen_mk.sh
  • internal/build/fix_whitespace.sh

Comment thread .github/workflows/build.yml
Comment thread .github/workflows/codecov.yml
Comment thread .github/workflows/race.yml
Comment thread .github/workflows/renovate.yml
Comment thread .github/workflows/test.yml
@amery amery merged commit 27b5f8a into main May 19, 2026
16 of 17 checks passed
@amery amery deleted the pr-amery-build branch May 19, 2026 18:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request Review effort 3/5

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant