Saphan StudioDocs
Reference/Commands

saphan checks

Deterministic checks that run as ordinary processes, never as a model turn, so they cost nothing in model usage and give the same answer every time.

Deterministic checks that run as ordinary processes, never as a model turn, so they cost nothing in model usage and give the same answer every time. The catalog covers build, test, lint, import checks and plugin compilation for a stream; other subcommands check channel files, commit authorship, container runs and the built-in user interface.

saphan checks bridge-author

Counts the commits in a bridge repository (the workspace's shared git record of governance and decisions) per day and per kind of author: a seat identity, the legacy identity pair from the configuration, the gateway's own identity, or anyone else. It reads author strings only and rewrites nothing. With --staged it becomes a pre-commit check that compares the author git is about to record with the committing seat: it warns until the owner has signed the identity cut-over record, and refuses afterwards.

saphan checks bridge-author --repo /path/to/bridge --since 2026-10-01
saphan checks bridge-author --staged --workspace /path/to/workspace
saphan checks bridge-author
flagtypedefaultwhat it does
--rangestringHEADThe revision or range to read, for example origin/main; defaults to HEAD.
--repostringThe bridge repository to read; required for the count, and defaults to the current directory with --staged.
--sincestringThe first day counted, as YYYY-MM-DD, compared with each commit's author date; required for the count.
--stagedboolfalseRun the pre-commit check instead of the count: compare the author git would record with the committing seat, warning before the owner's cut-over record exists and refusing after it.

saphan checks channel-lint

Checks a worktree's channel files (_MASTER_ORDER.md, _EXEC_STATUS.md, _REVIEW_STATUS.md, whichever are present) with the same parser Saphan Studio uses to read them, and exits 2 on any malformed file, unknown state, misplaced heading or mismatched stream. A worktree with none of the three files is also a finding. Run it before reporting work as finished, or before accepting a returned stream.

saphan checks channel-lint
flagtypedefaultwhat it does
--worktreestringAbsolute path of the worktree whose channel files are checked (required).

saphan checks container-contradictions

Checks every recorded run that claims to have run in a container, and refuses any whose exact machine and image were not confirmed by a fresh container-capability probe before the run started. It prints ok when no run contradicts its record.

saphan checks container-contradictions

saphan checks declare

Declares that a stream is ready for its deterministic checks, and records the declaration so saphan checks outcomes can tell a check that never ran from one that was never asked for.

saphan checks declare --stream payments-refactor --actor alice
saphan checks declare
flagtypedefaultwhat it does
--actorstringThe id of the person or agent making the declaration (required); it is recorded, not authenticated.
--classstringArrayA catalog class to declare ready: build, test, lint, importcheck or plugin-compile. Repeat for several; defaults to the whole catalog.
--roundstringA free-form label for the round this declaration belongs to; empty means unnumbered.
--streamstringThe stream declaring readiness (required).

saphan checks landing-author

Refuses a branch carrying a merge commit whose author or committer is not the identity the configuration declares, starting from the point where the engine began setting that identity. Used when developing Saphan Studio; not needed to operate an installation.

saphan checks landing-author
flagtypedefaultwhat it does
--knownstringA range of already-known commits to report without failing, inclusive at both ends.
--rangestringThe revision range to read, for example origin/main; replaces the default range entirely.
--repostringThe repository to check (required).
--sincestringThe commit from which merge commits are judged; replaces the default starting point.

saphan checks list

Prints the check catalog as the exact saphan run --backend proc commands that would run each check for a stream, with each check's time limit.

saphan checks list --stream payments-refactor --actor alice --workdir /path/to/repo
saphan checks list
flagtypedefaultwhat it does
--actorstringThe id of the person or agent the composed runs belong to (required).
--streamstringThe stream the composed runs belong to (required).
--workdirstringThe repository root the checks run against (required).

saphan checks log-lint

Checks the engine's server and daemon source code for logging that bypasses its own logging package, and refuses any it finds. The packages to scan, the logging libraries to flag and the list of tolerated existing sites are plain files, and the tolerated list may only shrink compared with its copy on the baseline branch. Test files are not scanned.

saphan checks log-lint
flagtypedefaultwhat it does
--baseline-refstringdevelopThe git ref whose copy of the tolerated list is the ceiling the current list may not exceed; defaults to develop.
--librariesstringThe file listing the logging libraries whose import counts as a violation; defaults to the one in the repository.
--manifeststringThe file listing the tolerated existing sites; defaults to the one in the repository.
--packagesstringThe file listing the packages to scan; defaults to the one in the repository.
--rootstringThe module root; defaults to the nearest parent directory that holds go.mod.

saphan checks outcomes

Prints one row for every check class a stream declared for a round, with its outcome: green, red or unrun. A declared check with no run reads unrun with the reason "declared, never run"; unrun describes the machine or the vendor, never the code. This command refuses nothing; by default it also stores the reading in the record (see --record).

saphan checks outcomes
flagtypedefaultwhat it does
--recordbooltrueStore the result as a timestamped reading in the record; on by default, so pass --record=false for a read-only look.
--roundstringThe round label whose results are shown; empty means unnumbered.
--streamstringThe stream whose results are shown (required).

saphan checks ui-assets

Checks that every screen in the user interface built into this binary has its text in both language catalogs, prints the counts, and exits 2 naming each missing key. Useful as a CI step, since the same warning is otherwise printed only by the commands that serve those screens.

saphan checks ui-assets

saphan checks vendor-attribution

Refuses a branch whose commits since its merge base carry a Co-authored-by trailer with an e-mail address that is not already a commit author's in the repository, which is how attribution to an AI vendor is detected. An address that has ever authored a commit there passes. Only the trailer is read, never the commit message text. The trailer has to be removed before the branch passes its gate.

saphan checks vendor-attribution --repo . --base origin/main
saphan checks vendor-attribution
flagtypedefaultwhat it does
--basestringThe base branch to compare against, for example origin/main (required).
--branchstringHEADThe branch to check; defaults to HEAD.
--repostringThe repository to check (required).

Global options apply to every command — see Every command.

On this page