Skip to content

feat(release): prepare Neo 0.51.1.3 arm64 test build - #2917

Merged
Nikhil (shadowfax92) merged 5 commits into
mainfrom
feat/neo-arm64-release-prep
Oct 14, 2026
Merged

Nikhil (shadowfax92) merged 5 commits into
mainfrom
feat/neo-arm64-release-prep

Conversation

@shadowfax92

Copy link
Copy Markdown
Contributor

The Neo full-release workflow always starts Linux, Windows and universal macOS builds and promotes its components. This change adds platform, macOS architecture and publication choices, while retaining the existing full-release defaults. The requested test dispatch selects macOS arm64 with publication=draft-only.

Draft-only retains immutable source-bound component objects and private drafts, skips component finalization/feeds/latest aliases/version reflection, and disables explicit and inherited macOS Slack notifications. Finalization accepts skipped unselected lanes and requires every selected lane and component to succeed before creating only the selected browser draft assets. Deferred component attachment also refuses public or foreign-release mutation.

After profile PR #2908 merged as a1eb3115c8e33ed7b7ef6b0ee8aadc05db782adb, the browser PATCH advances exactly once from 0.51.1.2 to 0.51.1.3. No native or Rust profile behavior changes are part of this preparation.

Validation at c899112f8: 1,270 bos_build tests OK (two pre-existing skips), 66 TypeScript release tests pass, Ruff and actionlint pass. One independent workflow review identified deferred public-asset mutation; the fix and the mandatory-metadata follow-up are root-vetted, with shipped-step fake-gh red/green regressions. Exact-head CI will be checked before merge. The default all/universal/alpha path and selected-lane failure/skip behavior are covered, including no public component writes in draft-only mode.

Authorized endpoint: one main-branch macOS arm64 Neo test build and GitHub draft. No live browser/component feeds, stable aliases, Slack/Discord announcement, or owner installation. TKT-1025 findings and the accepted existing-only removal-race caveat from #2908 remain unfixed and explicitly outside this release-preparation change.

release-browserclaw.yml gains three validated dispatch inputs whose
defaults reproduce the full release: platforms (all|macos|linux|windows),
macos_arch (universal|arm64) and publication (alpha|draft-only).

- preflight validates the selection through env and emits per-lane flags;
  lanes and the finalizer read only those outputs.
- draft-only passes defer_finalize to both component workflows, so they
  keep immutable versioned R2 objects and private drafts but skip tags,
  the server latest alias, public releases, OTA/feeds and version
  reflection.
- finalize runs despite skipped lanes: it requires preflight, both
  components and every selected lane to succeed and every unselected
  lane to be skipped, then finalizes only the selected receipts.
- release-macos.yml gets a notify input (default true on dispatch and
  call) gating its Slack failure ping and blanking SLACK_WEBHOOK_URL so a
  persistent builder .env cannot post from a quiet build.
Component resolution can reuse an annotated same-source tag whose release
is already public. A deferred (draft-only) build never finalizes, yet the
server attachment step ran `gh release upload --clobber` and the
extension step could add a missing asset to that public release.

When defer_finalize is set, both steps now write only to a private draft
bound to the release SHA (target match, or a tag verified at that SHA).
Server assets on an already-published release are reused read-only when
byte-identical; missing or differing assets fail before any write.
Non-deferred (alpha) attachment is unchanged.

Regression tests run the shipped step scripts against a fake gh that
records every mutating call.
The deferred attachment guard ran inside `if DEFER && release=$(gh
release view --json ...)`, so a transient metadata failure skipped the
whole guard while the later plain existence check could still succeed
and `upload --clobber` would rewrite a public release.

Keep the original existence/private-draft creation path, then, when
deferred, read the metadata as a plain assignment so any gh failure
aborts under set -e, reject an unreadable draft state, and only then
validate the private draft or reuse public assets read-only before the
unchanged upload.

Regressions cover a release whose existence check succeeds while its
JSON read fails (public and private) or lacks isDraft, plus the
extension equivalent: nonzero exit and zero mutating gh calls.
@github-actions

Copy link
Copy Markdown
Contributor

✅ Tests passed: 66/66

Ran 1 of 16 suites (15 not affected by this change).

Suite Passed Failed Skipped
⏩ server-agent n/a n/a not affected
⏩ server-api n/a n/a not affected
⏩ server-tools n/a n/a not affected
⏩ server-browser n/a n/a not affected
⏩ server-integration n/a n/a not affected
⏩ server-lib n/a n/a not affected
⏩ server-root n/a n/a not affected
⏩ agent n/a n/a not affected
⏩ claw-app n/a n/a not affected
⏩ claw-onboard n/a n/a not affected
⏩ app-onboard n/a n/a not affected
⏩ build n/a n/a not affected
✅ release 66/66 0 0
⏩ claw-server n/a n/a not affected
⏩ claw-server-quality n/a n/a not affected
⏩ claw-mcp n/a n/a not affected

View workflow run

@greptile-apps

greptile-apps Bot commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

RetriggerConfidence Score: 5/5

[High impact] The PR appears safe to merge; no actionable issues were found.

Summary

Adds platform, macOS architecture, and publication choices for Neo releases while keeping the existing full-release defaults.

  • Neo releases can build selected platforms and macOS artifacts.
  • Draft-only runs keep component releases private until finalization.
  • Neo can mute Slack messages for macOS test builds.

Acknowledged scope: shadowfax92 explicitly deferred the TKT-1025 findings and the existing-only removal-race caveat from #2908. Neither is changed by this PR.

Diagram

%%{init: {'theme': 'neutral'}}%%
flowchart TD
  A[Validate release choices and freeze source] --> B[Prepare server]
  B --> C[Prepare extension]
  C --> D[Check exact component versions]
  D --> E[Build selected browser platforms]
  E --> F[Require selected builds to succeed]
  F --> G[Check selected receipts]
  G --> H[Create browser draft]
  B --> I{Publication choice}
  C --> I
  I -->|alpha| J[Finalize components and publish alpha feeds]
  I -->|draft-only| K[Leave component drafts unpromoted]
Loading

Reviews (1) · Last reviewed commit: "fix(release): read deferred server relea..." · Reviewed by Greptile

@shadowfax92
Nikhil (shadowfax92) merged commit 8fc4658 into main Oct 14, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant