ADR 0010: Freeze the 1.0 release scope around Unix and explicit dialect islands
Canonical Quirl project documentation synced from docs/decisions/0010-unix-first-release-scope.md.
Context
Quirl has a complete interactive process model on Linux and macOS: process groups, terminal handoff, foreground/background transitions, suspension, signals, pipes, and redirects. The Windows backend cross-compiles and satisfies portable lifecycle contracts, but native terminal behavior has not been exercised on a Windows machine. Requiring that evidence would make an unavailable platform a release blocker for the platforms the project actively uses and can support.
The command grammar had a similar ambiguity. The implemented C1 core covers the high-frequency, bounded forms that fit Quirl's native process graph. It does not implement multiline here-documents, process substitution, loops, functions, or other dialect control syntax. Keeping those forms on an open-ended native 1.0 checklist would encourage partial Bash/Zsh emulation and weaken diagnostics. Quirl already has explicit, bounded Bash and Zsh reference runners for exact dialect behavior.
Decision
Quirl 1.0 is Unix-first:
- Linux and macOS are the supported interactive platforms. Release evidence covers the editor, PTY ownership, native job control, suspension, signals, pipes, redirects, and the frozen C1-core grammar on those platforms.
- Windows is a best-effort portability target. Its backend remains in the workspace, must continue to cross-compile when the toolchain is available, and must satisfy platform-independent process-contract tests. Native Windows terminal handoff, Ctrl-Z-equivalent suspension, and hands-on Windows smoke testing are not part of the 1.0 promise or release gate.
- A future Windows support claim requires named native hardware or a maintained native test environment, an interactive terminal/job-control checklist, and a fresh security review of Job Object containment. It is a separate milestone, not deferred work silently attached to 1.0.
The 1.0 compatibility boundary is also frozen:
- C0 and the versioned C1-core matrix execute natively on Linux and macOS. This
includes quoting, byte pipes, standard-descriptor redirects, here-strings,
background markers, boolean/sequential lists,
export NAME=value, bounded parameter/arithmetic/command expansion, and pathname expansion. - Here-documents, process substitution, loops, functions, conditionals, and
dialect-specific control forms are C2 reference-shell islands for 1.0. They
are not promised as future native syntax. Prompt use selects
bash { ... }orzsh { ... }; scripts select an interpreter through their shebang,quirl run --lang bash, orquirl run --lang zsh. Both boundaries are explicitly noninteractive with closed standard input. Ctrl-C cancels them; on Unix, Ctrl-Z also cancels a prompt island instead of creating an untracked stopped process group. - Unsupported dialect input receives an actionable diagnostic. Quirl never silently retries it in a reference shell, loads user startup files, or changes interpreter authority behind the user's back.
- C3 state import remains deliberately partial, and C4 exact emulation always belongs to the explicitly selected reference interpreter.
Consequences
- Release work can be completed and honestly supported with Linux/macOS hardware and maintainers.
- The checked-in Windows backend remains useful portability engineering without being presented as a tested daily-driver experience.
- The native parser stays bounded and explainable. Exact dialect semantics stay exact because Bash or Zsh owns them.
- Documentation, diagnostics, and examples must label dialect islands clearly; they must not show loops, functions, here-documents, or process substitution as ordinary native Quirl command input.
- Adding a native form later requires updating the compatibility matrix, differential fixtures, grammar protocol identity when applicable, and this support contract. Native support is an evidence-backed product decision, not an assumption that all shell syntax eventually migrates inward.
ADR 0009: Execute the narrow isolated process-adapter v1 handshake
Canonical Quirl project documentation synced from docs/decisions/0009-isolated-process-adapter-v1.md.
ADR 0011: Deterministic testing and bounded engineering
Canonical Quirl project documentation synced from docs/decisions/0011-deterministic-testing-and-bounded-engineering.md.