The IPMC-approved source archive on ASF distribution infrastructure is the Apache release. The Release workflow is Maka's convenience-artifact distribution entry point. Desktop and CLI/TUI are built from the exact IPMC-approved ASF source candidate commit. They share that source commit, the root product version, one convenience tag, one GitHub Release, one Draft decision, and one distribution gate. The workflow creates no Draft until every required artifact job succeeds.
Phase 1 requires:
The convenience Desktop artifacts must not contain a Git runtime, a bundled-Git manifest, or Git/Dugite redistribution notices. The retired Git executable-backed managed-workspace path must not be restored; future workspace execution requires a separately reviewed Gitoxide production composition before admission/T1.
The first product release also requires the exact maka-agent@<version> npm package. The product tag and Draft must exist before npm staging, but the Draft must remain unpublished until npm is public, Finalize has verified it, and Desktop acceptance has exercised remote Runtime Host setup.
Create a protected GitHub Environment named release, require the appropriate reviewers, and configure:
CSC_LINK: base64-encoded Developer ID Application .p12;CSC_KEY_PASSWORD: password for that .p12;APPLE_API_KEY: raw contents of an App Store Connect API .p8 key;APPLE_API_KEY_ID: App Store Connect API key ID;APPLE_API_ISSUER: App Store Connect API issuer ID.The checked-in release configuration pins Maka's Apple Team ID to FABM2QUA8Q. Confirm every replacement CSC_LINK belongs to that team before changing credentials; changing the pinned Team ID requires its own reviewed product-release change.
Windows remains unsigned until an Authenticode policy and certificate are added. Release secrets must never be exposed to fork or ordinary pull-request jobs.
Before the first product release, confirm the checked-in .asf.yaml has reconciled the live repository:
Immutable release tags ruleset blocks updates, force-pushes, and deletions of v* tags;release Environment accepts only its declared source-candidate tag pattern and requires a reviewer other than the triggering user;npm-publication, nightly, and product-release accept only main; product-release requires a reviewer other than the triggering user. npm-publication and nightly have no GitHub approval gate because scheduled npm and Desktop Nightly publication is automatic; formal npm publication still requires human 2FA approval after staging.These controls close the check-to-upload and check-to-stage windows. Finalize uses GitHub Actions OIDC rather than a stored signing key to attest every convenience artifact. Keep the Release in Draft while assets and acceptance are incomplete; Desktop rejects downloaded updates whose exact bytes and expected filename are not covered by that protected workflow identity.
v<version>-incubating-rc<rc> tag.main, required CI is green for that exact commit, and root package.json contains a product version that has never been released.apps/desktop/package.json and packages/cli/package.json exactly match the root version, and the CLI manifest exposes only the maka command.Release from the exact approved candidate tag and supply the same tag as source_reference_tag. A rerun must use that same tag; never select current main instead.release-identity, every Desktop matrix entry, cli-macos-arm64, and publish pass. A skipped or failed required job must prevent Draft creation.v<version> targets the approved source SHA, identifies the ASF source reference in its notes, is not marked as a GitHub prerelease or Latest while it remains a Draft, and contains exactly the release asset names reported by node scripts/product-release-artifacts.mjs list. That list covers all three Desktop platforms and update metadata, the standalone CLI/TUI, and their required checksums.bin/maka, RELEASE.json, DISCLAIMER-WIP, LICENSE, NOTICE, THIRD_PARTY_NOTICES.txt, the pinned Node license, and no bin/maka-agent.RELEASE.json records the Draft‘s product version and source SHA, Apple Team ID FABM2QUA8Q, the official Node URL/archive/digest, npm version, workspace and production dependency closures, dependency patches, Mach-O inventory, and developer-id-notarized signing state. Its final Node entitlements must retain the required hardened-runtime capabilities and omit com.apple.security.get-task-allow, as required by Apple’s notarization guidance.git/, bundled-git.json, licenses/git/, and licenses/dugite/ are absent.If the publish job created the product tag or Draft but failed before every asset was uploaded, rerun Release from the same approved ASF source candidate tag with the same source_reference_tag input. Existing Draft assets must exactly match the newly verified bytes; the retry keeps matching assets and uploads only missing ones. If an asset conflicts or is unexpected, inspect and remove it manually while the Release is still a Draft, then rerun. If only the tag exists, the retry creates the missing Draft.
Follow the npm release runbook against the exact product tag and Draft:
channel=formal from main and record its successful run ID and attempt.main. Its first job verifies the public package bytes, provenance, signature, and release dist-tag.Keep the GitHub Release in Draft throughout this sequence. The final workflow job waits at the product-release Environment. Approve it only after every npm and cross-machine acceptance check has passed. It verifies the live Draft digests against the immutable publication record from the exact successful Release run, creates Sigstore provenance and an offline Maka-<version>-attestation.sigstore.json bundle, then publishes the convenience Release and makes a stable release Latest in the same GitHub operation. Do not publish or change the Latest designation manually. A failed or rejected npm candidate requires a new product version; never publish the Draft to work around npm state.
Run this section twice: once on an Apple Silicon Mac with the mac-arm64 DMG, and once on an Intel Mac with the mac-x64 DMG. The CLI/TUI ships for Apple Silicon only, so steps 4 to 7 belong to the Apple Silicon pass.
Download the DMG, CLI ZIP, and their checksum files through a browser from the Draft. Do not move artifacts directly from the workflow runner; the browser path supplies the real quarantine boundary.
shasum -a 256 -c for the DMG and CLI ZIP.spctl --assess --type execute --verbose=4 /Applications/Maka.app and confirm a Developer ID origin.bin/maka --version and bin/maka --help. Keep the Mac online for this first Gatekeeper assessment: the notarized ZIP cannot carry a stapled ticket, so macOS may retrieve it from Apple.ln -s "$PWD/bin/maka" /tmp/maka-release-acceptance, and confirm the linked command reports the same version and help output.bin/maka with no arguments and confirm the TUI renders, accepts input, and exits cleanly.bin/maka run, one deterministic bin/maka eval run, and one streaming tool-call path against the packaged artifact.maka-agent@<version> package and the remote session completes one model turn.Download the installer, Windows Desktop ZIP, and both checksum files through a browser from the same Draft.
node-pty behavior.maka-agent@<version> package and the remote session completes one model turn.Run this section twice: once on x64 with the x86_64 AppImage and the amd64 deb, and once on arm64 with the arm64 pair. Download both distributables and their checksum files through a browser from the same Draft.
sha256sum -c for the AppImage and the deb.chmod +x the AppImage and launch it once to confirm the portable artifact starts.sudo apt install ./Maka-<version>-linux-<arch>.deb and launch Maka from the desktop launcher entry.node-pty behavior.maka-agent@<version> package and the remote session completes one model turn.Immediately before approving the product-release Environment, reverify that the approved ASF candidate tag and convenience v<version> tag still resolve to the same recorded commit. Approve only after npm verification and every independent-machine acceptance pass. If any required artifact, npm step, or acceptance step fails, keep the Draft unpublished, fix the issue, increment the root product version, and run the full workflow again. Never replace an existing release identity.
After Finalize publishes the convenience Release, download its attestation bundle and verify each installer or archive independently:
gh attestation verify path/to/Maka-<version>-mac-arm64.zip \ --bundle path/to/Maka-<version>-attestation.sigstore.json \ --repo apache/maka \ --signer-workflow apache/maka/.github/workflows/release-cli-finalize.yml
Desktop performs the same trust decision before exposing a downloaded update for installation.