Browse Docs pages
Overview
Report Oliver renderer availability and compatibility
Source: bones/scripts/rc-preflight.sh.
Usage
rotkeeper.sh preflight [options]
Options
--verbose Show detailed findings
--dry-run Report the check without invoking the Oliver binary
--help, -h Show this help message and exit
--version, -v Show script version and quit
Examples
bash rotkeeper.sh preflight # Verify rendering is ready
bash rotkeeper.sh preflight --verbose # Show discovery details
Exit codes
0 Rendering ready
1 Renderer missing or unusable (with one actionable setup message)
Reads and writes
Environment: reads DRY_RUN, OLIVER_BIN, RK_OLIVER_BIN, SCRIPT_DIR, TMP_DIR, VERSION (canonical via rc-env.sh / rk_load_env); overrides RK_OLIVER_BIN, RK_RENDERER, ROTKEEPER_VERSION when set.
Working directory: No CWD assumption โ all paths are root-relative via ROOT_DIR/BONES_DIR/CONTENT_DIR/etc. derived from rc-env.sh; helpers rk_canonical_path/rk_canonical_or_raw resolve symlinks/portably.
Inputs and outputs: discovers Oliver using RK_OLIVER_BIN then PATH, checks executability, and smoke-renders through the real CLI with the configured input format and HTML/XHTML profile.
Nonzero, empty, or non-HTML render output fails with an actionable setup message. The shared check also gates render. Real runs create and remove a private TMP_DIR/oliver-preflight.XXXXXX scratch directory holding the smoke .md, .html, and .log, so concurrent runs never share files; dry-run skips binary invocation. See home/content/docs/oliver-contract.md.
Side effects
No side effects are documented in script annotations.
Notes
Design
The command delegates discovery and the live smoke render to
rk_oliver_preflight in rc-utils.sh. render uses the same helper, so both
commands report the same discovery and smoke-render failures.
An explicit RK_OLIVER_BIN takes precedence over oliver on PATH. The
helper invokes the configured input format and adds --to xhtml only for
the site's XHTML profile. It requires a zero exit status and nonempty output
containing at least one HTML element. Oliver emits markup for the smoke
heading in every input format and profile, so an executable that only echoes
its arguments or its input fails.
See the Oliver contract.
Limits
The smoke input is a single heading, not a content or template audit. Passing
does not test meta, plan, wrap, or manifest, validate the installed
commit, or prove that every page can render. The HTML check tests output
shape, not identity: a wrapper that prints any markup passes.
--dry-run skips the helper entirely and returns success with a skipped-check
message. It does not establish that Oliver is present or usable.
Cautions
A non-executable explicit override fails instead of falling back to PATH.
Check the override first when discovery fails.
A live check writes the smoke document, output, and stderr into a private
oliver-preflight.XXXXXX directory under TMP_DIR, so concurrent runs never
share files. The directory is removed afterwards, including on interruption
through the exit trap; only an untrappable kill can leave one behind, and it
does not affect later runs. Shared bootstrap logging also writes a run log,
including during --dry-run; help and version exit before that bootstrap.
History
No matching entries in CHANGELOG.md.