Saphan StudioDocs
Reference/Command reference

saphan canon

Carry the canon a seat must obey — signed, deterministic, no git

saphan canon

Carry the canon a seat must obey — signed, deterministic, no git

saphan canon

Subcommands

SubcommandWhat it does
saphan canon applyVerify a canon pack and land its members (the far-side half of canon send)
saphan canon sendCompose, sign and carry a seat's canon; land it in <workdir>/.provision
saphan canon verifyJudge a canon pack's signature and digests; write nothing

saphan canon apply

Verify a canon pack and land its members (the far-side half of canon send)

saphan canon apply --pack <path> --canon-dir <dir> [flags]

Verifies BEFORE anything is written: the manifest's signature against this host's trust root pin, then every member against the digest that signed manifest declares. A pack that is unsigned (under trust.enforce=enforce), signed by an unknown key, signed by a revoked delegate, or whose members do not match their digests is refused by NAME and nothing is written.

The members land in --canon-dir; the FRESHNESS FLOOR does not. It is kept in the engine's own canon state (--canon-state-dir, default ~/.saphan/canon), outside the directory the canon lands in, because that directory is one every leg can write — and a replay floor a leg can lower is not a floor. Only what a previous apply RECORDED as delivered is ever removed from --canon-dir: the leg's brief and every provisioned destination live there too and are not this verb's to touch.

Consults no repository. Invokes no git.

Options

OptionTypeDefaultDescription
--canon-dirstringunsetdirectory the members land in (required; normally <workdir>/.provision)
--canon-state-dirstringunsetengine-owned canon state holding this seat's freshness floor and delivered-member record (default: ~/.saphan/canon)
--enforcestringunsetoverride trust.enforce for this act: off|warn|enforce (default: the config value)
--max-bytesint640canon byte budget (default 524288)
--packstringunsetcanon pack to apply (required)
--re-baselineboolfalseDELIBERATELY accept canon members already on disk in --canon-dir that this host holds no record of delivering; recorded as an admission. Waives only that case — never the staleness floor, never a cross-seat record
--registrystringunsetactor registry carrying DELEGATIONS (default: <workspace>/bridge/registry/ACTORS.md)
--root-pubstringunsetroot pin path (default: ~/.saphan/trust/root.key.pub)
--streamstringunsetthe seat's stream; a pack carrying another seat's canon is refused

saphan canon send

Compose, sign and carry a seat's canon; land it in <workdir>/.provision

saphan canon send --machine <id> --stream <slug> --workdir <abs> --laws <path> [flags]

Composes the canon from PLAIN LOCAL FILES on this host (no repository of any kind is consulted or required), signs it with the trust root, carries it over the ssh transport that already moves packs, and prints the exact far-side command that applies it — complete, literal, runnable from any directory.

The fleet-state member, when named, travels as a bounded EXCERPT: the seat's own rows plus any --context-stream, never the whole projection.

Nothing is applied that does not verify: a canon that is unsigned, signed by an unknown key, signed by a revoked delegate, or whose members do not match their declared digests is refused on arrival BY NAME, and nothing is written.

Options

OptionTypeDefaultDescription
--canon-state-dirstringunsetengine-owned canon state on THIS host, holding the monotonic per-stream sequence (default: ~/.saphan/canon)
--context-streamstringSlice[]extra stream to keep in the fleet-state excerpt, e.g. the master's (repeatable)
--enforcestringunsettrust enforcement the FAR side applies to this canon: off|warn|enforce (default: enforce — this act delivers a seat's LAWS and never inherits a permissive default)
--far-canon-state-dirstringunsetengine-owned canon state on the FAR host, holding that seat's freshness floor (default: the far host's own ~/.saphan/canon)
--fleet-statestringunsetpath to a fleet-state projection on THIS host; carried as a bounded EXCERPT, never whole (optional)
--governancestringunsetdirectory of governance documents on THIS host (optional, walked recursively; dot-entries skipped)
--landingstringunsetfar directory the pack is staged in (default: the workdir's parent)
--lawsstringunsetpath to the standing-law index on THIS host (required)
--machinestringunsetregistered machine holding the seat (required)
--max-bytesint640canon byte budget (default 524288)
--outstringunsetalso write the composed pack to this local path (optional)
--root-keystringunsetsigning key path (default: ~/.saphan/trust/root.key)
--signer-actorstringunsetsigner actor name (default: identity.actor, else owner-root)
--streamstringunsetthe seat's stream slug (required)
--workdirstringunsetthe seat's workdir on that machine, absolute; the canon lands in <workdir>/.provision (required)

saphan canon verify

Judge a canon pack's signature and digests; write nothing

saphan canon verify --pack <path> [flags]

Options

OptionTypeDefaultDescription
--enforcestringunsetoverride trust.enforce for this act: off|warn|enforce (default: the config value)
--packstringunsetcanon pack to judge (required)
--registrystringunsetactor registry carrying DELEGATIONS (default: <workspace>/bridge/registry/ACTORS.md)
--root-pubstringunsetroot pin path (default: ~/.saphan/trust/root.key.pub)
--streamstringunsetthe seat's stream; a pack carrying another seat's canon is refused

On this page