Check a target
mars update check --repo ~/my-project
mars update check --repo ~/my-project --json
Shipping and drift
MARS uses repo-owned semantic versions, generated changelog entries, target harness version metadata, signed archive CLI updates, local release evidence, and separately gated GitHub Releases. This guide separates day-to-day user updates from source maintainer snapshot preparation and approved cutover.
Source and initialized target repos both use a root
VERSION and CHANGELOG.md. Source releases
also update internal/buildinfo/version.go so local
source-tree builds report the same version. For ownership rules
around generated assets, use the
Files And State Reference.
| File | Where | User purpose |
|---|---|---|
VERSION | Source and targets. | Repo-owned semantic version source. |
CHANGELOG.md | Source and targets. | Generated patch notes with Impact, Why, and What Changed sections. |
internal/buildinfo/version.go | MARS source only. | Fallback version for source-tree builds when release ldflags are absent. |
.harness/metadata.yaml | Target repos. | Generated harness version drift signal. |
dist/ | MARS source rehearsal work. | Four archives, four SBOMs, checksums, and temporary producer state. Only the exact publishable allowlist is candidate evidence; the directory itself proves nothing. |
Use mars update check to see whether the installed tool
or a deployed target harness is behind. Remote release lookup
failures are reported as unknown so local target checks can still
complete.
mars update check --repo ~/my-project
mars update check --repo ~/my-project --json
mars update check --repo ~/my-project --skip-remote
mars update check \
--repo ~/my-project \
--latest-release-url https://api.example.invalid/repos/org/project/releases/latest
mars update tool has source and packaged modes. Release
mode accepts only the canonical signed archive contract: it verifies
the offline Sigstore bundle over the exact checksum bytes, immutable
tag/full commit, platform/build metadata, archive digest and
structure, then durably replaces or restores the fixed binary.
Source checkout update is the current supported route; packaged
availability stays blocked until the approved F-018 cutover release.
| Path | Command | Use when |
|---|---|---|
| Source checkout | make update-tool | Current supported route from a clean clone; fast-forward and reinstall the checked source. |
| First exact signed install | scripts/install.sh vX.Y.Z /absolute/install/dir | Implemented but unusable until an approved exact signed tag exists. Requires stable Go 1.25.13+ once, an independently reviewed checkout at the same tag, and an existing owner-controlled directory. |
| Packaged dry run | mars update tool --dry-run | Use only after an approved signed release exists; previewing never grants installation authority. |
| Latest signed release | mars update tool | Blocked until F-018 cutover publishes the exact signed archive contract. |
| Specific signed release | mars update tool --version vX.Y.Z | Requires that exact approved signed contract; historical raw assets are unsupported. |
| Source install | mars update tool --source | Use Go source installation instead of release assets. |
| Main branch source | mars update tool --version main | Source-development update path for users who intentionally track main. |
make install installs the current checkout. Use
make update-tool from a clean clone when you want the
source-maintained update helper to fast-forward, reinstall, and run
path setup. Regenerate completions separately when you want updated
shell tab completion scripts.
./scripts/install.sh directly; an explicit
shell-interpreter invocation fails closed so the privileged Bash
shebang can suppress inherited functions and BASH_ENV.
Its clean body preserves only PATH, HOME,
and TMPDIR; optional GitHub tokens cross through
dedicated descriptors, remain absent from Go, and enter only the
staged signed updater. The script resolves
one absolute Go executable, disables Go auth and CGO, neutralizes
inherited build controls, applies -modcacherw, and builds the canonical
Go module through the public Go proxy and SumDB in owner-only
temporary staging. The staged command validates its own running
command/module, exact tag, canonical SHA-256 h1 sum,
and lack of replacements before invoking the signed updater with
the same tag and final directory. Archive, checksum, signature, and
durable replacement authority stay entirely inside that updater;
the bootstrap handoff skips ordinary shell-profile mutation.
Pre-commit rejection leaves an existing destination unchanged. A
recovery-required result instead requires preserving transaction
evidence and repairing from the reviewed checkout before retrying.
mars update harness fills in missing generated defaults
in a target repo. It preserves target-owned manifests, role
prompts, guardrails, skills, knowledge routes, tickets, plans,
design docs, references, and release state.
mars update harness --repo ~/my-project
mars upgrade --repo ~/my-project
upgrade and update harness use the same user-facing intent.
git -C ~/my-project status --short
git -C ~/my-project diff
Generated additions belong to the target repo after review.
Official release metadata is anonymous-first. Ordinary source
checkout install uses mars setup without GitHub
credentials. Optional auth can grant access for private forks or a
GitHub rate-limit fallback. It does not authorize publication or
prove artifact authenticity. For the full
credential map, open the
Authentication And Credentials Reference.
mars auth github check --json
The command makes one exact, no-redirect anonymous request to the official api.github.com release-metadata endpoint. Only an exact 401, 403, or 404 may resolve credentials and retry the same origin and path once.
export GH_TOKEN=...
mars auth github check --json
Token values must not be committed, printed in logs, pasted into docs, or included in traces.
mars auth github setup --token "$GH_TOKEN"
Prefer GitHub CLI auth when possible. The local fallback belongs under ~/.mars/, never in a repo.
mars auth github clear-local
This leaves environment variables, GitHub CLI and GitHub App credentials, repositories, and remote state unchanged.
The check reports anonymous, authenticated, or unavailable without revealing credential-derived information.
Release notes are generated from semantic commits and should explain
user-facing impact. The generator ignores release:
commits so the release-note commit does not create an infinite loop.
mars release notes --repo . --bump auto --dry-run
mars release notes --repo . --bump auto
mars release backfill-notes --repo . --check
mars release backfill-notes --repo . --dry-run
mars release backfill-notes --repo .
mars release backfill-notes --repo . --check
Source maintainers have an extra binary production gate. During T-065 through T-068, MARS retains the 0.68.49 version floor and records validated semantic checkpoints plus publication-disabled snapshot evidence. Tags, signatures, uploads, announcements, and a supported-release claim require the separately approved cutover.
git commit -m "docs(site): expand release documentation"
mars release notes --repo . --bump auto
mars release backfill-notes --repo . --check
git add VERSION CHANGELOG.md internal/buildinfo/version.go
git commit -m "release: notes X.Y.Z"
git push origin main
Tags and publication remain separately gated by F-017/F-018.
Run the conventional Go/Syft production and verification rehearsal authorized by AD-315 before tagging. The T-080 workflow is tag-only and least privilege; the rehearsal itself does not tag, upload, attest, announce, or publish.
Initialized target repos inherit semantic versioning and generated patch notes, but they do not inherit MARS source binary publication. Target release publication depends on the target product's own deployment model.
mars release notes --repo ~/my-project --bump auto
mars release backfill-notes --repo ~/my-project --check
git -C ~/my-project add VERSION CHANGELOG.md
git -C ~/my-project commit -m "release: notes X.Y.Z"
git -C ~/my-project push origin main
MARS source uses the conventional AD-315/F-018 Go/Syft/GitHub-attestation workflow. Generated target repositories choose and document their own producer and verifier. The standalone verifier and audit commands are retired. Remote transport success is not completion, and unavailable or unverifiable state stays blocked.
| Surface | Gate | What success proves |
|---|---|---|
| Repository-approved producer | Build/package contract | For MARS source, the no-publish rehearsal produces four archives, four SBOMs, and checksums.txt without publication authority. Targets define their own equivalent contract. |
| F-018 signed archive consumer | Authenticity and safe replacement | Signature, workflow identity, immutable commit, platform/build metadata, checksum, archive, and durable transaction all pass. |
| Repository-owned remote gate | Identity and inventory convergence | The repository-approved artifacts exactly match the immutable release; MARS source specifically requires F-018 signed identity. Missing, partial, inaccessible, or unverifiable state is blocked. |
gh release view vX.Y.Z | Transport inspection only | A Release object can be observed; this alone proves neither authenticity nor completion. |
mars update check --repo ~/my-project --json
mars update harness --repo ~/my-project
mars doctor --repo ~/my-project --json
make update-tool
mars version
gh release view vX.Y.Z --repo greaveselliott/MARS
Then run the approved F-018 remote-convergence gate; the listing alone is not completion evidence.
| Symptom | Likely cause | User action |
|---|---|---|
update check reports remote unknown. | Latest-release API could not be reached or auth is missing. | Use --skip-remote for local drift checks, or run mars auth github check. |
An approved signed update tool run cannot download private assets. | No valid private release auth source. | After confirming the approved signed release exists, run gh auth login, then mars auth github setup, or set GH_TOKEN/GITHUB_TOKEN. |
| Release notes sound generic. | The semantic commit lacks explicit Impact, Why, or What details. | Polish the top changelog entry before committing release notes. |
| Local asset verification fails. | The producer output is incomplete or does not satisfy the repository artifact contract. | Rerun the repository-approved producer and its contract check. For MARS source, use the publication-disabled F-018 snapshot workflow. |
| GitHub release is notes-only. | The tag/release object exists but its artifact set is incomplete. | Treat publication as blocked and use the separately approved repository release workflow; the retired MARS producer cannot repair it. |
mirror_incomplete is reported. | The remote release is partial, extra, pending, mismatched, or unverifiable. | Preserve immutable refs, inspect the reported classifications, and keep publication blocked until an approved workflow proves exact convergence. |