Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 15 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ domain-driven core whose line editor is a pure reducer over an immutable input
state, and a reproducible Nix build that packages a dumped SBCL image with its
process-launch helper.

> **Status: development preview (0.4.x).** The interactive editor and core
> **Status: development preview (0.5.x).** The interactive editor and core
> pipeline execution are solid and heavily tested. The shell *language* is a
> growing subset of POSIX/fish semantics. nshell is usable as a daily
> interactive shell for common workflows; it is not a script-compatible
Expand All @@ -24,7 +24,7 @@ The source for that site lives in [docs/src/](docs/src/).
## Quick Start

```sh
nix run github:nerima-lisp/nshell/v0.4.0
nix run github:nerima-lisp/nshell/v0.5.0
```

Then type as you would in any shell. Commands and paths colorize live, and a
Expand All @@ -50,27 +50,28 @@ the edited line to nshell.
## Install

```sh
nix profile install github:nerima-lisp/nshell/v0.4.0
nix profile install github:nerima-lisp/nshell/v0.5.0
```

```nix
# flake.nix
inputs.nshell = {
url = "github:nerima-lisp/nshell/v0.4.0";
url = "github:nerima-lisp/nshell/v0.5.0";
inputs.nixpkgs.follows = "nixpkgs";
};
```

Pin a release tag rather than following the default branch. The supported
platforms are `x86_64-linux` and `aarch64-darwin`; other systems are currently
outside the tested support boundary.

> **Release artifact warning:** the tarballs attached to `v0.4.0` are not
> portable and can retain Nix store dependencies. No portable binary release
> has been published yet. Use the pinned Nix commands above until a later
> release explicitly identifies its bundles as portable. See
> [Getting started](https://nerima-lisp.github.io/nshell/getting-started/)
> for the future bundle verification and installation procedure.
Pin a release tag rather than following the default branch. The v0.5.0 release
workflow publishes an `x86_64-linux` tarball only. `aarch64-darwin` remains a
local development target; other systems are outside the tested support
boundary.

The `x86_64-linux` release bundle removes Nix store references, carries its
ELF runtime library closure, and is checked for required files and dependency
metadata. CI also runs `--help`, `--version`, and an `echo` smoke test on the
bundle; use the pinned Nix commands above on other platforms. See [Getting
started](https://nerima-lisp.github.io/nshell/getting-started/) for the bundle
verification and installation procedure.

## Documentation

Expand Down
16 changes: 8 additions & 8 deletions docs/src/getting-started.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@
With [Nix](https://nixos.org/download) (flakes enabled):

```sh
nix run github:nerima-lisp/nshell/v0.4.0
nix run github:nerima-lisp/nshell/v0.5.0
```

## Install

```sh
nix profile install github:nerima-lisp/nshell/v0.4.0
nix profile install github:nerima-lisp/nshell/v0.5.0
nshell
man nshell # the manual page is installed alongside the binary
```
Expand All @@ -22,16 +22,16 @@ the default branch:
```nix
# flake.nix
inputs.nshell = {
url = "github:nerima-lisp/nshell/v0.4.0";
url = "github:nerima-lisp/nshell/v0.5.0";
inputs.nixpkgs.follows = "nixpkgs";
};
```

The release workflow currently publishes an `x86_64-linux` tarball and SHA-256
checksum. Check the [GitHub releases](https://github.com/nerima-lisp/nshell/releases)
page before downloading: the `v0.4.0` artifacts are not portable and may retain
Nix store dependencies. For reproducible installation, use the pinned Nix
commands above.
The release workflow publishes an `x86_64-linux` tarball and SHA-256 checksum.
The release bundle removes Nix store references, carries its ELF runtime
library closure, and is checked for required files and dependency metadata. CI
also runs `--help`, `--version`, and an `echo` smoke test on the bundle. Use the
pinned Nix commands above on other platforms.

## First commands

Expand Down
7 changes: 4 additions & 3 deletions docs/src/project/public-readiness.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,9 +76,10 @@ What is actually checkable on a plain `aarch64-darwin` development machine
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.
- The x86_64-linux release bundle is checked for Nix store references, its ELF
runtime closure, required files, dependency metadata, and `--help`,
`--version`, and `echo` smoke behavior in CI. Tarball extraction is not a
separate CI check.
- 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
Expand Down
2 changes: 1 addition & 1 deletion man/nshell.1
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
.TH NSHELL 1 "2026-06-21" "nshell 0.4.0" "User Commands"
.TH NSHELL 1 "2026-09-30" "nshell 0.5.0" "User Commands"
.SH NAME
nshell \- a modern, fish-inspired interactive shell written in Common Lisp
.SH SYNOPSIS
Expand Down
8 changes: 4 additions & 4 deletions nshell.asd
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
:license "MIT"
;; Single source of truth for the version. flake.nix reads this form
;; line-by-line, and release.yml refuses a tag that disagrees with it.
:version "0.4.0"
:version "0.5.0"
:homepage "https://github.com/nerima-lisp/nshell"
:bug-tracker "https://github.com/nerima-lisp/nshell/issues"
:source-control (:git "https://github.com/nerima-lisp/nshell.git")
Expand Down Expand Up @@ -385,7 +385,7 @@
:in-order-to ((test-op (test-op "nshell/test"))))

(asdf:defsystem "nshell/test"
:version "0.4.0"
:version "0.5.0"
:author "takeokunn <bararararatty@gmail.com>"
:maintainer "takeokunn <bararararatty@gmail.com>"
:license "MIT"
Expand Down Expand Up @@ -572,7 +572,7 @@
(error "cl-weave tests failed"))))

(asdf:defsystem "nshell/weave"
:version "0.4.0"
:version "0.5.0"
:author "takeokunn <bararararatty@gmail.com>"
:maintainer "takeokunn <bararararatty@gmail.com>"
:license "MIT"
Expand Down Expand Up @@ -602,7 +602,7 @@ primary suite in nshell/test."
:reporter :spec)
(error "cl-weave suite failed"))))
(asdf:defsystem "nshell/benchmark"
:version "0.4.0"
:version "0.5.0"
:author "takeokunn <bararararatty@gmail.com>"
:maintainer "takeokunn <bararararatty@gmail.com>"
:license "MIT"
Expand Down
3 changes: 2 additions & 1 deletion packages/feature/assistant/src/domain/mcp.lisp
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,8 @@
(cons "serverInfo"
(%assistant-mcp-object
(cons "name" "nshell-state")
(cons "version" "0.4.0")))))
(cons "version"
(asdf:component-version (asdf:find-system "nshell")))))))

(defun %assistant-mcp-tool-call
(request session-ids snapshot-present-p snapshot-content
Expand Down
3 changes: 2 additions & 1 deletion packages/feature/command-line/src/presentation/help.lisp
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,6 @@
"Print nshell's version banner to STREAM."
(format
stream
"nshell v0.4.0 - fish-inspired shell in Common Lisp (SBCL ~a)~%"
"nshell v~a - fish-inspired shell in Common Lisp (SBCL ~a)~%"
(asdf:component-version (asdf:find-system "nshell"))
(lisp-implementation-version)))
26 changes: 26 additions & 0 deletions t/e2e/test-assistant-mcp.lisp
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
(in-package #:nshell/test)

(defun %assistant-mcp-e2e-field (object name)
(cdr (assoc name object :test #'string=)))

(defun %assistant-mcp-e2e-json-lines (text)
(with-input-from-string (stream text)
(loop for line = (read-line stream nil nil)
Expand All @@ -18,6 +21,29 @@
:input input
:timeout 120))))

(describe "release-version-contract"
(it "keeps-cli-and-mcp-versions-aligned-with-asdf"
(let ((expected-version (asdf:component-version (asdf:find-system "nshell"))))
(multiple-value-bind (stdout stderr exit-code)
(%run-nshell-main '("--version"))
(expect 0 :to-equal exit-code)
(expect "" :to-equal stderr)
(expect (search (format nil "nshell v~a " expected-version) stdout)
:to-be-truthy))
(host-kit:with-temporary-directory (directory)
(let* ((input (format nil "~a~%"
"{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"initialize\",\"params\":{}}"))
(result (%assistant-mcp-e2e-run directory input))
(responses (%assistant-mcp-e2e-json-lines
(host-kit:process-result-stdout result)))
(server-info
(%assistant-mcp-e2e-field
(%assistant-mcp-e2e-field (first responses) "result")
"serverInfo")))
(expect 0 :to-equal (host-kit:process-result-exit-code result))
(expect expected-version :to-equal
(%assistant-mcp-e2e-field server-info "version")))))))

(describe "assistant-mcp-stdio-process-contracts"
(it "serves-state-over-stdio-after-the-mcp-handshake"
(host-kit:with-temporary-directory (directory)
Expand Down
Loading