Install trust artifacts
Install the law runtime and the canon packages it executes from pinned,
checkable artifacts, so that every byte on the deployment host traces back
to a version and a hash the operator chose.
Component law CLI, tool 0.1.1, semantics law.core/0.2 (as printed by
law version). Scenario: first install on a deployment host, or replacing
an install whose provenance is unknown. All names, versions, key ids, and
hashes below are synthetic examples.
Applies to
Section titled “Applies to”| Branch | Coverage in this article |
|---|---|
MCP + law serve | both servers ship from the same pinned supply; the install, hash, signature, and toolchain procedure below feeds both branches |
Prerequisites
Section titled “Prerequisites”- A host with one supported install route (see Install):
npm (
@arxo/cli), Homebrew (arxohq/tap/law), the install script, APT (arxo-law), or a GitHub Releases archive. - The pinned release identifier your change record names (created-example:
law 0.1.1, binary hashsha256:78dea06ce928547e87bd9875a2556cc663def37cbb78c8b04aa0da57839c95d7). - The publisher public keys your policy trusts (created-example key ids;
format and trust wiring are real:
--trust,trustedKeys).
- Fetch the artifact only from the pinned supply route. For the archive
route, download the archive together with its adjacent
.sha256file (real: every release archive ships with one). - Check the archive bytes against the
.sha256file before unpacking (operator-policy-example command using the OS tool):sha256sum -c law-0.1.1-linux-x64.tar.gz.sha256. - Install, then print identity:
law versionandlaw version --json. - Resolve canon dependencies into the project with
law install(real flags:--project <dir>,--registry <ID=LOCATION>,--offline,--dry-run,--recover,--json), then recordlaw.toml+law.lockas the pinned dependency closure. - For each
.arxocontainer you deploy, runlaw inspect <file.arxo> --verify --trust <key>…(real flags;--trustis repeatable). Trusted keys may also come from user/project configurationtrustedKeys(real, read from the project or the nearestlaw.toml). - Pin the toolchain that built from source, if you build rather than
install: the toolchain file (
rust-toolchain.toml) and the dependency lockfile (Cargo.lock) under the engine workspace are the real pin files — record their revisions in the change record. Each file also exists in the matching service workspaces (MCP host, HTTP service).
Expected result
Section titled “Expected result”law versionprints the tool line, the semantics line, and the binary hash line;law version --jsonprints the same as fieldstool,semantics,std,binaryHash(all real field names).law inspect … --verifyprints per-file hashes,integrity, and asignaturestatus line followed by one line per attestation (<role> <key-id> trusted|not in --trust — signature valid|INVALID…).- Exit code
0on every check above.
Result check
Section titled “Result check”Compare the printed tool + binaryHash against the pinned values from
Prerequisites character for character; compare each container’s contentHash
and signature key ids against the release manifest. Any mismatch is a
failed install, not a warning to waive.
Failures and diagnostics
Section titled “Failures and diagnostics”bad attestation in the archive(refusal): at least one signature is cryptographically invalid. Implementation behavior: a bad signature is always a refusal, with or without--trust. Re-fetch from the pinned route; do not install.no signature from a --trust or trustedKeys key(refusal): the archive verified structurally but no attestation chains to your trusted keys. Implementation behavior: this refusal happens only when the trusted-key list is non-empty. Either the artifact is not yours to trust, or the key list is wrong — determine which before proceeding.LPK-E0101unknown parameter: the flag you typed does not exist on that subcommand (for example--helponinstall). Re-readlaw --help.- Hash mismatch on the archive: treat the bytes as untrusted and re-fetch; never install mismatched bytes and note the incident.
Signature presence versus mandatory-verification policy
Section titled “Signature presence versus mandatory-verification policy”These are two different things; do not conflate them:
- Signature presence (implementation behavior):
.arxocontainers may carry publisher/executor attestations (law sign <file.arxo> --key <file> [--role publisher|executor]);law inspect --verifyreports each attestation’s validity. A bad signature always refuses. - Mandatory verification (operator-policy-example, not a default): the rule
“this host installs only containers with a valid signature from key set
K” is enforced by always passing
--trust(or configuringtrustedKeys) and refusing to proceed on theno signature from…refusal. The tool default without--truststill rejects bad signatures but does not require any signature. If your policy demands mandatory verification, encode it in your install runbook and audit for bareunpack/inspectruns without--trust.
Support boundaries
Section titled “Support boundaries”- Supported: hash and signature checks described above on released
artifacts; Ed25519 keys made by
law key new --out <file>(real: the secret lives only in that file, mode0600). - Reference setting: the key ids, versions, and hashes in this article are created-examples — substitute your release record.
- Out of scope: OS-level hardening, key-ceremony design, and registry server operation are operator responsibilities, not tool behavior.
Next step
Section titled “Next step”For hosts without network access, continue with Offline and restricted-network operation; otherwise record the installed versions and hashes and proceed to staging your first world.
Documentation for Arxo. Writings — blog.arxo.io.
Anonymous visit counts on stats.arxo.io, no cookies.