ADR 0003: Preview runtime layers
Canonical Quirl project documentation synced from docs/decisions/0003-preview-runtime-layers.md.
- Status: Accepted
- Date: 2026-08-15
- Superseded by: ADR 0016
Context
Phase 1 requires command-mode built-ins, external processes, byte pipes,
redirections, conditions, and jobs to execute through one native graph. Keeping
that lifecycle in the quirl-core foundation would add operating-system and
terminal dependencies to a crate whose dependency ceiling is serde-level.
Decision
quirl-syntax owns the serializable command graph and its span-aware parser.
quirl-process depends on quirl-core and quirl-syntax and owns native
process startup, pipe/redirection wiring, process groups, and structured job
state. quirl-cli is the composition root. Existing quirl-core::CommandRunner
remains temporarily for the restricted Lua host boundary and is not used by
the interactive Preview executor.
Future picker and index crates may likewise depend inward on foundation schemas, but foundation crates never depend on them.
Consequences
The interactive shell no longer needs $SHELL -c for the accepted native
command grammar. Exact dialect islands and the legacy Lua process adapter stay
explicit compatibility paths. Terminal-specific suspend/foreground ownership
can evolve in quirl-process without leaking OS dependencies into foundations.
ADR 0002: Enforce one-way crate layering
Canonical Quirl project documentation synced from docs/decisions/0002-crate-layering.md.
ADR 0004: Phase 2 contract and language-service layers
Canonical Quirl project documentation synced from docs/decisions/0004-phase-2-contract-and-language-service-layers.md.