v0.x: an unattended run starts without a person¶
A GTB tool run with nobody at the terminal is no longer stopped by a question nobody can answer
(spec 0208).
A run is unattended when it is under CI (--ci, the ci key or CI=true), or when its stdin is not a terminal: a
service under systemd, a pod without tty: true, a cron job, a script, or piped input. Nothing in a tool's code
changes.
What changes¶
- No pre-run update check. An unattended run makes no release probe, shows no spinner, asks nothing and never self-updates. It used to probe whenever the check was due, and skip only the prompt.
- The
enabledpolicy no longer blocks it. A service restarted after a release used to refuse to start with "an update to … is required before continuing", which in a pod is a crash loop. It now starts and logs one warning that the policy is not enforced without a terminal. A person at a terminal who declines the prompt is still blocked. - No out-of-date reminder. The cached "a newer … is available" warning is suppressed, as it already was under CI.
- No config file needed. With
initenabled and no config file, an unattended run starts on the embedded defaults, the environment and the flags, and logs that it did, where it used to fail with "no config file found" and a hint to runinit. This includes--ciandCI=trueruns. A required config source still fails the start, and a tool withBootstrap.AutoInitialisestill auto-initialises. - The telemetry consent prompt is unchanged: it already deferred without a terminal and under CI. Its debug line
now reads
telemetry consent deferred: no terminalortelemetry consent deferred: CI environment. versionis unchanged. It still makes its live check without a terminal, and skips it only under CI.
What to check¶
- A pipeline or script that relied on the "no config file found" failure to catch a missing
initnow runs on the defaults. Check for the config it needs explicitly, or run with a terminal. - A deployment that relied on the
enabledpolicy to stop an out-of-date service now has to update it another way: redeploy it, or runupdateas part of the deployment. - A service whose manifest sets
tty: true(Compose, Kubernetes) or that is started withdocker run -thas a terminal for stdin, so it is still treated as attended. Drop thetty, or pass--ci. - A test that drives the root with no
props.IOreads the process's stdin, which undergo testis not a terminal, so it now runs unattended. Give it an interactive IO to exercise the attended path.