Public Readiness¶
This document defines the release bar for presenting nshell as a serious interactive shell. It is intentionally stricter than "the tests pass": each area needs user-visible capability, repeatable evidence, and an explicit gap status.
Positioning¶
nshell targets daily interactive use first. The release claim is a modern interactive shell with a tested editor, completion, history, process control, and scripting subset.
Capability Matrix¶
| Area | Release bar | Current evidence | Status |
|---|---|---|---|
| Interactive editor | Live syntax feedback, Emacs bindings, optional vi mode, multiline editing, undo/yank, predictable rendering | README highlights, man page key bindings, input-state and rendering tests | Ready locally |
| History and suggestions | Persistent history, reverse search, prefix autosuggestions, safe handling of multiline entries | history, autosuggest, and E2E editing tests | Ready locally |
| Completion | Context-aware command/path/flag completion, candidate menu, deterministic cycling and cancellation | completion domain tests, REPL completion rendering tests, common external command metadata, help-text metadata loader with selective runtime enrichment, README/man page claims | Improved locally; broader command discovery/cache policy and subcommand coverage remain future work |
| Shell language | Practical interactive scripting: functions, control flow, command substitution, expansions, heredocs, here-strings, redirection, pipelines | parser, expansion, source, pipeline, and smoke tests, structured unquoted list-variable expansion | Improved locally; broader expansion parity audit still required |
| Process control | Foreground/background jobs, jobs/fg/bg/disown, Ctrl-C foreground recovery, PTY smoke coverage, foreground external commands (editors, SSH) run to completion under a real terminal instead of being killed by the command-substitution safety timeout |
job-control tests, PTY integration tests, non-sandboxed E2E gate, docs/timeout-audit.md (real-PTY regression test) |
Needs release evidence across Linux, x86_64-darwin, and aarch64-darwin |
| Reliability | Hermetic build/test gate plus non-sandboxed OS-interactive gate for PTY, terminal, process, signal, and job-control behavior | nix flake check --print-build-logs; dev-shell E2E/integration command in README and CONTRIBUTING; docs/coverage-analysis.md's full state-2 sweep (every line in src/ accounted for) |
Ready locally; CI evidence required across supported platforms |
| Distribution | Reproducible Nix build, installed man page, release binary smoke, checksummed artifacts | flake build, man page, CI/release workflows, release checklist | Needs nixpkgs/Homebrew/prebuilt binary publication |
| Security and operations | Private vulnerability reporting, explicit security scope, no accidental secret exposure through history/completion/diagnostics | the org security policy and contribution guidelines | Ready for 0.x scope |
Release Gates¶
Before a public release can claim world-level interactive-shell quality:
nix flake check --print-build-logspasses on Linux, x86_64-darwin, and aarch64-darwin CI.- The non-sandboxed integration suite passes for PTY, subprocess, terminal, signal, and job-control coverage.
- A release binary is built on Linux, x86_64-darwin, and aarch64-darwin, starts successfully, and ships
with
README.md,LICENSE, and thenshell(1)man page. - User-visible behavior changes are represented in README, man page, CHANGELOG, and completion metadata when applicable.
- Open roadmap gaps remain explicit instead of being implied as complete.
Current Public Gaps¶
- Broader help-text-driven command discovery and cache policy remain future work, especially for subcommand coverage and non-curated external tools.
- Complete the remaining expansion-semantics audit beyond structured unquoted list-variable and compound list expansion.
- Collect release evidence on every CI-supported platform, not only a local development machine.
- Publish at least one low-friction installation path beyond
nix run, such as nixpkgs, Homebrew, or prebuilt release binaries.