Skip to content

feat(release): unify Desktop and CLI product releases - #3222

Open
Astro-Han wants to merge 22 commits into
mainfrom
feat/1510-unify-product-release
Open

feat(release): unify Desktop and CLI product releases#3222
Astro-Han wants to merge 22 commits into
mainfrom
feat/1510-unify-product-release

Conversation

@Astro-Han

@Astro-Han Astro-Han commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Rebuild the valid goal of feat(release): add synchronized macOS arm64 CLI artifact #3002 on current main: root package.json is the sole version authority, and one main commit, v<version> tag, release gate, and Draft GitHub Release cover Desktop, the standalone macOS arm64 CLI/TUI, and bundled source.
  • Make product identity authoritative at every mutation boundary. Product publication creates or verifies the exact tag before using gh release create --verify-tag; interrupted Draft uploads keep byte-identical assets, add only missing assets, and fail on conflicts or extras. npm staging is dispatched from the existing product tag, so its workflow ref, source, run record, and npm provenance identify one commit; Finalize rechecks the live tag, Release, and main ancestry.
  • Give npm tarballs and standalone ZIPs one manifest-derived runtime payload policy for workspace closure, build order, safe releaseFiles, development-file pruning, notices, current Eval assets, dependency patches, and caller-independent npm configuration. npm retains its OIDC staged-publishing and 2FA boundaries as an optional installation channel, without another tag or Release.
  • Ship the required relocatable standalone ZIP with pinned Node/npm, Maka's single public maka command, Developer ID/notarization hooks, DISCLAIMER-WIP, checksums, and end-to-end verification. This supersedes feat(release): add synchronized macOS arm64 CLI artifact #3002 and incorporates or explicitly adjudicates every unresolved review thread there.

Fixes #1510

Verification

  • npm run check:release — stale-dist and notice checks plus 53 focused release/publication contracts
  • npm run format:check
  • actionlint .github/workflows/release.yml .github/workflows/release-cli-stage.yml .github/workflows/release-cli-finalize.yml .github/workflows/cli-package-validation.yml
  • npm run release:cli:pack — clean committed-source archive path
  • npm run release:cli:smoke
  • npm --workspace maka-agent test — 286 passed after rebasing the managed Runtime Host setup from current main
  • npm --workspace @maka/desktop run build
  • Packaged and verified the final-commit development-mode Maka-0.1.11-cli-mac-arm64.zip on macOS arm64 with pinned Node 24.18.1/npm 11.19.0. Verification covered relocation, embedded runtime/native closure, shared file policy, DISCLAIMER-WIP, notices, CLI and Eval smoke, and PTY TUI startup. SHA-256: 81ba9f3259411f09f2bf520e715683c1979d56dc1336fbb7861caa62ca5b356c.

Release review required

  • v0.1.11 already exists. A future release preparation must bump root, Desktop, and CLI manifests together to one unused product version.
  • Developer ID signing, notarization, protected-environment approval, npm staging, and browser-download acceptance on separate Apple Silicon and Windows machines require release credentials and human operators, so they were not run locally.
  • Require an independent human to review the public release contract, final diff, provenance, and release checklist before merge. Do not merge or publish from AI review alone.

AI use

Select exactly one:

  • No generative tool made a substantive contribution
  • Generative tooling made a substantive contribution

Tool(s) and scope: Codex reconstructed the release architecture from current main and public decisions, implemented code/workflows/tests/docs, ran local verification, and prepared this PR. Claude provided an adversarial review; Codex independently adjudicated its findings. Material commits carry Generated-by: Codex trailers.

Checklist

  • Tests cover the change and fail without it
  • Lint, format, typecheck and the affected suites pass locally

Does this PR entail a change in behavior?

  • Yes — described under Summary above
  • No

@coderabbitai

coderabbitai Bot commented Aug 18, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 68d1819a-91a2-44e5-a4ec-c9680e108db7

📥 Commits

Reviewing files that changed from the base of the PR and between a395694 and ba1f50d.

📒 Files selected for processing (8)
  • .github/RELEASE_CHECKLIST.md
  • docs/cli-npm-release.md
  • docs/cli-npm-release.zh-CN.md
  • package.json
  • scripts/product-release-identity.mjs
  • scripts/product-release.test.mjs
  • scripts/release-cli-file-policy.mjs
  • scripts/release-cli-file-policy.test.mjs

Included review availability: Your plan provides up to 3 included reviews per hour; 0 remain after this review.


📝 Walkthrough

What this PR solves

This PR creates one release path for Desktop and standalone macOS arm64 CLI/TUI products.

It uses the root package.json version, one source commit, one v<version> tag, one release gate, and one Draft GitHub Release. The standalone ZIP provides the maka command, TUI startup, run, eval, inspect, version reporting, pinned Node/npm metadata, notices, DISCLAIMER-WIP, checksums, and verification.

npm remains an optional staged channel. It does not create another tag or GitHub Release.

Source of truth and solution scope

The PR extends the existing product release source of truth. It does not create a parallel product release path.

The root product version, product tag, source commit, release identity utility, manifest-based packaging policies, and single Draft GitHub Release now control Desktop, CLI/TUI, source, and npm artifacts. The separate Desktop workflow and CLI-specific tag and release behavior were removed.

The solution is the smallest coherent path shown by the current diff. The added workflow, packaging, validation, signing, notarization, recovery, and test logic supports immutable source selection, workspace dependency closure, native artifact filtering, npm staging, and Draft Release safety.

Simplification opportunities

No safe deletion is evident from the supplied change summary.

The PR removes duplicated behavior by deleting the Desktop-only workflow, CLI-specific release metadata, the maka-agent alias, and the Eval-specific packaging path. It also replaces hard-coded packaging rules with manifest-based policies.

The packaging and verification scripts are large. The current evidence does not show that further deletion or simplification would preserve behavior and regression coverage.

Concrete risks and validation

Key risks include:

  • Incorrect product identity, tag, commit, or version propagation.
  • Incomplete workspace dependency closure.
  • Dangling links or development artifacts in the standalone ZIP.
  • Incorrect native binary architecture.
  • Signing or notarization failures.
  • npm staging against the wrong product release.
  • Incorrect Draft Release asset recovery.
  • The public CLI contract changing because only maka remains.
  • Release credential, protected-environment, and human-approval failures.

Reported validation covered release checks, formatting, workflow linting, CLI packaging, CLI smoke tests, workspace tests, the Desktop build, and a packaged macOS arm64 CLI/TUI ZIP.

Developer ID signing, notarization, protected-environment approval, npm staging, and browser-download acceptance were not run locally because they require release credentials or human operators. Required-check status remains unverified without direct check results.

Complexity delta

Added

  • One unified release workflow with recovery state.
  • Product release identity and tag utilities.
  • Manifest-based workspace and release-file policies.
  • macOS arm64 packaging and verification logic.
  • Signing, notarization, checksum, notice, and metadata checks.
  • Additional workflow contracts and release tests.
  • RELEASE.json, DISCLAIMER-WIP, and related packaging requirements.
  • More release gates and protected-environment controls.

Removed

  • The Desktop-only release workflow.
  • CLI-specific tags and GitHub Releases.
  • Separate CLI release identity.
  • The maka-agent public binary alias.
  • Hard-coded workspace and Eval packaging rules.
  • GitHub Release creation during npm finalization.

The PR adds implementation and test-maintenance complexity. It removes duplicated release authorities and parallel release states. Total maintenance complexity decreases at the release-model level. The added complexity is justified by the standalone artifact, security, provenance, and recovery requirements.

Optional follow-up simplifications are non-blocking.

Review-relevant risks

The diff affects protected areas:

  • Public behavior: The package exposes only maka; maka-agent is removed.
  • Release governance: Desktop and CLI/TUI share one tag, commit, release gate, and Draft GitHub Release.
  • Security: Publication includes signing, notarization, credential cleanup, immutable source checks, provenance validation, and protected approvals.
  • Licensing and notices: The standalone artifact includes notices and DISCLAIMER-WIP.
  • Distribution: The PR adds a standalone macOS arm64 ZIP and changes npm staging behavior.

Material changes in these areas require independent human review under repository policy.

The person performing the merge must review the final diff. A maintainer makes the final determination.

Walkthrough

The release system now uses one product identity and source commit for desktop, CLI/TUI, npm, and source artifacts. It adds macOS arm64 packaging and verification, unified draft-release creation, product-tagged npm staging, and updated CLI distribution contracts.

Changes

Product release pipeline

Layer / File(s) Summary
Release identity and CLI surface
scripts/release-version.mjs, scripts/product-release-identity.mjs, scripts/product-release-tag.mjs, package.json, packages/cli/*
Added shared product version, tag, commit, toolchain, artifact, and public-command validation. Removed the maka-agent binary alias.
CLI workspace packaging policy
scripts/release-cli-file-policy.mjs, scripts/release-cli-package.mjs, scripts/release-cli-file-policy.test.mjs, .github/workflows/cli-package-validation.yml
Added dependency-closure ordering, declared release-file validation, development-artifact filtering, sanitized npm execution environments, and source-commit checkout support.
macOS arm64 CLI packaging and verification
scripts/package-macos-arm64-cli.mjs, scripts/verify-macos-arm64-cli.mjs, scripts/release-eval-smoke-sitecustomize.py, scripts/smoke-release-cli-package.mjs
Added standalone archive creation, Node runtime embedding, native-binary handling, signing, notarization, checksums, archive validation, TUI checks, streaming checks, deterministic evaluation smoke tests, and Windows Runtime Host diagnostics.
Unified release workflow and acceptance gates
.github/workflows/release.yml, .github/RELEASE_CHECKLIST.md, .github/workflows/ci.yml, scripts/ci-test-plan.mjs
Added one release workflow for desktop, CLI/TUI, and source artifacts. The workflow validates checksums and manages draft GitHub Release assets. CI now runs release contract checks.
Product-tagged npm publication
.github/workflows/release-cli-stage.yml, .github/workflows/release-cli-finalize.yml, scripts/release-cli-publication.mjs, docs/cli-npm-release*
npm staging now builds the exact product tag commit and validates provenance. Finalization verifies and preserves the public package without creating separate tags or GitHub Releases.
Distribution documentation and command usage
docs/cli-distribution.md, docs/README.md, packages/cli/README*, docs/runtime-host-remote-access*
Documented the standalone CLI/TUI contract and updated installation and Runtime Host commands to use maka.

Estimated code review effort: 5 (Critical) | ~120 minutes

Merge Risk: 🟡 Moderate · up to ba1f5

The unified release changes the publication and acceptance contract, but the current checklist still omits verification of the required Windows Desktop ZIP. Merge should wait for that checklist correction or explicit owner acceptance because a required download artifact could otherwise go unverified.

Sequence Diagram(s)

sequenceDiagram
  participant ReleaseDispatcher
  participant ReleaseIdentity
  participant ArtifactJobs
  participant ArtifactVerifier
  participant GitHubDraftRelease
  ReleaseDispatcher->>ReleaseIdentity: resolve product version and source commit
  ReleaseIdentity->>ArtifactJobs: provide tag, commit, and toolchain metadata
  ArtifactJobs->>ArtifactVerifier: provide desktop, CLI/TUI, and source artifacts
  ArtifactVerifier->>GitHubDraftRelease: upload verified assets and checksums
  GitHubDraftRelease-->>ReleaseDispatcher: create or update draft release
Loading
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Linked Issues check ⚠️ Warning The implementation meets most objectives, but it removes the required maka-agent invocation while issue #1510 requires TUI launch through both maka and maka-agent. Restore the maka-agent binary alias and help behavior, or update issue #1510 to explicitly approve this breaking interface change.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly identifies the main change: unifying Desktop and CLI product releases.
Description check ✅ Passed The description includes the required Summary, Verification, AI use, and Checklist sections with issue linkage, test results, deferred actions, and AI disclosure.
Out of Scope Changes check ✅ Passed The workflow, packaging, documentation, and validation changes support the unified Desktop and CLI/TUI release objectives; no unrelated code changes are evident.
Ai Use Disclosure ✅ Passed The PR selects generative tooling, names Codex and its scope, and all 20 introduced commits contain the valid standalone trailer Generated-by: Codex.
✨ 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 feat/1510-unify-product-release

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

@Astro-Han
Astro-Han force-pushed the feat/1510-unify-product-release branch 2 times, most recently from 5789994 to 55e7055 Compare August 19, 2026 07:28
@Astro-Han
Astro-Han marked this pull request as ready for review August 19, 2026 07:28
@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Unify Desktop, standalone CLI, and npm release identity

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

Grey Divider

AI Description

• Unifies Desktop, CLI/TUI, and source artifacts under one version, commit, tag, and Draft.
• Adds a signed, notarized, relocatable Apple Silicon CLI ZIP with end-to-end verification.
• Binds npm staging to the existing product release without creating competing release identities.
Diagram

graph TD
  I["Release identity"] --> D["Desktop builds"] --> G["Artifact gate"] --> R[("Draft Release")]
  I --> C["CLI package"] --> G
  I --> S["Source bundle"] --> G
  R --> N["npm staging"] --> V["npm verification"]
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Separate product releases
  • ➕ Keeps Desktop and CLI workflows independently deployable
  • ➕ Reduces the size of each individual release workflow
  • ➖ Creates competing versions, tags, and GitHub Releases
  • ➖ Allows product artifacts to originate from different commits
  • ➖ Complicates acceptance, recovery, and downstream installation channels
2. Gate product releases on npm
  • ➕ Makes npm availability part of the initial product release
  • ➕ Uses one coordinated operator workflow
  • ➖ Couples required artifacts to external staging and human 2FA
  • ➖ Makes npm outages block standalone and Desktop releases
  • ➖ Blurs product authority with an optional installation channel
3. Build a single executable CLI
  • ➕ Could reduce archive size and dependency-tree complexity
  • ➕ May simplify installation and relocation
  • ➖ Requires substantial runtime compatibility work
  • ➖ Risks native module, Eval asset, and dynamic loading support
  • ➖ Would diverge from the already validated Node-based runtime

Recommendation: Retain the PR’s approach: one product identity and Draft gate, followed by a read-only npm channel. It provides the strongest commit-to-artifact traceability while keeping npm approval independent; separate releases, npm-gated publication, and a single-executable build introduce greater authority ambiguity or compatibility risk.

Files changed (35) +3513 / -532

Enhancement (5) +1045 / -4
package.jsonAlign the CLI version and public command +2/-3

Align the CLI version and public command

• Aligns the CLI package with product version '0.1.11' and removes the public 'maka-agent' binary alias.

packages/cli/package.json

cli-core.tsRemove the maka-agent help alias +0/-1

Remove the maka-agent help alias

• Stops advertising 'maka-agent' as an alternate TUI command in generated CLI help.

packages/cli/src/cli-core.ts

package-macos-arm64-cli.mjsBuild the standalone macOS arm64 CLI/TUI ZIP +875/-0

Build the standalone macOS arm64 CLI/TUI ZIP

• Creates a relocatable archive with pinned Node/npm, manifest-derived workspaces, pruned dependencies, notices, metadata, native thinning, Developer ID signing, notarization, and checksums.

scripts/package-macos-arm64-cli.mjs

product-release-identity.mjsCentralize authoritative product release identity +137/-0

Centralize authoritative product release identity

• Validates matching root, Desktop, and CLI versions plus the sole public command, then derives artifact names, tag, source SHA, and pinned toolchain outputs.

scripts/product-release-identity.mjs

release-version.mjsShare canonical product version parsing +31/-0

Share canonical product version parsing

• Adds strict semantic-version parsing used by both product release and npm channel identity validation.

scripts/release-version.mjs

Bug fix (4) +202 / -261
release-cli-finalize.ymlMake npm finalization release-state read-only +17/-158

Make npm finalization release-state read-only

• Renames finalization as an npm channel operation, verifies the exact stage attempt and public package, and removes Git tag and GitHub Release publication.

.github/workflows/release-cli-finalize.yml

release-cli-stage.ymlBind npm staging to the existing product release +65/-9

Bind npm staging to the existing product release

• Resolves the product tag and Release, builds their exact commit, records product and workflow SHAs separately, and rechecks identity immediately before staging.

.github/workflows/release-cli-stage.yml

product-release-tag.mjsCreate product tags exactly and race-safely +76/-0

Create product tags exactly and race-safely

• Ensures a canonical version tag points to the requested commit, tolerates an identical concurrent creation, and rejects conflicting identities.

scripts/product-release-tag.mjs

release-cli-publication.mjsRecord product-bound npm publication identity +44/-94

Record product-bound npm publication identity

• Moves npm records to schema version two, records product and workflow identities separately, shares product version parsing, and removes npm-specific GitHub Release handling.

scripts/release-cli-publication.mjs

Refactor (2) +186 / -54
release-cli-file-policy.mjsDerive shared CLI runtime payload policy +149/-0

Derive shared CLI runtime payload policy

• Adds manifest-derived workspace closure and build ordering, safe 'releaseFiles' validation, repository-bound workspace resolution, and caller-independent npm configuration.

scripts/release-cli-file-policy.mjs

release-cli-package.mjsApply manifest-derived policy to npm tarballs +37/-54

Apply manifest-derived policy to npm tarballs

• Replaces hard-coded workspace and Eval asset lists with shared manifest policy, dependency-aware builds, unified pruning, and isolated npm configuration.

scripts/release-cli-package.mjs

Tests (6) +476 / -120
cli.test.tsEnforce the single public CLI command +1/-2

Enforce the single public CLI command

• Updates manifest and help assertions to require 'maka' and reject references to the removed alias.

packages/cli/src/tests/cli.test.ts

product-release.test.mjsTest unified release and standalone packaging contracts +380/-0

Test unified release and standalone packaging contracts

• Covers identity, exact tag behavior, toolchain pinning, workspace payloads, native policy, signing inputs, workflow gating, recovery, and npm authority separation.

scripts/product-release.test.mjs

release-cli-file-policy.test.mjsTest workspace closure and release file safety +43/-0

Test workspace closure and release file safety

• Adds coverage for dependency-aware build order and rejects release paths that escape or overlap workspace payloads.

scripts/release-cli-file-policy.test.mjs

release-cli-publication.test.mjsTest product-bound npm publication records +25/-86

Test product-bound npm publication records

• Updates publication tests for product tags, separate source and workflow SHAs, read-only finalization, and removal of npm-specific release metadata.

scripts/release-cli-publication.test.mjs

release-cli-workflow-policy.test.mjsEnforce npm channel workflow boundaries +27/-26

Enforce npm channel workflow boundaries

• Verifies staging uses the exact product commit and rechecks its tag and Release, while finalization cannot mutate product release state.

scripts/release-cli-workflow-policy.test.mjs

smoke-release-cli-package.mjsRemove smoke coverage for the retired CLI alias +0/-6

Remove smoke coverage for the retired CLI alias

• Stops locating and executing 'maka-agent', leaving installed-package smoke validation focused on the public 'maka' command.

scripts/smoke-release-cli-package.mjs

Documentation (9) +192 / -87
RELEASE_CHECKLIST.mdExpand the checklist to the unified product release +71/-28

Expand the checklist to the unified product release

• Documents required Desktop, CLI/TUI, and source artifacts, exact Draft recovery rules, and independent macOS and Windows acceptance procedures.

.github/RELEASE_CHECKLIST.md

README.mdLink the CLI distribution contract +1/-0

Link the CLI distribution contract

• Adds the standalone CLI/TUI distribution contract to the documentation authority map.

docs/README.md

cli-distribution.mdDefine the standalone CLI/TUI distribution contract +74/-0

Define the standalone CLI/TUI distribution contract

• Documents the ZIP’s public command, metadata schema, runtime payload, signing model, release authority, and relationship to npm and Homebrew.

docs/cli-distribution.md

cli-npm-release.mdReframe npm as a product-bound installation channel +18/-25

Reframe npm as a product-bound installation channel

• Updates the English runbook so staging consumes the existing product tag and finalization performs verification without creating another release.

docs/cli-npm-release.md

cli-npm-release.zh-CN.mdUpdate the Chinese npm channel runbook +17/-23

Update the Chinese npm channel runbook

• Mirrors the product-bound staging and read-only finalization model in the Simplified Chinese release documentation.

docs/cli-npm-release.zh-CN.md

runtime-host-remote-access.mdUse the sole public maka command for managed setup +2/-2

Use the sole public maka command for managed setup

• Updates one-off Runtime Host setup and uninstall examples to select 'maka-agent' while invoking 'maka'.

docs/runtime-host-remote-access.md

runtime-host-remote-access.zh-CN.mdUpdate Chinese Runtime Host command examples +2/-2

Update Chinese Runtime Host command examples

• Uses the sole public 'maka' executable in the Simplified Chinese managed Runtime Host instructions.

docs/runtime-host-remote-access.zh-CN.md

README.mdDocument maka as the only public CLI command +4/-4

Document maka as the only public CLI command

• Removes the 'maka-agent' executable alias and updates npm one-off and Runtime Host examples accordingly.

packages/cli/README.md

README.zh-CN.mdDocument the sole CLI command in Chinese +3/-3

Document the sole CLI command in Chinese

• Updates Simplified Chinese installation and Runtime Host examples to invoke only 'maka'.

packages/cli/README.zh-CN.md

Other (9) +1412 / -6
ci.ymlRun release contracts in CI +2/-0

Run release contracts in CI

• Adds 'npm run check:release' to the primary CI job so release-policy regressions fail normal validation.

.github/workflows/ci.yml

cli-package-validation.ymlValidate an explicit product source commit +9/-0

Validate an explicit product source commit

• Adds a reusable 'source_commit' input and checks out that exact commit in all CLI package validation jobs.

.github/workflows/cli-package-validation.yml

release.ymlIntroduce the unified product release workflow +462/-0

Introduce the unified product release workflow

• Coordinates authoritative identity resolution, Desktop builds, signed standalone CLI packaging, source bundling, checksum gating, exact tag creation, and recoverable Draft publication.

.github/workflows/release.yml

package-lock.jsonSynchronize CLI identity and release tooling dependencies +4/-4

Synchronize CLI identity and release tooling dependencies

• Updates the CLI workspace version and command mapping, and records the new pinned YAML development dependency.

package-lock.json

package.jsonDeclare the release toolchain and release commands +11/-2

Declare the release toolchain and release commands

• Pins Node and npm release inputs, adds standalone package and verification commands, includes product release tests, and adds YAML parsing support.

package.json

package.jsonDeclare Eval runtime release assets +15/-0

Declare Eval runtime release assets

• Adds a manifest-owned 'releaseFiles' list for compiled output and the Harbor resources required by packaged Eval execution.

packages/eval/package.json

ci-test-plan.mjsRoute release workflow changes to contract tests +6/-0

Route release workflow changes to contract tests

• Classifies the unified release workflow as code requiring focused release-contract validation.

scripts/ci-test-plan.mjs

release-eval-smoke-sitecustomize.pyProvide an offline Harbor fixture for release verification +190/-0

Provide an offline Harbor fixture for release verification

• Implements the minimal Harbor API surface needed to exercise packaged Eval runner and relay assets deterministically without providers or network access.

scripts/release-eval-smoke-sitecustomize.py

verify-macos-arm64-cli.mjsVerify the standalone CLI artifact end to end +713/-0

Verify the standalone CLI artifact end to end

• Validates archive safety, checksums, metadata, workspace and dependency closure, notices, native architecture, signatures, relocation, CLI behavior, streaming patches, Eval execution, and PTY TUI startup.

scripts/verify-macos-arm64-cli.mjs

@qodo-code-review

qodo-code-review Bot commented Aug 19, 2026

Copy link
Copy Markdown

Code Review by Qodo

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

Grey Divider


Action required

1. Missing desktop checksum generation ✓ Resolved 🐞 Bug ≡ Correctness
Description
The publish job requires Maka-<version>-mac-arm64.dmg.sha256 and
Maka-<version>-win-x64.exe.sha256, but the macOS and Windows packaging scripts only create/assert
the installer, ZIP, and updater metadata. Consequently every product release fails at the
required-artifact check before a Draft Release can be created.
Code

.github/workflows/release.yml[R397-400]

+          )
+          for name in "${required[@]}"; do
+            test -f "release-assets/${name}"
+          done
Relevance

●●● Strong

Recent release-review precedent accepts concrete artifact-validation failures; PR #3192 explicitly
publishes checksum sidecars.

PR-#3192

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The added required-set check explicitly tests for both desktop .sha256 files. The macOS packaging
implementation only asserts a DMG, ZIP, and latest-mac.yml; the Windows implementation likewise
only asserts an EXE, ZIP, and latest.yml, and neither path writes a SHA-256 sidecar.

.github/workflows/release.yml[386-403]
scripts/package-macos-arm64.mjs[64-84]
scripts/package-windows-x64.mjs[75-97]

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

## Issue description
The unified release publish job now requires `.sha256` sidecars for the macOS DMG and Windows EXE, but neither packaging job creates them. The release therefore always fails before publication.

## Issue Context
The hashes must be created after the final macOS notarization/stapling and after the final Windows installer is verified, then included by the existing `Maka-*` artifact upload glob. Do not add a second release authority or release path; this is a local artifact-production correction.

## Fix Focus Areas
- .github/workflows/release.yml[169-208]
- scripts/package-macos-arm64.mjs[64-84]
- scripts/package-windows-x64.mjs[75-97]

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


Grey Divider

Context sources
✅ Web pages:
  +2 more
Review mode: 🧠 Deep: This release-system overhaul spans multiple workflows, publication identities, packaging policies, and verification paths with substantial new logic and many independent failure modes, making redundant review materially valuable.

Grey Divider

Tip of the day
💡 Did you know, you can show, collapse, or hide each part of a finding: code, evidence, and all

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

Comment thread .github/workflows/release.yml

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 4

🧹 Nitpick comments (6)
scripts/verify-macos-arm64-cli.mjs (1)

207-225: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Import realpath at the top of the file and delete the inline dynamic imports.

Lines 216-219 and Lines 342-347 call import('node:fs/promises') four times only to obtain realpath. The file already imports named members from node:fs/promises at Line 4-14. Adding realpath there removes four dynamic imports with no behavior change.

Disposition: optional.

♻️ Proposed simplification
   readFile,
   readdir,
+  realpath,
   rm,
-    const [resolvedLink, resolvedPackage] = await Promise.all([
-      import('node:fs/promises').then(({ realpath }) => realpath(linkPath)),
-      import('node:fs/promises').then(({ realpath }) => realpath(packagePath)),
-    ]);
+    const [resolvedLink, resolvedPackage] = await Promise.all([
+      realpath(linkPath),
+      realpath(packagePath),
+    ]);

As per path instructions: "Flag concrete cases where code can be deleted or simplified."

Source: Path instructions

scripts/product-release.test.mjs (2)

206-225: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

This assertion is a change detector for the Eval manifest.

workspaceReleaseFiles reads the declaration from packages/eval/package.json. The test then compares it against a hand-copied duplicate of that same list. Any harbor asset added or renamed breaks this test even though no behavior changed, and the fix is always to re-copy the manifest.

The stated contract is "the Eval workspace owns the complete runtime asset declaration". Assert that property instead: dist is present, every entry is a real path under the workspace, and no development directory leaks in. That still fails when the declaration is wrong and stops failing when the declaration merely grows.

As per path instructions: "Flag tests that duplicate existing coverage, assert implementation details, or do not protect observable behavior."

Source: Path instructions


200-203: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Line 201 pins shell syntax, not the relocatability contract.

/while \[ -L "\$launcher" \]/u fails if the wrapper resolves symlinks with any other correct construct. The two following assertions are different: they pin the embedded runtime path and the CLI entry, which are contract. The symlink behavior itself is already covered by the acceptance step in .github/RELEASE_CHECKLIST.md line 72 and by verify-macos-arm64-cli.mjs.

Consider dropping Line 201 or replacing it with an assertion that the wrapper never references an absolute build-time path.

As per path instructions: "Flag tests that duplicate existing coverage, assert implementation details, or do not protect observable behavior."

Source: Path instructions

.github/workflows/release-cli-stage.yml (1)

40-54: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

The commit assertion at Line 52 cannot fail.

git rev-list -n 1 FETCH_HEAD and git rev-parse "FETCH_HEAD^{commit}" both peel to the same commit. The comparison is always true, so it adds no protection against an annotated tag or a non-commit target.

Delete the redundant line, or replace it with a check that actually constrains the target.

As per path instructions: "Flag concrete cases where code can be deleted or simplified."

♻️ Proposed simplification
           git fetch --no-tags origin "refs/tags/$PRODUCT_TAG"
           source_commit="$(git rev-list -n 1 FETCH_HEAD)"
-          test "$(git rev-parse "FETCH_HEAD^{commit}")" = "$source_commit"
           echo "source_commit=$source_commit" >> "$GITHUB_OUTPUT"

Source: Path instructions

scripts/release-cli-publication.test.mjs (1)

82-94: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add negative coverage for the new productTag guard.

prepareStageRelease now rejects a productTag that does not equal v<version>. The tests only exercise the matching value. The drift tests cover version confirmation and checksum drift, but not tag drift.

Add one assertion that a mismatched productTag throws.

scripts/release-cli-workflow-policy.test.mjs (1)

62-63: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Line 63 duplicates the invariant already covered by Line 62.

Line 62 asserts the workflow delegates version validation to scripts/release-version.mjs. Line 63 additionally asserts that no inline bash regex compares EXPECTED_VERSION. That second assertion matches on incidental text shape and breaks if the step is reformatted, without protecting extra observable behavior.

Consider removing Line 63.

As per path instructions: "Flag tests that duplicate existing coverage, assert implementation details, or do not protect observable behavior."

Source: Path instructions


ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 53dae729-1ce9-4711-9e7c-6a49a45fa7e9

📥 Commits

Reviewing files that changed from the base of the PR and between dc65776 and 55e7055.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (35)
  • .github/RELEASE_CHECKLIST.md
  • .github/workflows/ci.yml
  • .github/workflows/cli-package-validation.yml
  • .github/workflows/release-cli-finalize.yml
  • .github/workflows/release-cli-stage.yml
  • .github/workflows/release-desktop.yml
  • .github/workflows/release.yml
  • docs/README.md
  • docs/cli-distribution.md
  • docs/cli-npm-release.md
  • docs/cli-npm-release.zh-CN.md
  • docs/runtime-host-remote-access.md
  • docs/runtime-host-remote-access.zh-CN.md
  • package.json
  • packages/cli/README.md
  • packages/cli/README.zh-CN.md
  • packages/cli/package.json
  • packages/cli/src/__tests__/cli.test.ts
  • packages/cli/src/cli-core.ts
  • packages/eval/package.json
  • scripts/ci-test-plan.mjs
  • scripts/package-macos-arm64-cli.mjs
  • scripts/product-release-identity.mjs
  • scripts/product-release-tag.mjs
  • scripts/product-release.test.mjs
  • scripts/release-cli-file-policy.mjs
  • scripts/release-cli-file-policy.test.mjs
  • scripts/release-cli-package.mjs
  • scripts/release-cli-publication.mjs
  • scripts/release-cli-publication.test.mjs
  • scripts/release-cli-workflow-policy.test.mjs
  • scripts/release-eval-smoke-sitecustomize.py
  • scripts/release-version.mjs
  • scripts/smoke-release-cli-package.mjs
  • scripts/verify-macos-arm64-cli.mjs
💤 Files with no reviewable changes (3)
  • scripts/smoke-release-cli-package.mjs
  • packages/cli/src/cli-core.ts
  • .github/workflows/release-desktop.yml

Included review availability: Your plan provides up to 3 included reviews per hour; 2 remain after this review.

Comment thread docs/cli-distribution.md Outdated
Comment thread docs/cli-npm-release.md
Comment thread scripts/package-macos-arm64-cli.mjs
Comment thread scripts/release-cli-publication.mjs Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 2


ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 28261e16-0e19-4033-9efb-a3ccd733d89c

📥 Commits

Reviewing files that changed from the base of the PR and between 55e7055 and de78d98.

📒 Files selected for processing (18)
  • .github/RELEASE_CHECKLIST.md
  • .github/workflows/release-cli-finalize.yml
  • .github/workflows/release-cli-stage.yml
  • .github/workflows/release.yml
  • docs/cli-distribution.md
  • docs/cli-npm-release.md
  • docs/cli-npm-release.zh-CN.md
  • scripts/package-macos-arm64-cli.mjs
  • scripts/product-release-identity.mjs
  • scripts/product-release.test.mjs
  • scripts/release-checksum.mjs
  • scripts/release-cli-file-policy.mjs
  • scripts/release-cli-file-policy.test.mjs
  • scripts/release-cli-package.mjs
  • scripts/release-cli-publication.mjs
  • scripts/release-cli-publication.test.mjs
  • scripts/release-cli-workflow-policy.test.mjs
  • scripts/verify-macos-arm64-cli.mjs

Included review availability: Your plan provides up to 3 included reviews per hour; 0 remain after this review.

Comment thread .github/RELEASE_CHECKLIST.md
Comment thread docs/cli-npm-release.md

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🧹 Nitpick comments (1)
package.json (1)

55-58: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Reuse test:product-release in check:release.

Line 55 and Line 58 both define the scripts/product-release.test.mjs invocation. Use npm run test:product-release in check:release so the test command has one source of truth.

Disposition: optional.

As per path instructions, consolidate duplicated authority and prefer the closest existing seam.

Source: Path instructions


ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 3468f886-510c-49cc-b6e1-d05de8143930

📥 Commits

Reviewing files that changed from the base of the PR and between c4a3c59 and a395694.

📒 Files selected for processing (5)
  • .github/RELEASE_CHECKLIST.md
  • docs/cli-npm-release.md
  • docs/cli-npm-release.zh-CN.md
  • package.json
  • scripts/smoke-release-cli-package.mjs

Included review availability: Your plan provides up to 3 included reviews per hour; 1 remains after this review.

Comment thread .github/RELEASE_CHECKLIST.md Outdated
Comment thread docs/cli-npm-release.md
Comment thread package.json Outdated
@Astro-Han

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@Astro-Han

Copy link
Copy Markdown
Contributor Author

/agentic_review

@Astro-Han
Astro-Han requested a review from M4n5ter August 20, 2026 11:01
Make the root product version, one main commit, one tag, and one draft GitHub Release authoritative for Desktop, the standalone macOS arm64 CLI/TUI, and bundled source. Keep the staged OIDC npm workflow as a verified install channel without a competing tag or release.

Generated-by: Codex

@M4n5ter M4n5ter left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

English

Requesting changes. The overall one-version/one-tag/one-Draft design is coherent, but the current implementation is not release-ready:

  • formal CLI re-signing drops the pinned Node runtime's entitlements;
  • npm staging is guaranteed to reject the repository's current apache/maka identity, and the Trusted Publisher instructions are also stale;
  • the product release source is not bound to the IPMC-approved ASF source identity;
  • release-authority changes do not actually select the release-contract CI gate;
  • Apple signing verifies consistency, but not Maka's expected publisher Team ID.

The Windows package failure on this head is unrelated to this diff: it failed in the unchanged CDP readiness harness, the same symptom occurred on unrelated PRs today, and #3327 is already addressing that harness.

The simplify audit converged on the same two root reductions: remove the independent arbitrary-main product-source authority in favor of the approved ASF source identity, and remove the ineffective parallel CI routing concept by giving release-contract paths one real owner.

Reviewed at 929f2a134a58c5ff873b97f79e3c325e9ad93597. Focused publication/workflow-policy tests, file-policy tests, planner tests, and git diff --check passed. Developer ID signing, notarization, npm OIDC staging, and cross-machine artifact acceptance were not executed in this environment.

简体中文

请求修改。整体的单版本、单 tag、单 Draft 设计是连贯的,但当前实现还不能用于发布:

  • 正式 CLI 重签名会丢失固定 Node runtime 的 entitlements;
  • npm staging 必然拒绝当前仓库的 apache/maka identity,Trusted Publisher 指南也仍是旧仓库;
  • product release source 没有绑定到获 IPMC 批准的 ASF source identity;
  • release authority 变更实际上不会选择 release-contract CI gate;
  • Apple 签名只验证内部一致性,没有验证 Maka 预期的 publisher Team ID。

当前 head 的 Windows package 失败与本 PR diff 无关:失败发生在未修改的 CDP readiness harness,同一天多个无关 PR 出现了相同症状,且已有 #3327 专门处理。

Simplify audit 收敛到相同的两个根因简化:删除独立的 arbitrary-main product-source authority,统一使用已批准的 ASF source identity;删除无效的并行 CI 路由概念,让所有 release-contract 路径只有一个真实 owner。

审查基于 929f2a134a58c5ff873b97f79e3c325e9ad93597。定向 publication/workflow-policy、file-policy、planner 测试以及 git diff --check 均通过。本环境未执行 Developer ID signing、notarization、npm OIDC staging 和跨机器 artifact acceptance。

await run(
'codesign',
[
'--force',

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

English

[Blocking] Preserve Node's required entitlements when re-signing it

This loop force-replaces every Mach-O signature with hardened runtime, but passes neither --entitlements nor --preserve-metadata=entitlements. The pinned official Node v24.18.1 signs bin/node with tools/osx-entitlements.plist, including com.apple.security.cs.allow-jit; its official signing script applies that plist explicitly. Apple's re-signing guidance likewise requires entitlements to be preserved or reapplied.

The release-signing path therefore removes metadata that the official runtime deliberately carries, after the earlier validation has accepted it. The final verifier checks only signature validity, Team ID consistency, and hardened-runtime flags, so it cannot detect the loss. A development ZIP may work while the formally signed artifact contains a Node runtime without its required JIT authority.

Please handle the embedded Node executable separately: preserve or explicitly reapply its verified entitlements, then assert the post-signing entitlements in the final archive verifier. Node-specific entitlements should not be applied indiscriminately to every native dependency.

简体中文

[Blocking] 重签嵌入式 Node 时必须保留其必要 entitlements

这里用 hardened runtime 强制替换每个 Mach-O 的签名,却既没有传入 --entitlements,也没有使用 --preserve-metadata=entitlements。当前固定的官方 Node v24.18.1 会使用 tools/osx-entitlements.plist 签署 bin/node,其中包括 com.apple.security.cs.allow-jit;Node 的官方签名脚本也会显式应用该 plist。Apple 对重签名的指导同样要求显式保留或重新应用 entitlements。

因此,正式发布路径会在前面验证并接受官方 Node 后,移除其刻意携带的签名元数据。最终 verifier 只检查签名有效性、Team ID 一致性和 hardened-runtime flag,无法发现 entitlements 已丢失。开发 ZIP 可能正常,而正式签名的产物却包含缺少必要 JIT 权限的 Node runtime。

请单独处理嵌入式 Node:保留或显式重新应用已经验证的 entitlements,并在最终 archive verifier 中检查重签后的 entitlement。不要把 Node 专属 entitlement 无差别应用到所有 native dependency。

if (productTag !== `v${identity.version}`) {
throw new Error(`Product tag ${productTag} does not match ${identity.version}`);
}
validateSourceIdentity({

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

English

[Blocking] Bind npm publication to the current canonical repository

The live repository and Actions identity are now apache/maka, but this release boundary still requires maka-agent/maka-agent. Stage passes ${{ github.repository }} into prepareStageRelease, so every run in the current repository reaches validateSourceIdentity and fails with Release repository must be maka-agent/maka-agent before release.json is created or npm staging begins.

Fixing only the constant is insufficient: both npm runbooks still instruct operators to configure the Trusted Publisher as organization/repository maka-agent / maka-agent, while the OIDC claim will identify apache/maka. Please update the canonical identity, fixtures and provenance expectations, both runbooks, and the actual npm Trusted Publisher configuration to apache/maka. There is no need for an old-owner compatibility path.

简体中文

[Blocking] 将 npm 发布身份绑定到当前 canonical repository

当前实际仓库和 Actions identity 已经是 apache/maka,但这个发布边界仍强制要求 maka-agent/maka-agent。Stage 会把 ${{ github.repository }} 传给 prepareStageRelease,因此当前仓库中的每次运行都会在创建 release.json 或进入 npm staging 之前,由 validateSourceIdentity 抛出 Release repository must be maka-agent/maka-agent

仅修改常量仍不完整:中英文 npm runbook 仍要求把 Trusted Publisher 配置成 organization/repository maka-agent / maka-agent,而实际 OIDC claim 会是 apache/maka。请将 canonical identity、测试 fixture、provenance expectation、中英文 runbook,以及 npm 控制面上的 Trusted Publisher 一并更新为 apache/maka。无需保留旧 owner 的兼容路径。

- name: Check out the dispatched commit
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
ref: ${{ inputs.source_commit || github.sha }}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

English

[Blocking] Derive product releases from the approved ASF source identity

Current main now defines the ASF release authority in .github/ASF_SOURCE_RELEASE.md: Desktop and npm convenience artifacts must be built from the exact IPMC-approved source release. This workflow instead treats the dispatch-time main SHA as an independent product source and accepts an explicit historical SHA only after a product tag already exists for Draft recovery.

That creates two release authorities and also makes the supported flow impossible when main advances during the required ASF vote: the approved RC commit can no longer be selected for an initial product release. More importantly, neither this workflow nor the publication checklist prevents publishing convenience artifacts from a different, unapproved commit.

Please make the approved ASF RC commit/tag the sole product source authority. The product v<version> tag may remain as a convenience alias, but it must resolve to that same commit. The checklist should require the completed ASF votes before publication, and workflow contracts should reject an arbitrary main commit. This also removes the implicit requirement to keep two independently selected source identities synchronized by hand.

简体中文

[Blocking] 产品发布必须派生自已批准的 ASF source identity

当前 main 已在 .github/ASF_SOURCE_RELEASE.md 中定义 ASF 发布权威:Desktop 和 npm convenience artifacts 必须来自获 IPMC 批准的同一个精确 source release。这个 workflow 却把 dispatch 时的 main SHA 当作独立的产品 source;历史 SHA 只有在 product tag 已存在、用于 Draft recovery 时才允许传入。

这形成了两套 release authority,并且当 ASF 投票期间 main 前进后,受支持的流程无法再从已批准的 RC commit 创建首次 product release。更关键的是,当前 workflow 和 publication checklist 都不能阻止从另一个未经批准的 commit 发布 convenience artifacts。

请把已批准 ASF RC 的 commit/tag 作为唯一 product source authority。产品 v<version> tag 可以继续作为 convenience alias,但必须指向同一 commit。Checklist 应在 publication 前要求 ASF 投票已经完成,workflow contract 应拒绝任意 main commit。这样也能删除依靠人工保持两套 source identity 同步的隐式要求。

Comment thread scripts/ci-test-plan.mjs
code = true;
continue;
}
if (RELEASE_CONTRACT_FILES.has(path)) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

English

[Important] Make release-authority files actually select the release-contract gate

RELEASE_CONTRACT_FILES only sets code = true, while CI runs npm run check:release exclusively when cli_package == true. A directed planner probe returns cliPackage: false for release.yml, all three CLI release workflows, the new product identity/tag scripts, the standalone packager/verifier, checksum helpers, and even product-release.test.mjs.

Consequently, future changes can break these release workflows or their own contract tests while CI remains green. The existing test named “product workflow changes select the release contracts in CI” only asserts code === true, so it preserves the gap.

Please consolidate these paths into the classifier that actually owns the release gate—or introduce a dedicated release_contract output—and test that every release authority, implementation, and contract-test path really triggers npm run check:release. The separate RELEASE_CONTRACT_FILES branch can then be deleted.

简体中文

[Important] Release authority 文件必须真正选择 release-contract gate

RELEASE_CONTRACT_FILES 只会设置 code = true,而 CI 仅在 cli_package == true 时运行 npm run check:release。定向执行 planner 后,release.yml、另外三个 CLI release workflow、新增的 product identity/tag 脚本、standalone packager/verifier、checksum helper,甚至 product-release.test.mjs 本身得到的都是 cliPackage: false

因此,后续修改可以破坏这些发布 workflow 或它们自己的 contract test,而 CI 仍保持绿色。现有名为 “product workflow changes select the release contracts in CI” 的测试只断言 code === true,恰好掩盖了这个缺口。

请将这些路径合并到真正拥有 release gate 的 classifier,或者增加独立的 release_contract output,并测试每个 release authority、实现和 contract-test 路径确实会触发 npm run check:release。随后可以删除单独但无效的 RELEASE_CONTRACT_FILES 分支。

export function parseDeveloperIdApplicationIdentity(output) {
const identities = [...output.matchAll(/^\s*\d+\)\s+([0-9A-Fa-f]{40})\s+"([^"]+)"\s*$/gmu)]
.map((match) => ({ hash: match[1].toUpperCase(), name: match[2] }))
.filter(({ name }) => name.startsWith('Developer ID Application:'));

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

English

[Important] Verify Maka's expected Apple publisher identity

This accepts any valid Developer ID Application certificate. The final verifier then derives the expected TeamIdentifier from the first binary and only checks that every other binary uses the same team. A coherent but incorrect credential bundle—for example, a certificate and notarization credentials belonging to another Apple Developer team—would therefore pass signing, notarization, codesign, spctl, and final verification while publishing Maka under the wrong publisher identity.

Please pin the expected TeamIdentifier in reviewable product-release configuration, verify it immediately after importing the certificate and again from every binary in the final extracted ZIP, and record/report it in RELEASE.json or the acceptance evidence. The expected authority should not be derived from the artifact being verified.

简体中文

[Important] 验证 Maka 预期的 Apple publisher identity

这里会接受任意有效的 Developer ID Application certificate。最终 verifier 又从第一个 binary 自举 expected TeamIdentifier,只检查其他 binary 是否来自同一个 team。因此,一整套有效但错误的凭据——例如属于另一个 Apple Developer team 的证书和配套 notarization credentials——仍能通过 signing、notarization、codesignspctl 和最终验证,却会把 Maka 发布成错误的 publisher identity。

请在可 review 的 product-release 配置中固定预期 TeamIdentifier,在导入证书后立即验证,并从最终 ZIP 解压出的每个 binary 再次验证;同时将其记录或输出到 RELEASE.json 或 acceptance evidence。预期 authority 不应从待验证 artifact 自身推导。

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.

feat(release): distribute CLI/TUI for macOS arm64

2 participants