Skip to content

ci: add gated macOS preview updater feed promotion - #414

Merged
kalvinnchau merged 4 commits into
mainfrom
am/preview-release-feed
Sep 29, 2026
Merged

kalvinnchau merged 4 commits into
mainfrom
am/preview-release-feed

Conversation

@kalvinnchau

@kalvinnchau kalvinnchau commented Sep 29, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Promote each successful, signed macOS preview prerelease automatically to preview-feed/latest.json after publication. Scheduled and manual build runs use the same gate; explicit promote_version remains available for controlled recovery. Candidate-only Windows/Linux runs cannot publish the feed.
  • Before replacing the rolling manifest, download the immutable archive/signature; verify both Minisign signatures against the public key embedded in the client, require the candidate binary to contain the updater endpoint/key, and reject full-SemVer rollback or changed same-version metadata. Read back the GitHub API asset. Keep stable-feed reserved and legacy block/buzz untouched.
  • Accept CLI 2.11.x signatures, which lack an authenticated version field. Residual risk: a feed-response attacker can advertise a higher version while replaying an older authentic signed archive. The coordinated CLI/updater 2.12.x bump must emit and enforce the signed version at promotion and in the client.

Validation and rollout limits

  • At 1a6e98c9, node --test tests/integration/preview-feed.test.mjs passes 3/3 (including workflow-graph assertions for automatic/manual paths and crypto/rollback fixtures); Biome and commit/push hooks pass. git diff --check origin/main...HEAD passes.
  • Full integration suite: 133/161 pass; 28 local fixture/launcher failures including spawned fake rustc/pnpm EACCES. Preview-feed and packaging gate tests passed. Not claiming a clean full suite.
  • No live feed publication or production-signed old→new installation attempted. First eligible auto-promotion starts when this workflow reaches main, provided an updater-enabled build is published. Before broad preview distribution, verify the production signing key, exact public endpoint and a controlled Apple-signed old→new install; otherwise manual DMG recovery may be needed. GitHub asset replacement may briefly return 404; see docs/releases.md.

@kalvinnchau
kalvinnchau force-pushed the am/preview-release-feed branch from fd0ebdd to dc05303 Compare September 29, 2026 17:13
@kalvinnchau kalvinnchau changed the title Add gated macOS preview updater feed promotion ci: add gated macOS preview updater feed promotion Sep 29, 2026
@kalvinnchau
kalvinnchau force-pushed the am/preview-release-feed branch from 65c94d8 to 3167493 Compare September 29, 2026 17:39
am added 3 commits September 29, 2026 10:41
Signed-off-by: am <6e30cd56c30e030cd31bb0939b94a7c257c9a09d5ba2d92cf2735da45629f248@buzz.block.builderlab.xyz>
…motion

Signed-off-by: am <6e30cd56c30e030cd31bb0939b94a7c257c9a09d5ba2d92cf2735da45629f248@buzz.block.builderlab.xyz>
Signed-off-by: am <6e30cd56c30e030cd31bb0939b94a7c257c9a09d5ba2d92cf2735da45629f248@buzz.block.builderlab.xyz>
@kalvinnchau
kalvinnchau force-pushed the am/preview-release-feed branch from 3167493 to a53a3f1 Compare September 29, 2026 17:41
@kalvinnchau
kalvinnchau marked this pull request as ready for review September 29, 2026 17:45
@kalvinnchau
kalvinnchau requested review from a team, comp615 and wesbillman as code owners September 29, 2026 17:45
@kalvinnchau
kalvinnchau marked this pull request as draft September 29, 2026 17:46
Signed-off-by: am <6e30cd56c30e030cd31bb0939b94a7c257c9a09d5ba2d92cf2735da45629f248@buzz.block.builderlab.xyz>
@kalvinnchau
kalvinnchau marked this pull request as ready for review September 29, 2026 17:54

@wesbillman wesbillman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Star Lord — automated source review via Wes’s account

One actionable public-material finding; no additional concrete implementation defect found. Mantis independently reviewed the signature, rollback and workflow-publication paths at the same pins; I checked those conclusions against the source. This is a non-blocking comment review, not approval or merge authorization.

  • Head: 1a6e98c9bc8737b08399b7d7a53ff206df561841
  • Base: 32982724223d8090441415ed89ddf7cb7a8d286e

P2 — Remove deployment-specific identity details from the public commit metadata

All four outgoing commits (4acf081c, 130ac469, a53a3f1b, 1a6e98c9) expose an internal relay deployment domain and its environment-scoped agent identifier in the author/committer email and Signed-off-by trailer. This is part of the public PR surface even though it is not in the file diff. Please have the contributor replace that deployment-scoped address with their verified public-safe contribution identity throughout these commits, preserving actual authorship and truthful DCO certification. Do not substitute another person’s identity or remove required sign-offs. I am deliberately not repeating the address here. This concrete disclosure is what keeps the overall change below the repository’s 9/10 readiness bar.

Implementation assessment

The production change is bounded to the promotion job and one verifier. It retains main-only release publication and candidate-build exclusion, serializes promotion with macOS releases, verifies both Minisign signatures before uploading the manifest, checks the candidate’s embedded key/endpoint, compares all canonical preview-version components using BigInt, preserves identical same-version manifests, and reads back the uploaded API asset. Three Node integration tests are added; no browser cases are added or removed.

I am not reopening these explicitly documented rollout choices as newly discovered defects:

  • The reviewed head does not yet contain the updater integration from #312. Its build cannot satisfy the new embedded-key/endpoint gate until that dependency lands; promotion fails closed rather than making an updater-less artifact eligible. The matching key/endpoint in #312 were checked separately at 727792ccdf5a322d9fa1462078cd63a044dfec19, not treated as part of this head.
  • CLI 2.11.x signatures do not authenticate the advertised version. Signature verification here is not end-to-end anti-rollback protection against a modified feed response; the coordinated signer/client change and acceptance of the stated preview risk remain outstanding.
  • A failed --clobber upload may leave the rolling asset absent and require operator recovery. API readback is not public-endpoint or installed-client validation. Automatic promotion before broad-distribution acceptance is the stated rollout policy, not proof that installation works.

Validation limits

Source only: no PR code, tests, builds, release workflows, app installs or production writes were executed. The description has no attached images. Existing deployment-specific release-documentation references also remain, but are unchanged from the base rather than introduced by this diff.

At the single CI snapshot, JavaScript, Rust/integration and browser jobs were still running; DCO, Semgrep and zizmor had passed, and Windows native validation was skipped. No timing artifacts were available at that snapshot, so job counts, elapsed/summed execution and slowest-test/file regressions could not be assessed. The PR reports 3/3 focused local tests and 133/161 full integration tests, with 28 local fixture/launcher failures; these are author-reported, not independently reproduced results.

Production-key verification, exact public-endpoint checks, controlled Apple-signed old→new installation, relaunch/version confirmation, failure/retry behavior on disposable clients and human acceptance remain unverified. No UI focus behavior is changed or validated by this PR review.

@kalvinnchau
kalvinnchau merged commit 13107ac into main Sep 29, 2026
34 of 37 checks passed
@kalvinnchau
kalvinnchau deleted the am/preview-release-feed branch September 29, 2026 18:28
johnmatthewtennant pushed a commit that referenced this pull request Sep 29, 2026
* origin/main:
  ci: add gated macOS preview updater feed promotion (#414)
  Set up incomplete inventory identities through a working Use here dialog (#287)

Signed-off-by: Sol <49aa1f65411fd096d2e2ec144f1e7aa36fdc76d1b907cfdf7be000c66f9d3b8e@buzz.block.builderlab.xyz>

# Conflicts:
#	src/bundled/agents/AgentsPage.tsx
#	src/bundled/agents/InventoryIdentityCard.tsx
#	src/bundled/agents/InventoryView.tsx
#	src/bundled/agents/UnifiedInventory.tsx
johnmatthewtennant pushed a commit that referenced this pull request Sep 29, 2026
* origin/main:
  feat(channels): archive and delete channels from settings (#385)
  feat(updates): add in-app auto-updates with restart toast (#312)
  fix(ui): keep background loading from shifting populated views (#418)
  Improve member and agent identity previews (#412)
  Fix initial emoji autocomplete selection (#419)
  Add community membership settings (#348)
  Keep nested replies compact and place actions above message text (#367)
  Import an exact inventory identity from its selected source with retry (#288)
  ci: add gated macOS preview updater feed promotion (#414)
  Set up incomplete inventory identities through a working Use here dialog (#287)

Signed-off-by: Sol <49aa1f65411fd096d2e2ec144f1e7aa36fdc76d1b907cfdf7be000c66f9d3b8e@buzz.block.builderlab.xyz>

# Conflicts:
#	src/app/App.tsx
TheSentinel454 pushed a commit that referenced this pull request Sep 29, 2026
* origin/main: (58 commits)
  flake fix: keep restored reading anchor out of bottom follow (WebKit scroll measurement) (#407)
  Replace fixed browser-test waits with conditions, gates and the clock (#373)
  feat(updates): show installed version in Software Updates settings (#430)
  fix(desktop): allow deep-link delivery to the main webview (#432)
  feat(shell): open your profile from the account menu avatar (#390)
  Polish top bar and animate contextual sidebar toggle (#360)
  fix(profiles): preserve nonlocal agent identity in profile fallback (#327)
  test(agents): pause the status poll around the failed-Stop checks (#431)
  fix(sidebar): paint channel rows with the scroller contents (#428)
  feat(channels): archive and delete channels from settings (#385)
  feat(updates): add in-app auto-updates with restart toast (#312)
  fix(ui): keep background loading from shifting populated views (#418)
  Improve member and agent identity previews (#412)
  Fix initial emoji autocomplete selection (#419)
  Add community membership settings (#348)
  Keep nested replies compact and place actions above message text (#367)
  Import an exact inventory identity from its selected source with retry (#288)
  ci: add gated macOS preview updater feed promotion (#414)
  Set up incomplete inventory identities through a working Use here dialog (#287)
  Show saved local and relay inventory while retaining existing import controls (#286)
  ...
TheSentinel454 pushed a commit that referenced this pull request Sep 29, 2026
* origin/main: (58 commits)
  flake fix: keep restored reading anchor out of bottom follow (WebKit scroll measurement) (#407)
  Replace fixed browser-test waits with conditions, gates and the clock (#373)
  feat(updates): show installed version in Software Updates settings (#430)
  fix(desktop): allow deep-link delivery to the main webview (#432)
  feat(shell): open your profile from the account menu avatar (#390)
  Polish top bar and animate contextual sidebar toggle (#360)
  fix(profiles): preserve nonlocal agent identity in profile fallback (#327)
  test(agents): pause the status poll around the failed-Stop checks (#431)
  fix(sidebar): paint channel rows with the scroller contents (#428)
  feat(channels): archive and delete channels from settings (#385)
  feat(updates): add in-app auto-updates with restart toast (#312)
  fix(ui): keep background loading from shifting populated views (#418)
  Improve member and agent identity previews (#412)
  Fix initial emoji autocomplete selection (#419)
  Add community membership settings (#348)
  Keep nested replies compact and place actions above message text (#367)
  Import an exact inventory identity from its selected source with retry (#288)
  ci: add gated macOS preview updater feed promotion (#414)
  Set up incomplete inventory identities through a working Use here dialog (#287)
  Show saved local and relay inventory while retaining existing import controls (#286)
  ...

Signed-off-by: Elrond <28d6302a099e5225b02c4155ac4236e4912603df2ab08dbfc2f4fef08ce598c8@buzz.block.builderlab.xyz>
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