Saphan StudioDocs
Reference/Command reference

saphan bridge

Bridge generation: instantiate a project command deck

saphan bridge

Bridge generation: instantiate a project command deck

saphan bridge

Subcommands

SubcommandWhat it does
saphan bridge initGenerate a blank-but-working <name>-bridge and register the workspace

saphan bridge init

Generate a blank-but-working <name>-bridge and register the workspace

saphan bridge init [flags]

Generate <workspace>/<name>-bridge from the protocol canon embedded in this binary and register the workspace. The generated bridge carries its OWN executor-behavior law: the protocol doc set (protocol/ — roles & gates, order/status process, dispatch playbook, principles, team workflow) ships byte-verbatim from the pinned wato-protocol commit, digest-verified, alongside the content templates, BOARD, OPERATIONS (which emits the worktree law-path model), dispatch/ + returns/ + decisions/ + findings/ lanes, SYNC stub, and the channel-artifact .gitignore from day one. Registration writes the .saphan marker plus the worktrees/ lane, so 'fleet show' immediately answers with a valid empty envelope.

The law ships EMBEDDED and offline: no network is touched at init or ever by an executor (a worktree behind a firewall stays governed). PROTOCOL_BASELINE declares the integration trunk (--base-branch, default main).

Never destructive: an existing bridge or any colliding file refuses with a per-path report — no overwrite, no merge, no --force in v1. The workspace must be named explicitly (--workspace or SAPHAN_WORKSPACE): generating into a walked-up or fallback CWD is exactly the silent surprise the resolution contract exists to prevent.

saphan dry-run bridge init builds the SAME plan the real write builds (bridgegen.New) and checks collisions with the SAME plan.Collisions() — a collision refuses with the IDENTICAL per-path report the real write would print. Past that point plan.Apply() is never called: zero directories, zero files, zero writes of any kind. bridge init opens no store.Backend at all (unlike gate/teardown, there is no fleet_gate/fleet_event reconcile residue to name here — the whole verb is filesystem-only), so a clean dry-run genuinely touches nothing, disk or store. An admissible plan prints what plan.Paths() says would be created and exits 0.

Options

OptionTypeDefaultDescription
--base-branchstringunsetintegration trunk the bridge declares in PROTOCOL_BASELINE (default: main)
--namestringunsetbridge base name; <name>-bridge is generated (default: basename of --workspace)

On this page