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, path-like argument completion, hierarchical command resolution, 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, process-substitution, descriptor-duplication, tab-stripping-heredoc, 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 instead of being killed by a default timeout (removed entirely; see the addendum in docs/notes/timeout-audit.md) |
job-control tests, PTY integration tests, and the non-sandboxed nix develop -c sbcl --script run-tests.lisp gate pass locally; docs/notes/timeout-audit.md contains the real-PTY regression test |
Needs release evidence on x86_64-linux |
| 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; the current coverage command and its report documented in docs/notes/coverage-analysis.md |
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 onx86_64-linuxCI, the hermetic check target.aarch64-darwinremains declared for development, but is not a flake-check, integration, or release-binary CI target.- The non-sandboxed integration suite passes for PTY, subprocess, terminal,
signal, and job-control coverage on the sole CI matrix target,
x86_64-linux. - A release binary is built on
x86_64-linux, starts successfully, and ships withREADME.md,LICENSE, and thenshell(1)man page. - User-visible behavior changes are represented in README, man page, the GitHub Release notes, and completion metadata when applicable.
- Open roadmap gaps remain explicit instead of being implied as complete.
Local verification¶
What is actually checkable on a plain aarch64-darwin development machine
(not CI), run directly rather than assumed:
nix build --no-link .#checks.aarch64-darwin.docsandnix build --no-link .#checks.aarch64-darwin.formattingboth exit 0 -- the mkdocs--strictbuild and the treefmt gate pass on this platform.- The Darwin
build,default, andsmoke-testcheck attributes can remain unavailable when the pinnedcl-prolog-kitpackage has no Darwin build. The completenix flake checkand release-bundle gate are therefore verified onx86_64-linuxCI; run available Darwin checks directly rather than treating a missing attribute as a feature failure. - The equivalent SBCL-level verification -- what
checks.defaultruns under the hood -- is available throughnix run .#test. The integrated tree passes the completenshell/testsuite locally. - The integrated suite also covers the user-visible behavior added across the
current work units: OSC 52 clipboard output, tab-stripping
<<-heredocs, process substitution, ordered descriptor duplication, path-like argument completion, hierarchical command completion, and SGR mouse selection.
Current Public Gaps¶
- Broader help-text-driven command discovery remains 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, plus other unimplemented edge cases.
- Validate mouse selection and host clipboard behavior on every supported terminal/platform; the editor now maps SGR coordinates through captured prompt geometry and falls back to OSC 52 when host clipboard integration is unavailable.
- Collect release evidence on each CI matrix target, 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. - Obtain native x86_64-linux CI evidence for the implemented bundle derivation: build it, validate it, and smoke-test it after tar extraction. Published v0.4.0 artifacts remain non-portable.
- Verify the global all-target publication gate, checksums, and GitHub artifact attestations in CI before describing release provenance as operational.
- Validate the process-isolated benchmark scenarios in CI and collect equivalent fixtures beyond the implemented minimal noninteractive literal-print case.
- Collect privileged cold-cache, interactive, completion, and end-to-end tail-latency evidence before making any broad "world-fastest" performance claim.