saphan board
Board exports over the persisted fleet record
saphan board
Board exports over the persisted fleet record
Subcommands
| Subcommand | What it does |
|---|---|
saphan board export | Export the fleet record: delivery report (md), flat data lanes (csv), paginated document (pdf), styled report (html) |
saphan board export
Export the fleet record: delivery report (md), flat data lanes (csv), paginated document (pdf), styled report (html)
Export the workspace's PERSISTED fleet record (D20: the fleet_event log is the only source — no reconcile scan, no git probe, never the resolved projection).
--format md the human weekly: per stream — record state, actor history (human|agent, gate decisions verbatim with ts), last commit, order-doc link. Flat pre-PREREQ-1, and it says so. --format csv the tool-importable flat lanes: one row per gate event and one row per stream summary — two files from an --out base, or one lane via --csv events|streams. --format pdf the --md content as a dated, paginated document: title page (workspace, generated-at, engine + contract version), footer "page N of M". Deliberately plain (the archival artifact) — for the styled version, --format html prints to PDF from the browser. --format html the human-facing report: the same record as ONE self-contained file — inline CSS, zero JS, zero external assets; opens anywhere, mails anywhere, prints from the browser. Paths render workspace-relative (--full-paths restores absolute).
A report is a NAMED ARTIFACT, not a text stream (the openssl model):
--out <path> is REQUIRED, written atomically (tmp+rename), never replacing
an existing file without --force, and the ABSOLUTE path written is printed
as the last stdout line. --stdout is the explicit pipeline escape hatch —
artifact bytes on stdout, every diagnostic on stderr; pdf (binary) refuses
--stdout on a terminal.
Cost columns render "not yet attributed" until a per-stream cost surface lands — never 0 (honest-absence: zero is a claim).
Options
| Option | Type | Default | Description |
|---|---|---|---|
--csv | string | unset | csv lane selection: events | streams (default: both files) |
--force | bool | false | let --out replace an existing file (one atomic swap; without it an existing file is refused) |
--format | string | unset | export format: md | csv | pdf | html (required) |
--full-paths | bool | false | html: render absolute paths (default OFF = workspace-relative — a client-facing artifact must not leak the operator's disk layout) |
--out | string | unset | the named artifact's path (md/pdf/html: the file; csv without --csv: the base for <base>.events.csv + <base>.streams.csv); required unless --stdout |
--stdout | bool | false | stream the artifact bytes to stdout (the pipeline escape hatch) — every diagnostic stays on stderr |