Skip to content

Expand release platforms to Linux and Windows ARM - #99

Merged
tonythethompson merged 8 commits into
masterfrom
cursor/expand-arm-platforms-689b
Aug 7, 2026
Merged

Expand release platforms to Linux and Windows ARM#99
tonythethompson merged 8 commits into
masterfrom
cursor/expand-arm-platforms-689b

Conversation

@tonythethompson

@tonythethompson tonythethompson commented Aug 7, 2026

Copy link
Copy Markdown
Collaborator

Summary

Adds Linux aarch64 and Windows ARM64 GitHub Release archives, wires them into numan update --self, then extends Homebrew and winget so those channels consume the new assets on the next tagged release.

Changes

Release + self-update

  • Release matrix: ubuntu-24.04-armaarch64-unknown-linux-gnu; windows-11-armaarch64-pc-windows-msvc
  • release_asset_name match arms + tests for both triples
  • README / RELEASING / PACKAGING / CHANGELOG updates

Homebrew

  • Formula renderer requires aarch64-unknown-linux-gnu and emits on_linux / on_arm
  • --legacy-pre-linux-arm recovers pre-ARM releases via explicit workflow_dispatch only; automated workflow_run publish fails closed if Linux ARM is missing
  • Checked-in packaging/homebrew/numan.rb may lag until the next ARM-enabled tag (documented)
  • Companion tap prep: homebrew-numan#5

winget

  • Verify both Windows x64 and ARM64 zips before publish
  • Tighten installers-regex to Windows MSVC zips only
  • Historical sample manifests stay x64-only (no placeholder ARM digests)

Review status

Copilot’s overview is stale relative to later commits. Already addressed:

  • CHANGELOG “bottle URLs” → “archive support”
  • Historical winget ARM64 placeholders removed
  • Homebrew legacy recovery + README lag docs
  • Windows PowerShell TARGET.zip example
  • CodeRabbit: fail closed on missing Linux ARM for workflow_run (legacy only on workflow_dispatch)

After merge

Tag the next release and confirm five platform archives plus signed SHA256SUMS, then confirm Homebrew and winget publish jobs succeed against that tag.

Test plan

  • Homebrew formula unit tests
  • self_update asset-name tests / clippy / fmt
  • Review feedback addressed
Open in Web Open in Cursor 

Review in cubic

Ship aarch64-unknown-linux-gnu and aarch64-pc-windows-msvc from
native ARM runners, map them in update --self, and teach Homebrew
and winget to consume the new archives on the next tagged release.

Co-authored-by: Anthony Thompson <github@trackdub.com>
@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The release matrix now builds Linux and Windows ARM64 artifacts. Self-update, Homebrew, WinGet, release workflows, manifests, and documentation now reference the new archives.

Changes

ARM64 release support

Layer / File(s) Summary
Release targets and self-update
.github/workflows/release.yml, src/cmd/self_update.rs
The release matrix adds Linux and Windows ARM64 builds. Self-update maps both targets to their archive names and tests both mappings.
Homebrew Linux ARM integration
.github/workflows/homebrew.yml, scripts/render_homebrew_formula.py, scripts/test_render_homebrew_formula.py, packaging/homebrew/*
Homebrew validation, checksum parsing, formula rendering, legacy handling, documentation, and tests now cover the Linux ARM64 archive.
WinGet ARM64 packaging
.github/workflows/winget.yml, packaging/winget/manifests/...
WinGet validates x64 and ARM64 Windows ZIP assets. Historical manifests scope nested executable definitions to x64 installers.
Release and installation documentation
CHANGELOG.md, README.md, docs/PACKAGING.md, docs/RELEASING.md
Release archives, installation coverage, package support, and release verification instructions now include Linux and Windows ARM64 targets.

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

Possibly related PRs

Suggested reviewers: greptile-apps

🚥 Pre-merge checks | ✅ 7 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 36.84% which is insufficient. The required threshold is 60.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (7 passed)
Check name Status Explanation
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.
Pipeline Stage Enum Ordering ✅ Passed The PR changes 15 files, but neither the patch nor the final tree contains SessionWorkflowStage or any listed stage member; the ordering check is not applicable.
Gpu/Cpu Runtime Boundary ✅ Passed The PR changes 16 workflow, documentation, packaging, Python script, and Rust files; no inference/, requirements, main.py, or C# boundary files are modified.
Managed Host Restart Safety ✅ Passed The PR changes release workflows, packaging/docs, Homebrew rendering, and self-update only; no managed-host component or restart/readiness path is modified.
Title check ✅ Passed The title clearly summarizes the primary change: adding Linux and Windows ARM release platforms.
Description check ✅ Passed The description directly explains the ARM release, self-update, Homebrew, and winget changes.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch cursor/expand-arm-platforms-689b
✨ Simplify code
  • Create PR with simplified code
  • Commit simplified code in branch cursor/expand-arm-platforms-689b

Warning

Review ran into problems

🔥 Problems

Linked repositories: Public OSS repositories can only analyze public repositories installed in this organization. Analyzed tonythethompson/QuickShell, tonythethompson/numan, tonythethompson/dependency-chain-substrate, skipped Trackdubllc/Trackdub.


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.

@tonythethompson
tonythethompson marked this pull request as ready for review August 7, 2026 10:53
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Sorry @tonythethompson, you have reached your weekly rate limit of 500000 diff characters.

Please try again later or upgrade to continue using Sourcery

Resolve Homebrew formula test conflict by keeping Linux aarch64
assertions with the staged-archive bin.install "numan" checks.

Co-authored-by: Anthony Thompson <github@trackdub.com>
@qodo-code-review

Copy link
Copy Markdown
Contributor

PR Summary by Qodo

Expand release builds and packaging to Linux and Windows ARM64

✨ Enhancement ⚙️ Configuration changes 📝 Documentation 🧪 Tests 🕐 40+ Minutes

Grey Divider

AI Description

• Add Linux aarch64 and Windows ARM64 targets to GitHub Release build matrix.
• Teach numan update --self to select ARM64 release assets with new unit tests.
• Extend Homebrew and winget publishing/verification to consume the new archives.
Diagram

graph TD
  A["release.yml"] --> B["GitHub Release assets"] --> C["self_update.rs"]
  B --> D["homebrew.yml"] --> E["render_homebrew_formula.py"]
  B --> F["winget.yml"] --> G["winget manifests"]
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Cross-compile ARM64 on x86_64 runners (e.g., cross/QEMU)
  • ➕ Avoids reliance on native ARM GitHub runners
  • ➕ Potentially reduces matrix variability and runner availability issues
  • ➖ More build complexity and longer CI times
  • ➖ Higher risk of subtle toolchain/linker differences vs native builds
2. Centralize target/triple list in one shared file used by workflows and tools
  • ➕ Reduces chance of drift between release.yml, self-update mapping, and packaging scripts
  • ➖ Requires additional plumbing (parsing/templating) across Rust, Python, and YAML
  • ➖ May be overkill for a small set of supported targets

Recommendation: The PR’s approach (native ARM runners + explicit triple mappings in self-update and packaging) is the lowest-risk path for correct artifacts and predictable downstream consumption. Consider centralizing the supported-target list later if additional platforms are added and duplication becomes a maintenance burden.

Files changed (15) +137 / -29

Enhancement (2) +39 / -2
render_homebrew_formula.pyRender Homebrew formula with Linux ARM block and digest parsing +7/-1

Render Homebrew formula with Linux ARM block and digest parsing

• Adds 'aarch64-unknown-linux-gnu' to the required assets and SHA256SUMS parsing regex. Emits an 'on_linux' + 'on_arm' stanza with URL and sha256 for Linux ARM64.

scripts/render_homebrew_formula.py

self_update.rsMap Linux/Windows ARM64 triples to release asset names and test +32/-1

Map Linux/Windows ARM64 triples to release asset names and test

• Extends the platform triple→asset mapping to include 'aarch64-unknown-linux-gnu' and 'aarch64-pc-windows-msvc', and updates the unsupported-platform error message accordingly. Adds unit tests covering the new ARM64 mappings.

src/cmd/self_update.rs

Tests (1) +19 / -0
test_render_homebrew_formula.pyExpand formula renderer tests for Linux ARM support +19/-0

Expand formula renderer tests for Linux ARM support

• Extends parsing, rendering, and CLI tests to include Linux ARM64 entries and ensure the formula contains the expected URL and sha256 digest.

scripts/test_render_homebrew_formula.py

Documentation (9) +63 / -19
CHANGELOG.mdDocument new ARM64 release assets and packaging support +5/-0

Document new ARM64 release assets and packaging support

• Adds an Unreleased entry describing new Linux/Windows ARM64 archives, updated self-update mapping, and Homebrew/winget channel updates.

CHANGELOG.md

README.mdList Linux aarch64 and Windows ARM64 release archives +2/-0

List Linux aarch64 and Windows ARM64 release archives

• Expands the platform download table to include the new ARM64 Linux and Windows archive names and binaries.

README.md

PACKAGING.mdUpdate installation coverage table for ARM64 platforms +6/-6

Update installation coverage table for ARM64 platforms

• Reworks the coverage matrix to include Linux aarch64 and Windows ARM64 across GitHub Releases, Homebrew, and winget channels.

docs/PACKAGING.md

RELEASING.mdUpdate release verification checklist to include ARM64 archives +1/-1

Update release verification checklist to include ARM64 archives

• Updates the post-tag checklist to explicitly confirm all five platform archives plus 'SHA256SUMS' and signature are present.

docs/RELEASING.md

README.mdRequire Linux aarch64 asset for Homebrew packaging +1/-0

Require Linux aarch64 asset for Homebrew packaging

• Adds the Linux ARM64 tarball to the list of required release assets for the Homebrew tap workflow.

packaging/homebrew/README.md

tonythethompson.Numan.installer.yamlDocument dual-arch winget nested installer layout (0.1.3) +12/-3

Document dual-arch winget nested installer layout (0.1.3)

• Updates the sample manifest to define per-architecture 'NestedInstallerFiles' and adds an ARM64 installer entry with a placeholder digest.

packaging/winget/manifests/t/tonythethompson/Numan/0.1.3/tonythethompson.Numan.installer.yaml

tonythethompson.Numan.installer.yamlDocument dual-arch winget nested installer layout (0.1.4) +12/-3

Document dual-arch winget nested installer layout (0.1.4)

• Mirrors the 0.1.3 sample manifest changes for version 0.1.4, including ARM64 installer entry and nested file paths.

packaging/winget/manifests/t/tonythethompson/Numan/0.1.4/tonythethompson.Numan.installer.yaml

tonythethompson.numan.installer.yamlDocument dual-arch winget nested installer layout (lowercase id, 0.1.3) +12/-3

Document dual-arch winget nested installer layout (lowercase id, 0.1.3)

• Adds explicit x64 + arm64 'NestedInstallerFiles' sections and a second installer entry for ARM64 to demonstrate the expected archive layout.

packaging/winget/manifests/t/tonythethompson/numan/0.1.3/tonythethompson.numan.installer.yaml

tonythethompson.numan.installer.yamlDocument dual-arch winget nested installer layout (lowercase id, 0.1.4) +12/-3

Document dual-arch winget nested installer layout (lowercase id, 0.1.4)

• Applies the same dual-architecture manifest structure updates for the 0.1.4 sample manifest.

packaging/winget/manifests/t/tonythethompson/numan/0.1.4/tonythethompson.numan.installer.yaml

Other (3) +16 / -8
homebrew.ymlVerify Linux ARM release assets before Homebrew publish +1/-1

Verify Linux ARM release assets before Homebrew publish

• Extends the asset verification loop to require the 'aarch64-unknown-linux-gnu' archive in addition to existing targets. This prevents publishing a Homebrew formula that references missing ARM Linux assets.

.github/workflows/homebrew.yml

release.ymlAdd Linux and Windows ARM64 targets to release matrix +6/-0

Add Linux and Windows ARM64 targets to release matrix

• Adds native ARM runners for Ubuntu and Windows to build and publish 'aarch64-unknown-linux-gnu' and 'aarch64-pc-windows-msvc' archives as part of tagged releases.

.github/workflows/release.yml

winget.ymlVerify both Windows x64 and ARM64 assets; restrict uploaded installers +9/-7

Verify both Windows x64 and ARM64 assets; restrict uploaded installers

• Validates that both x64 and ARM64 Windows zip assets exist for a release before publishing. Tightens 'installers-regex' so winget-releaser only consumes '-(x86_64|aarch64)-pc-windows-msvc.zip' artifacts.

.github/workflows/winget.yml

@greptile-apps

greptile-apps Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

The PR expands release and package-manager support to native Linux and Windows ARM builds.

  • Adds Linux aarch64 and Windows ARM64 release jobs and self-update asset mappings.
  • Extends Homebrew rendering with Linux ARM support and an explicit legacy mode.
  • Updates WinGet publishing to consume both Windows architectures.
  • Refreshes packaging documentation and historical manifest structure.

Confidence Score: 5/5

The PR appears safe to merge.

No blocking failure remains.

Important Files Changed

Filename Overview
.github/workflows/release.yml Adds native Linux and Windows ARM build targets using archive names consistent with downstream consumers.
src/cmd/self_update.rs Maps the new ARM platform triples to their corresponding signed release archives and adds focused tests.
scripts/render_homebrew_formula.py Requires Linux ARM for current formulas while retaining an explicit two-asset legacy rendering mode.
.github/workflows/homebrew.yml Publishes ARM-aware formulas and fails closed on automated releases missing the Linux ARM archive.
.github/workflows/winget.yml Verifies both Windows architectures and limits the releaser to Windows MSVC archives.
scripts/test_render_homebrew_formula.py Covers current and legacy digest parsing, formula rendering, and CLI output paths.
packaging/winget/manifests/t/tonythethompson/numan/0.1.4/tonythethompson.numan.installer.yaml Scopes the historical x64 nested executable metadata to its installer entry without adding nonexistent ARM64 artifacts.

Reviews (6): Last reviewed commit: "Fail closed when Linux ARM archive missi..." | Re-trigger Greptile

greptile-apps[bot]
greptile-apps Bot previously approved these changes Aug 7, 2026
@qodo-code-review

qodo-code-review Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 📜 Skill insights (0)

Grey Divider


Remediation recommended

1. Stale Homebrew formula ✓ Resolved 🐞 Bug ⚙ Maintainability
Description
scripts/render_homebrew_formula.py now generates an on_linux/on_arm stanza for the new
aarch64-unknown-linux-gnu release asset, but packaging/homebrew/numan.rb still lacks that Linux ARM
URL/sha256 block. This makes the repository’s “canonical” formula inconsistent with the supported
platforms advertised by the renderer/docs, and Linux ARM users relying on the checked-in formula
won’t get the new archive URL.
Code

scripts/render_homebrew_formula.py[R96-99]

+    on_arm do
+      url "https://github.com/tonythethompson/numan/releases/download/v#{{version}}/numan-#{{version}}-aarch64-unknown-linux-gnu.tar.gz"
+      sha256 "{linux_arm}"
+    end
Relevance

●●● Strong

Homebrew changes here usually keep renderer and checked-in formula in sync; platform expansion PR
intent aligns.

PR-#91
PR-#100

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The renderer now includes a Linux ARM on_arm branch (so it expects/usefully supports
aarch64-unknown-linux-gnu), but the checked-in formula file does not include that stanza, despite
being described as the canonical source in the Homebrew packaging README.

scripts/render_homebrew_formula.py[91-100]
packaging/homebrew/numan.rb[30-35]
packaging/homebrew/README.md[1-6]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
`scripts/render_homebrew_formula.py` now renders a Linux ARM stanza (`on_linux` → `on_arm`), but `packaging/homebrew/numan.rb` in this repo still only contains the Linux Intel stanza. The repo’s packaging README calls the checked-in formula canonical, so keeping it out of sync is misleading.

### Issue Context
- The renderer is the source of truth for the tap formula shape going forward.
- The checked-in `packaging/homebrew/numan.rb` should either be updated to match the renderer output (once a release exists that has Linux ARM digests), or documentation should explicitly state that the checked-in formula may lag until the next tagged release updates the digests.

### Fix Focus Areas
- scripts/render_homebrew_formula.py[91-100]
- packaging/homebrew/numan.rb[30-35]
- packaging/homebrew/README.md[1-6]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Context used
✅ Compliance rules (platform): 26 rules
✅ REVIEW.md
Review mode: ⚖️ Balanced: This changes release CI, self-update platform mapping, Homebrew rendering, and winget manifests across multiple independent paths, creating genuine distribution and contract risk, but not enough dense logic to justify redundant extended review.

To customize comments, go to the Qodo configuration screen, or learn more in the docs.

Qodo Logo

Comment thread scripts/render_homebrew_formula.py Outdated
@qodo-code-review

Copy link
Copy Markdown
Contributor

Qodo Fixer

No findings are within the configured fix scope. To change which findings are fixed, adjust the setting on your Qodo configuration page.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

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 `@CHANGELOG.md`:
- Line 13: Update the changelog entry to describe this as “Homebrew Linux ARM
archive support” rather than “Homebrew Linux ARM bottle URLs,” preserving the
existing winget text.

In `@packaging/homebrew/README.md`:
- Line 38: Update the manual dry-run example in the README to use a release that
includes all three Homebrew archives, including
numan-<version>-aarch64-unknown-linux-gnu.tar.gz; alternatively, clearly label
the existing v0.1.5 example as future-only.

In
`@packaging/winget/manifests/t/tonythethompson/Numan/0.1.3/tonythethompson.Numan.installer.yaml`:
- Around line 18-24: Remove the ARM64 installer entries, including their
NestedInstallerFiles, InstallerUrl, placeholder InstallerSha256, and
Architecture fields, from
packaging/winget/manifests/t/tonythethompson/Numan/0.1.3/tonythethompson.Numan.installer.yaml
(18-24),
packaging/winget/manifests/t/tonythethompson/Numan/0.1.4/tonythethompson.Numan.installer.yaml
(18-24),
packaging/winget/manifests/t/tonythethompson/numan/0.1.3/tonythethompson.numan.installer.yaml
(18-24), and
packaging/winget/manifests/t/tonythethompson/numan/0.1.4/tonythethompson.numan.installer.yaml
(18-24); retain the supported installer entries.</code>

In `@README.md`:
- Around line 96-98: Update the Windows PowerShell installation example to use
the architecture-neutral archive pattern numan-VERSION-TARGET.zip instead of
hard-coding x86_64-pc-windows-msvc. Keep the command valid for both
x86_64-pc-windows-msvc and aarch64-pc-windows-msvc targets.

In `@scripts/render_homebrew_formula.py`:
- Around line 25-30: Make the Homebrew release flow backward-compatible with
pre-ARM releases: in scripts/render_homebrew_formula.py at lines 25-30, add an
explicit legacy mode that accepts the historical three-asset contract; in
.github/workflows/homebrew.yml at line 121, avoid requiring the Linux ARM asset
when recovering a pre-ARM release; and in packaging/homebrew/README.md at line
38, replace the v0.1.5 example with an ARM-enabled release or clearly mark it as
future-only.
🪄 Autofix

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: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 740b5231-dc73-42b3-a97f-0c043b28904b

📥 Commits

Reviewing files that changed from the base of the PR and between f1b5720 and 20e49f5.

📒 Files selected for processing (15)
  • .github/workflows/homebrew.yml
  • .github/workflows/release.yml
  • .github/workflows/winget.yml
  • CHANGELOG.md
  • README.md
  • docs/PACKAGING.md
  • docs/RELEASING.md
  • packaging/homebrew/README.md
  • packaging/winget/manifests/t/tonythethompson/Numan/0.1.3/tonythethompson.Numan.installer.yaml
  • packaging/winget/manifests/t/tonythethompson/Numan/0.1.4/tonythethompson.Numan.installer.yaml
  • packaging/winget/manifests/t/tonythethompson/numan/0.1.3/tonythethompson.numan.installer.yaml
  • packaging/winget/manifests/t/tonythethompson/numan/0.1.4/tonythethompson.numan.installer.yaml
  • scripts/render_homebrew_formula.py
  • scripts/test_render_homebrew_formula.py
  • src/cmd/self_update.rs
🔗 Linked repositories identified

CodeRabbit considers these linked repositories for cross-repo context during reviews:

  • tonythethompson/QuickShell (manual)
  • tonythethompson/numan (manual)
  • tonythethompson/dependency-chain-substrate (manual)
📜 Review details
⏰ Context from checks skipped due to timeout. (1)
  • GitHub Check: Greptile Review
🧰 Additional context used
📓 Path-based instructions (11)
!**/.env,!**/credentials.json,!**/*.pem

📄 CodeRabbit inference engine (CLAUDE.md)

Do not commit files that appear to contain secrets, including .env, credentials.json, and PEM files; warn before doing so even if explicitly requested.

Files:

  • .github/workflows/homebrew.yml
  • docs/PACKAGING.md
  • CHANGELOG.md
  • .github/workflows/winget.yml
  • scripts/test_render_homebrew_formula.py
  • packaging/winget/manifests/t/tonythethompson/Numan/0.1.3/tonythethompson.Numan.installer.yaml
  • src/cmd/self_update.rs
  • docs/RELEASING.md
  • packaging/winget/manifests/t/tonythethompson/numan/0.1.3/tonythethompson.numan.installer.yaml
  • packaging/winget/manifests/t/tonythethompson/Numan/0.1.4/tonythethompson.Numan.installer.yaml
  • packaging/homebrew/README.md
  • packaging/winget/manifests/t/tonythethompson/numan/0.1.4/tonythethompson.numan.installer.yaml
  • README.md
  • scripts/render_homebrew_formula.py
  • .github/workflows/release.yml
**/*

📄 CodeRabbit inference engine (CLAUDE.md)

**/*: Use Serena's semantic, symbol-aware tools as the primary tools for reading and editing code; use built-in Read, Glob, Grep, and Edit only under the stated exceptions.
Before editing a code file, inspect its symbol overview, read the specific symbols being changed, and edit them with Serena's symbol-aware tools.
Understand the existing code before changing it and make the smallest change that satisfies the request; avoid unrelated cleanup, premature abstractions, unnecessary error handling, feature flags, and compatibility shims.
Prefer editing existing files over creating new ones, and never create Markdown or README files unless explicitly requested.
For exploratory questions, provide a 2–3 sentence recommendation with the main tradeoff and do not implement until the user agrees.
For UI or frontend changes that cannot be tested in a browser, explicitly state that browser testing was not performed rather than claiming success.
Address security issues when discovered, including injection, XSS, SQL injection, path traversal, and secret leaks.
Pause and obtain confirmation before destructive, hard-to-reverse, externally visible, or third-party-upload actions, including deleting files or branches, dropping tables, force-pushing, modifying CI/CD, posting externally, or uploading content.
When blocked, investigate the root cause instead of bypassing it with --no-verify, --force, or deletion; investigate unfamiliar files, branches, and configuration before deleting them.
Only commit when explicitly asked; do not proactively update git configuration or push changes.
Do not skip Git hooks unless explicitly asked; if a pre-commit hook fails, fix the issue, re-stage, and create a new commit rather than amending.
Stage files by name rather than using git add -A or git add ., to avoid accidentally including secrets or large binaries.
Use a HEREDOC for commit messages, and add co-author attribution only when the user explicitly requests the exact trailer.
Do not force-pus...

Files:

  • docs/PACKAGING.md
  • CHANGELOG.md
  • scripts/test_render_homebrew_formula.py
  • packaging/winget/manifests/t/tonythethompson/Numan/0.1.3/tonythethompson.Numan.installer.yaml
  • src/cmd/self_update.rs
  • docs/RELEASING.md
  • packaging/winget/manifests/t/tonythethompson/numan/0.1.3/tonythethompson.numan.installer.yaml
  • packaging/winget/manifests/t/tonythethompson/Numan/0.1.4/tonythethompson.Numan.installer.yaml
  • packaging/homebrew/README.md
  • packaging/winget/manifests/t/tonythethompson/numan/0.1.4/tonythethompson.numan.installer.yaml
  • README.md
  • scripts/render_homebrew_formula.py
**/*.{rs,md}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Match existing naming, module layout, and documentation level in the file being edited; update AGENTS.md, docs/, or command help when structure, conventions, or user-visible behavior changes.

Tests must cover failure modes, not only successful execution.

Files:

  • docs/PACKAGING.md
  • CHANGELOG.md
  • src/cmd/self_update.rs
  • docs/RELEASING.md
  • packaging/homebrew/README.md
  • README.md
**/*.{rs,md,toml}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Use the repository's established serialization and module conventions rather than introducing unrelated refactors.

Files:

  • docs/PACKAGING.md
  • CHANGELOG.md
  • src/cmd/self_update.rs
  • docs/RELEASING.md
  • packaging/homebrew/README.md
  • README.md
**/*.md

📄 CodeRabbit inference engine (REVIEW.md)

Update documentation and AGENTS.md when project structure or conventions change.

Files:

  • docs/PACKAGING.md
  • CHANGELOG.md
  • docs/RELEASING.md
  • packaging/homebrew/README.md
  • README.md
**/*.{cs,py}

📄 CodeRabbit inference engine (Custom checks)

**/*.{cs,py}: When modifying managed host or containerized readiness components, never call StopTrackedHost, RestartAsync, or equivalent host-kill methods unless active request leases are confirmed to be zero. Busy hosts reporting busy_reason or active_requests > 0 must not be restarted, and a ready/available provider must not be downgraded solely because a background probe refresh began.
For SessionWorkflowStage, preserve strictly ascending order: Foundation < MediaLoaded < Transcribed < Diarized < Translated < TtsGenerated. Comparisons must use enum members rather than raw integer literals. New or renumbered members require a legacy-compatible JSON converter, and reordered enums require checking every solution-wide inequality comparison for preserved semantic meaning.

Files:

  • scripts/test_render_homebrew_formula.py
  • scripts/render_homebrew_formula.py
**/*.{js,jsx,ts,tsx,py,java,go,rs,rb,php,c,cpp,h,hpp,cs,swift,kt,kts}

📄 CodeRabbit inference engine (CLAUDE.md)

Add comments only when the WHY is non-obvious; do not narrate what the code does, reference the current task, or reference the PR in comments.

Files:

  • scripts/test_render_homebrew_formula.py
  • src/cmd/self_update.rs
  • scripts/render_homebrew_formula.py
**/*.rs

📄 CodeRabbit inference engine (CONTRIBUTING.md)

**/*.rs: Use the Rust 2021 edition.
Use anyhow::Result with .context(...) in application code; use thiserror for library error types that callers match on.
Use clap derive macros for CLI definitions.
Use serde with serde_json or toml for serialization.
Function parameters must use &Path, not &PathBuf.
Library code must not panic; error paths should return anyhow::Result with context where appropriate.
Add or update tests for behavior changes, including relevant failure paths.
New mutating code paths must acquire the mutation lock via acquire_mutation_lock(root) and snapshot the lockfile before writes.
Lockfile, journal, and state-file JSON writes must use write_json_atomic.
numan install must write only to $NUMAN_ROOT; it must not invoke Nu or register plugins/autoloads.
Only activate and deactivate may modify Nu integration state.
Treat the lockfile as the authoritative source of truth; derived projections such as autoload state must not be authoritative.
Install payloads under versioned, content-addressed paths and never overwrite them in place.
Never overwrite foreign autoload files; respect OWNERSHIP_MARKER.
Pass plugin paths through environment variables only; do not use runtime interpolation in Nu program strings.

**/*.rs: All CI gates must pass: cargo test, cargo clippy -- -D warnings, and cargo fmt --check.
Every mutating command—including install, remove, update, gc, and future nupm import—must call acquire_mutation_lock(root).
Lockfiles, journals, and state files must use write_json_atomic; partial writes are not allowed.
Pending activation, autoload, and lifecycle journals must be stored under $NUMAN_ROOT/state/.
Module autoload identity must match all four fields: Nu executable hash, Nu version, vendor autoload directory, and managed file path; the lockfile module_activation value is authoritative.
Never overwrite foreign autoload files; respect OWNERSHIP_MARKER.
Pass paths to Nu only throu...

Files:

  • src/cmd/self_update.rs
**/*.{rs,toml}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Run and keep cargo fmt/rustfmt clean, and ensure cargo clippy -- -D warnings passes.

Files:

  • src/cmd/self_update.rs
**/*.{rs,nu}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

**/*.{rs,nu}: Real-Nu acceptance tests must be marked #[ignore] and should be run when changes affect activation or nupm import; unit tests must not spawn real nu and should use injectable seams such as FakeCandidateRunner or registrars.
The nupm integration must be read-only toward NUPM_HOME, must not execute build.nu, and must not perform bidirectional synchronization.

Unit tests must use FakeCandidateRunner or injectable registrars and must not spawn a real nu process.

Files:

  • src/cmd/self_update.rs
src/**/*.rs

📄 CodeRabbit inference engine (AGENTS.md)

Use anyhow::Result for application code, thiserror for library error types, add context with .context(...) or ?, and never panic in library code.

Files:

  • src/cmd/self_update.rs
🔍 Remote MCP GitHub Copilot

Additional review context

  • PR #99 is open, non-draft, and currently blocked. ARM release builds have not yet run; existing checks cover only Ubuntu, Windows, and macOS test jobs.
  • The latest published release, v0.2.1, contains only three platform archives: Linux x86_64, Windows x86_64, and macOS ARM64. The new ARM archives therefore remain unvalidated until the next tagged release.
  • The modified 0.1.3/0.1.4 WinGet sample manifests point to ARM64 assets that do not exist in the corresponding v0.1.4 release and use an all-zero SHA256 placeholder. The WinGet README also documents installing from these local manifests, so ARM64 local installation will not work until these are clearly treated as examples or updated with real release data.
  • The checked-in Homebrew formula remains at version 0.1.5 and has no Linux ARM stanza; only the renderer and publishing workflow add Linux ARM support. The formula will not reflect ARM support until a subsequent release-triggered Homebrew update runs.
🔇 Additional comments (7)
.github/workflows/release.yml (1)

103-111: 🩺 Stability & Availability

Validate both ARM release jobs before release.

The supplied status shows that no ARM release build has run. Run both native ARM jobs through the normal release validation path. Verify build, packaging, archive layout, and signed checksum publication before marking ARM64 support ready.

Source: MCP tools

src/cmd/self_update.rs (1)

95-104: 📐 Maintainability & Code Quality

Run the required Rust gates before merge.

Run cargo fmt --check, cargo clippy -- -D warnings, and cargo test. The supplied status does not establish that these gates passed for this change.

As per coding guidelines, “All CI gates must pass: cargo test, cargo clippy -- -D warnings, and cargo fmt --check.”

Also applies to: 653-665, 681-693

Sources: Coding guidelines, MCP tools

.github/workflows/winget.yml (1)

69-81: LGTM!

Also applies to: 83-88

scripts/render_homebrew_formula.py (1)

61-61: LGTM!

Also applies to: 96-99

scripts/test_render_homebrew_formula.py (1)

34-54: LGTM!

Also applies to: 67-77, 88-101, 111-118, 142-142

docs/PACKAGING.md (1)

54-55: 🗄️ Data Integrity & Integration

Verify the ARM package readiness claims before marking these rows yes.

The current Homebrew formula is still v0.1.5 without a Linux ARM branch. The versioned WinGet ARM manifests reference missing assets and all-zero hashes. If this matrix describes current availability, mark these channels pending or example-only. If it describes post-release support, state that explicitly and update the artifacts after the first five-archive release.

Source: MCP tools

docs/RELEASING.md (1)

50-50: LGTM!

Comment thread CHANGELOG.md Outdated
Comment thread packaging/homebrew/README.md
Comment thread README.md
Comment thread scripts/render_homebrew_formula.py Outdated
Clarify changelog and README wording, use TARGET.zip in Windows
install examples, drop placeholder ARM64 from historical winget
samples, and add --legacy-pre-linux-arm for pre-ARM Homebrew recovery.

Co-authored-by: Anthony Thompson <github@trackdub.com>
No published release ships Linux ARM digests yet, so keep numan.rb
as the last pre-ARM snapshot and clarify shape vs digest ownership.

Co-authored-by: Anthony Thompson <github@trackdub.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR expands Numan’s release/publishing surface to include Linux aarch64 and Windows ARM64 archives, and wires those new targets through self-update, Homebrew, and WinGet release automation.

Changes:

  • Add Linux aarch64 + Windows ARM64 triples to the GitHub Release build matrix and to numan update --self asset naming/tests.
  • Extend Homebrew formula rendering + Homebrew publish workflow verification to require Linux ARM release archives.
  • Extend WinGet publish workflow verification and asset selection to include both Windows x64 and ARM64 release zips; update sample manifests to show dual-arch NestedInstallerFiles layouts.

Reviewed changes

Copilot reviewed 16 out of 16 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
src/cmd/self_update.rs Adds Linux aarch64 + Windows ARM64 release asset naming support and unit tests.
scripts/render_homebrew_formula.py Requires Linux ARM release archive in SHA256SUMS and renders on_linux/on_arm stanza.
scripts/test_render_homebrew_formula.py Updates unit tests to include Linux ARM digest parsing/rendering assertions.
README.md Documents the new release archive names for Linux aarch64 and Windows ARM64.
packaging/homebrew/README.md Updates required release assets list to include Linux aarch64 archive.
docs/RELEASING.md Updates release checklist to enumerate all five expected platform archives.
docs/PACKAGING.md Updates installation coverage matrix to include Linux aarch64 + Windows ARM64 coverage.
CHANGELOG.md Notes new ARM release assets and packaging workflow updates.
.github/workflows/release.yml Extends release build matrix with ARM runners/targets (Linux aarch64, Windows ARM64).
.github/workflows/homebrew.yml Extends release-asset verification to include Linux aarch64 tarball.
.github/workflows/winget.yml Verifies both Windows x64 + ARM64 assets and tightens the asset selection regex.
packaging/winget/manifests/t/tonythethompson/numan/0.1.3/tonythethompson.numan.installer.yaml Updates sample manifest to show dual-arch nested portable layout.
packaging/winget/manifests/t/tonythethompson/Numan/0.1.3/tonythethompson.Numan.installer.yaml Same as above (sample dual-arch layout).
packaging/winget/manifests/t/tonythethompson/numan/0.1.4/tonythethompson.numan.installer.yaml Updates sample manifest to show dual-arch nested portable layout.
packaging/winget/manifests/t/tonythethompson/Numan/0.1.4/tonythethompson.Numan.installer.yaml Same as above (sample dual-arch layout).
Suppressed comments (4)

packaging/winget/manifests/t/tonythethompson/numan/0.1.3/tonythethompson.numan.installer.yaml:22

  • This versioned “sample” manifest for 0.1.3 includes an ARM64 installer entry with a placeholder SHA256 and an URL that implies a 0.1.3 ARM64 asset exists. For historical versions this is likely incorrect and can lead to broken copy/paste manifests; consider commenting out the ARM64 stanza until a real tagged release provides that asset (or move the sample out of versioned manifests).
ManifestType: installer
ManifestVersion: 1.12.0

packaging/winget/manifests/t/tonythethompson/numan/0.1.4/tonythethompson.numan.installer.yaml:22

  • This versioned “sample” manifest for 0.1.4 includes an ARM64 installer entry with a placeholder SHA256 and an URL that implies a 0.1.4 ARM64 asset exists. For historical versions this is likely incorrect and can lead to broken copy/paste manifests; consider commenting out the ARM64 stanza until a real tagged release provides that asset (or move the sample out of versioned manifests).
ManifestType: installer
ManifestVersion: 1.12.0

packaging/winget/manifests/t/tonythethompson/Numan/0.1.4/tonythethompson.Numan.installer.yaml:22

  • This versioned “sample” manifest for 0.1.4 includes an ARM64 installer entry with a placeholder SHA256 and an URL that implies a 0.1.4 ARM64 asset exists. For historical versions this is likely incorrect and can lead to broken copy/paste manifests; consider commenting out the ARM64 stanza until a real tagged release provides that asset (or move the sample out of versioned manifests).
ManifestType: installer
ManifestVersion: 1.12.0

packaging/winget/manifests/t/tonythethompson/Numan/0.1.3/tonythethompson.Numan.installer.yaml:22

  • This versioned “sample” manifest for 0.1.3 includes an ARM64 installer entry with a placeholder SHA256 and an URL that implies a 0.1.3 ARM64 asset exists. For historical versions this is likely incorrect and can lead to broken copy/paste manifests; consider commenting out the ARM64 stanza until a real tagged release provides that asset (or move the sample out of versioned manifests).
ManifestType: installer
ManifestVersion: 1.12.0

Comment thread CHANGELOG.md Outdated
greptile-apps[bot]
greptile-apps Bot previously approved these changes Aug 7, 2026
coderabbitai[bot]
coderabbitai Bot previously approved these changes Aug 7, 2026
coderabbitai[bot]
coderabbitai Bot previously approved these changes Aug 7, 2026
greptile-apps[bot]
greptile-apps Bot previously approved these changes Aug 7, 2026
Co-authored-by: Anthony Thompson <github@trackdub.com>
@cursor
cursor Bot dismissed stale reviews from greptile-apps[bot] and coderabbitai[bot] via 00eac6d August 7, 2026 12:48
greptile-apps[bot]
greptile-apps Bot previously approved these changes Aug 7, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

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 @.github/workflows/homebrew.yml:
- Around line 139-149: The Linux ARM asset check in the release-rendering
workflow currently treats any missing archive as a legacy release. Update the
logic around linux_arm_ok and RENDER_ARGS so workflow_run releases fail when
numan-${VERSION}-aarch64-unknown-linux-gnu.tar.gz is absent, while
--legacy-pre-linux-arm is applied only through an explicit recovery action.

In
`@packaging/winget/manifests/t/tonythethompson/Numan/0.1.3/tonythethompson.Numan.installer.yaml`:
- Around line 3-4: Remove the narrative publishing comments at lines 3-4 from
packaging/winget/manifests/t/tonythethompson/Numan/0.1.3/tonythethompson.Numan.installer.yaml,
packaging/winget/manifests/t/tonythethompson/Numan/0.1.4/tonythethompson.Numan.installer.yaml,
packaging/winget/manifests/t/tonythethompson/numan/0.1.3/tonythethompson.numan.installer.yaml,
and
packaging/winget/manifests/t/tonythethompson/numan/0.1.4/tonythethompson.numan.installer.yaml;
leave the manifest data unchanged.
🪄 Autofix

✅ Autofix completed


ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: eeb2897f-0c46-496e-bfbb-99e2b8f0d3fa

📥 Commits

Reviewing files that changed from the base of the PR and between 20e49f5 and 00eac6d.

📒 Files selected for processing (11)
  • .github/workflows/homebrew.yml
  • CHANGELOG.md
  • README.md
  • packaging/homebrew/README.md
  • packaging/homebrew/numan.rb
  • packaging/winget/manifests/t/tonythethompson/Numan/0.1.3/tonythethompson.Numan.installer.yaml
  • packaging/winget/manifests/t/tonythethompson/Numan/0.1.4/tonythethompson.Numan.installer.yaml
  • packaging/winget/manifests/t/tonythethompson/numan/0.1.3/tonythethompson.numan.installer.yaml
  • packaging/winget/manifests/t/tonythethompson/numan/0.1.4/tonythethompson.numan.installer.yaml
  • scripts/render_homebrew_formula.py
  • scripts/test_render_homebrew_formula.py
🔗 Linked repositories identified

CodeRabbit considers these linked repositories for cross-repo context during reviews:

  • tonythethompson/QuickShell (manual)
  • tonythethompson/numan (manual)
  • tonythethompson/dependency-chain-substrate (manual)
📜 Review details
⏰ Context from checks skipped due to timeout. (4)
  • GitHub Check: Greptile Review
  • GitHub Check: Real-Nu acceptance (windows-latest)
  • GitHub Check: Test (windows-latest)
  • GitHub Check: Analyze (rust)
🧰 Additional context used
📓 Path-based instructions (7)
**/*

📄 CodeRabbit inference engine (CLAUDE.md)

**/*: Use Serena's semantic, symbol-aware tools as the primary tools for reading and editing code; use built-in Read, Glob, Grep, and Edit only under the stated exceptions.
Before editing a code file, inspect its symbol overview, read the specific symbols being changed, and edit them with Serena's symbol-aware tools.
Understand the existing code before changing it and make the smallest change that satisfies the request; avoid unrelated cleanup, premature abstractions, unnecessary error handling, feature flags, and compatibility shims.
Prefer editing existing files over creating new ones, and never create Markdown or README files unless explicitly requested.
For exploratory questions, provide a 2–3 sentence recommendation with the main tradeoff and do not implement until the user agrees.
For UI or frontend changes that cannot be tested in a browser, explicitly state that browser testing was not performed rather than claiming success.
Address security issues when discovered, including injection, XSS, SQL injection, path traversal, and secret leaks.
Pause and obtain confirmation before destructive, hard-to-reverse, externally visible, or third-party-upload actions, including deleting files or branches, dropping tables, force-pushing, modifying CI/CD, posting externally, or uploading content.
When blocked, investigate the root cause instead of bypassing it with --no-verify, --force, or deletion; investigate unfamiliar files, branches, and configuration before deleting them.
Only commit when explicitly asked; do not proactively update git configuration or push changes.
Do not skip Git hooks unless explicitly asked; if a pre-commit hook fails, fix the issue, re-stage, and create a new commit rather than amending.
Stage files by name rather than using git add -A or git add ., to avoid accidentally including secrets or large binaries.
Use a HEREDOC for commit messages, and add co-author attribution only when the user explicitly requests the exact trailer.
Do not force-pus...

Files:

  • packaging/homebrew/numan.rb
  • packaging/homebrew/README.md
  • packaging/winget/manifests/t/tonythethompson/numan/0.1.3/tonythethompson.numan.installer.yaml
  • CHANGELOG.md
  • packaging/winget/manifests/t/tonythethompson/Numan/0.1.4/tonythethompson.Numan.installer.yaml
  • scripts/render_homebrew_formula.py
  • scripts/test_render_homebrew_formula.py
  • packaging/winget/manifests/t/tonythethompson/numan/0.1.4/tonythethompson.numan.installer.yaml
  • packaging/winget/manifests/t/tonythethompson/Numan/0.1.3/tonythethompson.Numan.installer.yaml
  • README.md
**/*.{js,jsx,ts,tsx,py,java,go,rs,rb,php,c,cpp,h,hpp,cs,swift,kt,kts}

📄 CodeRabbit inference engine (CLAUDE.md)

Add comments only when the WHY is non-obvious; do not narrate what the code does, reference the current task, or reference the PR in comments.

Files:

  • packaging/homebrew/numan.rb
  • scripts/render_homebrew_formula.py
  • scripts/test_render_homebrew_formula.py
!**/.env,!**/credentials.json,!**/*.pem

📄 CodeRabbit inference engine (CLAUDE.md)

Do not commit files that appear to contain secrets, including .env, credentials.json, and PEM files; warn before doing so even if explicitly requested.

Files:

  • packaging/homebrew/numan.rb
  • packaging/homebrew/README.md
  • .github/workflows/homebrew.yml
  • packaging/winget/manifests/t/tonythethompson/numan/0.1.3/tonythethompson.numan.installer.yaml
  • CHANGELOG.md
  • packaging/winget/manifests/t/tonythethompson/Numan/0.1.4/tonythethompson.Numan.installer.yaml
  • scripts/render_homebrew_formula.py
  • scripts/test_render_homebrew_formula.py
  • packaging/winget/manifests/t/tonythethompson/numan/0.1.4/tonythethompson.numan.installer.yaml
  • packaging/winget/manifests/t/tonythethompson/Numan/0.1.3/tonythethompson.Numan.installer.yaml
  • README.md
**/*.{rs,md}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Match existing naming, module layout, and documentation level in the file being edited; update AGENTS.md, docs/, or command help when structure, conventions, or user-visible behavior changes.

Tests must cover failure modes, not only successful execution.

Files:

  • packaging/homebrew/README.md
  • CHANGELOG.md
  • README.md
**/*.{rs,md,toml}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Use the repository's established serialization and module conventions rather than introducing unrelated refactors.

Files:

  • packaging/homebrew/README.md
  • CHANGELOG.md
  • README.md
**/*.md

📄 CodeRabbit inference engine (REVIEW.md)

Update documentation and AGENTS.md when project structure or conventions change.

Files:

  • packaging/homebrew/README.md
  • CHANGELOG.md
  • README.md
**/*.{cs,py}

📄 CodeRabbit inference engine (Custom checks)

**/*.{cs,py}: When modifying managed host or containerized readiness components, never call StopTrackedHost, RestartAsync, or equivalent host-kill methods unless active request leases are confirmed to be zero. Busy hosts reporting busy_reason or active_requests > 0 must not be restarted, and a ready/available provider must not be downgraded solely because a background probe refresh began.
For SessionWorkflowStage, preserve strictly ascending order: Foundation < MediaLoaded < Transcribed < Diarized < Translated < TtsGenerated. Comparisons must use enum members rather than raw integer literals. New or renumbered members require a legacy-compatible JSON converter, and reordered enums require checking every solution-wide inequality comparison for preserved semantic meaning.

Files:

  • scripts/render_homebrew_formula.py
  • scripts/test_render_homebrew_formula.py
🪛 Ruff (0.16.1)
scripts/render_homebrew_formula.py

[warning] 64-66: Avoid specifying long messages outside the exception class

(TRY003)

scripts/test_render_homebrew_formula.py

[warning] 102-102: Use pytest.raises instead of unittest-style assertRaises

Replace assertRaises with pytest.raises

(PT027)

🔍 Remote MCP GitHub Copilot

Relevant review context

  • PR #99 is open, non-draft, and marked mergeable_state: blocked; all currently reported CI checks pass, but no ARM-specific release build checks are present.
  • The release matrix now depends on GitHub-hosted ubuntu-24.04-arm and windows-11-arm runners. These targets are not exercised by the PR’s listed CI checks; validation will occur only during a tagged release.
  • Release publication now fails if NUMAN_RELEASE_SIGNING_KEY is unset, because self-update requires SHA256SUMS.sig. This is stricter than merely omitting the signature and should be verified against repository secret configuration before merging.
  • The package declares Rust 1.88 as its MSRV and uses reqwest 0.12, ed25519-dalek 2, and base64 0.22; the PR’s existing MSRV and Clippy checks pass.
  • The self-update implementation explicitly requires HTTPS release URLs, verifies the signed checksum file before checking the archive digest, and supports the new Linux and Windows AArch64 asset names.
🔇 Additional comments (6)
CHANGELOG.md (1)

13-14: LGTM!

Also applies to: 15-22

README.md (1)

96-98: LGTM!

Also applies to: 111-111

scripts/render_homebrew_formula.py (1)

21-34: LGTM!

Also applies to: 44-67, 70-80, 114-114, 149-180

scripts/test_render_homebrew_formula.py (1)

34-54: LGTM!

Also applies to: 63-74, 80-90, 97-103, 109-122, 132-140, 164-192

packaging/homebrew/README.md (1)

3-12: LGTM!

Also applies to: 31-60

packaging/homebrew/numan.rb (1)

13-16: LGTM!

Comment thread .github/workflows/homebrew.yml Outdated
@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Fixes Applied Successfully

Fixed 4 file(s) based on 2 unresolved review comments.

Files modified:

  • packaging/winget/manifests/t/tonythethompson/Numan/0.1.3/tonythethompson.Numan.installer.yaml
  • packaging/winget/manifests/t/tonythethompson/Numan/0.1.4/tonythethompson.Numan.installer.yaml
  • packaging/winget/manifests/t/tonythethompson/numan/0.1.3/tonythethompson.numan.installer.yaml
  • packaging/winget/manifests/t/tonythethompson/numan/0.1.4/tonythethompson.numan.installer.yaml

Commit: 2da7f2483de699c91988888d72791d4a76b3769f

The changes have been pushed to the cursor/expand-arm-platforms-689b branch.

Time taken: 5m 16s


⚠️ 1 file(s) could not be committed — the agent does not have permission to push to .github/workflows/. Please apply these changes manually:

.github/workflows/homebrew.yml — 2 changes:

Lines 112–117
         env:
           GH_TOKEN: ${{ github.token }}
           RELEASE_TAG: ${{ steps.tag.outputs.tag }}
+          EVENT_NAME: ${{ github.event_name }}
         shell: bash
         run: |
           set -euo pipefail
Lines 145–152
           if [[ "$linux_arm_ok" == "true" ]]; then
             echo "Found Linux ARM archive ${linux_arm_asset}"
           else
-            echo "No Linux ARM archive on ${RELEASE_TAG}; using --legacy-pre-linux-arm"
-            RENDER_ARGS+=(--legacy-pre-linux-arm)
+            # Missing Linux ARM asset is only acceptable during explicit manual recovery.
+            if [[ "$EVENT_NAME" == "workflow_dispatch" ]]; then
+              echo "No Linux ARM archive on ${RELEASE_TAG}; using --legacy-pre-linux-arm for manual recovery"
+              RENDER_ARGS+=(--legacy-pre-linux-arm)
+            else
+              echo "::error::Release ${RELEASE_TAG} is missing required Linux ARM asset ${linux_arm_asset}; automated releases must include all platform assets"
+              exit 1
+            fi
           fi
           python3 scripts/render_homebrew_formula.py "${RENDER_ARGS[@]}"
           cp /tmp/numan.rb packaging/homebrew/numan.rb

Fixed 4 file(s) based on 2 unresolved review comments.

Co-authored-by: CodeRabbit <noreply@coderabbit.ai>
greptile-apps[bot]
greptile-apps Bot previously approved these changes Aug 7, 2026
workflow_run releases now error if aarch64-unknown-linux-gnu is absent.
--legacy-pre-linux-arm is only applied on explicit workflow_dispatch recovery.

Co-authored-by: Anthony Thompson <github@trackdub.com>
@tonythethompson
tonythethompson enabled auto-merge (squash) August 7, 2026 14:49
@tonythethompson
tonythethompson merged commit d5b599a into master Aug 7, 2026
23 checks passed
@tonythethompson
tonythethompson deleted the cursor/expand-arm-platforms-689b branch August 7, 2026 14:53
@linear-code

linear-code Bot commented Aug 7, 2026

Copy link
Copy Markdown

TS-157

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.

3 participants