diff --git a/README.md b/README.md index 024218a7..d9866fa1 100644 --- a/README.md +++ b/README.md @@ -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 @@ -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 @@ -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 diff --git a/docs/src/getting-started.md b/docs/src/getting-started.md index c61f0c83..eb8ffcc8 100644 --- a/docs/src/getting-started.md +++ b/docs/src/getting-started.md @@ -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 ``` @@ -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 diff --git a/docs/src/project/public-readiness.md b/docs/src/project/public-readiness.md index 9a1e2bd9..05d07b31 100644 --- a/docs/src/project/public-readiness.md +++ b/docs/src/project/public-readiness.md @@ -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 diff --git a/man/nshell.1 b/man/nshell.1 index 1d9e8357..e51d5d6e 100644 --- a/man/nshell.1 +++ b/man/nshell.1 @@ -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 diff --git a/nshell.asd b/nshell.asd index a0eced98..c6523048 100644 --- a/nshell.asd +++ b/nshell.asd @@ -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") @@ -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 " :maintainer "takeokunn " :license "MIT" @@ -572,7 +572,7 @@ (error "cl-weave tests failed")))) (asdf:defsystem "nshell/weave" - :version "0.4.0" + :version "0.5.0" :author "takeokunn " :maintainer "takeokunn " :license "MIT" @@ -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 " :maintainer "takeokunn " :license "MIT" diff --git a/packages/feature/assistant/src/domain/mcp.lisp b/packages/feature/assistant/src/domain/mcp.lisp index b3f8c40b..d66bb8bc 100644 --- a/packages/feature/assistant/src/domain/mcp.lisp +++ b/packages/feature/assistant/src/domain/mcp.lisp @@ -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 diff --git a/packages/feature/command-line/src/presentation/help.lisp b/packages/feature/command-line/src/presentation/help.lisp index a63521da..52450a77 100644 --- a/packages/feature/command-line/src/presentation/help.lisp +++ b/packages/feature/command-line/src/presentation/help.lisp @@ -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))) diff --git a/t/e2e/test-assistant-mcp.lisp b/t/e2e/test-assistant-mcp.lisp index 6f55d139..0849349e 100644 --- a/t/e2e/test-assistant-mcp.lisp +++ b/t/e2e/test-assistant-mcp.lisp @@ -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) @@ -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)