blob: 52a6c37e487a78f4060be134fe41e0bca391e868 [file] [view]
---
doc_id: cli-distribution
title: "CLI/TUI convenience distribution contract"
language: en
source_language: en
implementation_status: current
document_status: current
translation_status: source-only
last_verified: 2026-09-04
owners:
- maka-backend
---
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
# CLI/TUI convenience distribution contract
Maka's Apache release is the IPMC-approved source archive on ASF distribution infrastructure. The
CLI/TUI ZIP and Desktop installers are required convenience artifacts built from that exact source
identity. Phase 1
publishes one signed and notarized Apple Silicon artifact:
`Maka-<version>-cli-mac-arm64.zip`
The ZIP contains an exactly pinned official Node runtime and the production workspace/npm
dependency closure derived from repository manifests and `package-lock.json`. It does not use a
system Node installation or a single-file/SEA build.
## Public contract
Only these surfaces are stable:
- `bin/maka`, including invocation through a symlink outside the extracted archive;
- the documented `RELEASE.json` fields below.
`libexec/**` is private and may change between releases. There is no public `maka-agent` launcher.
The TUI is the default interactive mode of `maka`, not a separate artifact.
`RELEASE.json` fields:
| Field | Meaning |
| --- | --- |
| `schemaVersion` | Metadata schema version, initially `1` |
| `product` | Product name, `Maka` |
| `version` | Root `package.json` product version |
| `sourceCommit` | Exact source commit shared by every release artifact |
| `platform` / `architecture` | Artifact target, `macos` / `arm64` |
| `publicCommands` | Public command list; exactly `["maka"]` in Phase 1 |
| `node` | Official Node version, source URL, archive name, and archive SHA-256 |
| `npmVersion` | Exact npm version used to materialize the production closure |
| `dependencyPatches` | Sorted repository patches applied to the staged dependencies |
| `productionDependencies` | Sorted external `name@version` production closure |
| `thirdPartyNoticesSha256` | Digest binding notices to this artifact |
| `workspacePackages` | Sorted manifest-derived production workspace closure |
| `machOBinaries` | Sorted paths of every Mach-O file that must be signed and verified |
| `signing` | `developer-id-notarized` for release artifacts; `development` for local checks |
The CLI-specific `THIRD_PARTY_NOTICES.txt` must enumerate exactly the external production
dependencies recorded in `RELEASE.json`. The archive also carries the repository's
`DISCLAIMER-WIP`, `LICENSE`, `NOTICE`, and the pinned Node runtime license. The archive checksum is
generated only after signing and notarization complete.
Every Mach-O file inside the archive is signed and the ZIP is submitted to Apple's notary service.
ZIP files cannot carry a stapled notarization ticket, so the first Gatekeeper assessment on another
Mac may require network access to retrieve the ticket from Apple. The embedded code signatures and
published SHA-256 remain available for offline verification; do not describe the ZIP itself as
stapled.
## Release and installation boundary
Root `package.json` is the sole version authority. Desktop and CLI manifests must match before
packaging. Desktop, CLI/TUI, and source jobs build independently from one commit; one publish job
collects their verified outputs and creates one Draft GitHub Release.
The GitHub Release ZIP is the standalone convenience distribution source. Its exact bytes are
covered by a Sigstore provenance bundle signed with the protected Finalize workflow identity. npm keeps its
installer-specific tarball, OIDC, staged-publishing, and 2FA approval flow, but may start only after
the product `v<version>` tag and GitHub Release exist. It checks out that tag's exact commit and
derives the same version, runtime closure, file policy, notices, and source identity. It does not
create a tag or GitHub Release and does not block creation of the product Draft. Homebrew must
consume the standalone ZIP.
## Decision ledger
| Question | Decision | Enforced by |
| --- | --- | --- |
| Which file owns the product version? | Root `package.json`; Desktop and CLI manifests must match it. | `product-release-identity.mjs` and release contract tests |
| Which event defines the Apache release? | The approved source archive and vote result. The `v<version>` tag and Draft GitHub Release identify convenience distributions built from that source commit. | ASF source-release workflow plus `release.yml` identity and exact-tag checks |
| Which convenience artifacts are required? | macOS, Windows, and Linux Desktop installers and update assets plus the macOS arm64 standalone CLI ZIP. | The exact manifest from `product-release-identity.mjs`, enforced by each artifact job and the publish job |
| Is npm another release authority? | No. It is an optional install channel whose Stage ref, source, workflow identity, and provenance all resolve to the existing product tag commit. | Tag-dispatched OIDC staging and read-only finalization; no npm-specific tag or GitHub Release |
| Does the standalone CLI define another package policy? | No. It derives the workspace closure, third-party pruning, notices, and Eval runtime assets from their current manifests and shared policy. | Packaging and artifact contract tests |
| Which commands are public? | `maka` only; TUI is its default mode. | CLI manifest, help tests, wrapper, and release metadata |