|
Bootstrap
Bash-based bootstrap engine reference documentation
|
Accepted
This Architecture Decision Record establishes the philosophy and objectives of the bootstrap engine's diagnostic output.
Diagnostics are the primary interface between the bootstrap engine and its users when something unexpected occurs. Consequently, they should optimize for human understanding rather than merely reporting program state.
Earlier ADRs establish that the bootstrap engine should:
These architectural decisions depend upon users understanding what the engine is doing and why.
Poor diagnostics increase support burden, reduce user confidence, and encourage trial-and-error rather than deliberate system administration.
Diagnostics shall be written for humans first.
Whenever practical, an error should answer four questions:
Manifest-related diagnostics should identify:
Warnings shall be reserved for situations where execution can safely continue.
Errors shall terminate execution whenever continuing would violate the project's conservative execution philosophy.
Users should not need to read the source code to understand why execution stopped.
Well-designed diagnostics shorten debugging sessions, improve trust, and make the bootstrap engine approachable for both experienced administrators and occasional users.
This philosophy also improves automated testing because expected diagnostics become part of the project's observable behavior.
The bootstrap engine could report only the failing command or exit status.
This was rejected because such messages rarely provide enough information for users to resolve configuration problems efficiently.
The project could rely exclusively on package-manager error messages.
This was rejected because package managers cannot explain the bootstrap engine's interpretation of manifests or planning decisions.
The bootstrap engine should explain its own reasoning before delegating work.
Diagnostic messages become a stable part of the user experience.
Changes to diagnostics should improve clarity without sacrificing precision.
Tests should validate significant diagnostics where practical.
Documentation should reference common diagnostic messages when describing expected behavior.
This ADR does not prescribe the exact wording of individual messages.
It does not define exit codes.
It does not require localization or machine-readable diagnostics.
Those concerns may be addressed independently in the future.
Future versions may provide:
Such enhancements should preserve the principle that human-readable diagnostics remain the default interface.
The bootstrap engine should communicate clearly.
Every diagnostic should help the user understand what happened, why it happened, and what action, if any, should be taken next.