REQ-F-029: Auto-Update Suppression in Non-Interactive Mode
Tier: Framework-Automatic | Priority: P1
Source: §32 Self-Update & Auto-Upgrade Behavior
Addresses: Severity: High / Token Spend: Medium / Time: High / Context: Low
Description
The framework MUST disable any auto-update behavior (including update checks that add latency) when: isatty(stdout) == false, CI is set, TOOL_NO_UPDATE is set, or --no-update-check is passed. The framework MUST ensure that update availability information is surfaced only as a non-blocking meta.update_available field. The framework MUST ensure that the tool binary is never replaced while any instance is running.
Acceptance Criteria
- No update check occurs when
CI=true - No update check occurs when stdout is not a TTY
- Setting
TOOL_NO_UPDATE=1disables all update behavior including background checks - No measurable latency is added to any command due to update checking in non-interactive mode
Schema
No dedicated schema type — this requirement governs framework startup behavior without adding new wire-format fields
Wire Format
No wire-format fields — this requirement governs framework behavior only
Example
Framework-Automatic: no command author action needed. The framework checks isatty(stdout) and the CI and TOOL_NO_UPDATE environment variables before the command is dispatched. If any suppression condition is met, the framework sets NO_UPDATE_NOTIFIER=1 (or the equivalent internal flag) before executing the command.
$ CI=true tool deploy --env prod
→ No update check performed
→ No "update available" message on stderr
→ Command executes with zero added latency
$ TOOL_NO_UPDATE=1 tool deploy --env prod
→ No update check performed, background checks also disabled
$ tool deploy --env prod (stdout is a pipe)
→ isatty(stdout) == false → update check suppressed automatically
Related
| Requirement | Tier | Relationship |
|---|---|---|
| REQ-F-009 | F | Provides: non-interactive mode detection reused to suppress updates |
| REQ-F-050 | F | Specializes: suppresses update notifier side-channel writes in non-interactive mode |
| REQ-F-008 | F | Composes: CI environment variable detection shared with this requirement |
| REQ-F-038 | F | Composes: auto-quiet mode applies the same non-TTY detection |