|
Bootstrap
Bash-based bootstrap engine reference documentation
|
Accepted
This Architecture Decision Record establishes that the bootstrap engine should prefer declarative data over executable code when representing user intent.
Users should describe the desired outcome. The bootstrap engine should determine how to realize that outcome.
Earlier ADRs establish that:
As the project grows, there will be opportunities to embed additional logic in configuration files. Examples include shell commands, conditionals, loops, templating, or platform-specific scripting.
While powerful, executable configuration makes validation more difficult, reduces inspectability, and increases the gap between what users write and what the engine understands.
The bootstrap engine shall prefer declarative data structures over executable configuration.
Package manifests should express what the user wants rather than how to achieve it.
When additional capabilities are required, the preferred order is:
Executable configuration should require explicit architectural justification.
Declarative inputs are easier to validate, test, document, and reason about.
They support dry-run mode, planning, diagnostics, and future tooling because the engine can understand intent without executing arbitrary code.
This philosophy also improves security by reducing opportunities for unexpected behavior within configuration.
The project could allow arbitrary shell commands within manifests.
This was rejected because it blurs the distinction between configuration and implementation, complicates validation, and makes behavior less predictable.
The project could evolve the manifest format into a general-purpose language.
This was rejected because the project's purpose is to interpret package requirements, not to become another scripting environment.
Future feature proposals should first ask whether the capability can be represented as data.
Parser complexity should grow more slowly than implementation complexity.
Documentation remains focused on describing a small declarative language rather than a programming model.
This ADR does not prohibit implementation code within the bootstrap engine.
It does not prohibit companion tools from using scripting where appropriate.
It does prohibit treating manifests as arbitrary executable programs without a compelling architectural reason.
Future composition mechanisms should continue to represent intent declaratively, allowing planning, diagnostics, and validation to operate without executing user-provided code.
Configuration should describe desired state, not executable procedures.
The bootstrap engine should continue to favor declarative data because it is more predictable, more inspectable, and more amenable to validation than embedded code.