nushell-plugins/updates/108/NUSHELL_0.108_VALIDATION_REPORT.md
Jesús Pérez be62c8701a feat: Add ARGUMENTS documentation and interactive update mode
- Add `show-arguments` recipe documenting all version update commands
- Add `complete-update-interactive` recipe for manual confirmations
- Maintain `complete-update` as automatic mode (no prompts)
- Update `update-help` to reference new recipes and modes
- Document 7-step workflow and step-by-step differences

Changes:
- complete-update: Automatic mode (recommended for CI/CD)
- complete-update-interactive: Interactive mode (with confirmations)
- show-arguments: Complete documentation of all commands and modes
- Both modes share same 7-step workflow with different behavior in Step 4
2025-10-19 00:05:16 +01:00

13 KiB

Nushell 0.108.0 Syntax Validation Report

Date: 2025-10-18 Current Nushell Version in Repo: 0.107.1 Target Validation Version: 0.108.0 Document Validated: .claude/best_nushell_code.md

Executive Summary

After thorough testing and research, CRITICAL ERRORS have been identified in best_nushell_code.md. The document contains incorrect syntax rules that will cause code generation failures. Immediate updates are required.

Critical Findings

🔴 CRITICAL ERROR #1: Function Signature Syntax (Rule 16)

Status: COMPLETELY INCORRECT

Current Rule in best_nushell_code.md (Lines 573-601):

# ✅ GOOD - Colon before return type
def process-data [input: string]: table {
    $input | from json
}

# ❌ BAD - Missing colon (syntax error in 0.108+)
def process-data [input: string] -> table {
    $input | from json
}

Actual Correct Syntax (Tested in Nushell 0.107.1):

# ✅ CORRECT - Colon THEN arrow with input/output types
def process-data [input: string]: nothing -> table {
    $input | from json
}

# ❌ WRONG - Colon only (parser expects arrow)
def process-data [input: string]: table {
    $input | from json
}

# ❌ WRONG - Arrow only (parser expects colon first)
def process-data [input: string] -> table {
    $input | from json
}

Test Results:

# Test 1: Colon only (FAILS)
$ nu -c 'def test-colon [x: string]: string { $x }; test-colon "hello"'
Error: expected arrow (->)

# Test 2: Arrow only (FAILS)
$ nu -c 'def test-arrow [x: string] -> string { $x }; test-arrow "hello"'
Error: expected colon (:) before type signature

# Test 3: Colon + Arrow with input type (SUCCEEDS)
$ nu -c 'def test-full [x: string]: nothing -> string { $x }; test-full "hello"'
hello

Impact: HIGH - This affects ALL function definitions in the codebase Required Action: IMMEDIATE UPDATE to Rule 16


🔴 CRITICAL ERROR #2: String Interpolation Syntax (Rule 17)

Status: COMPLETELY INCORRECT

Current Rule in best_nushell_code.md (Lines 603-635):

# ✅ GOOD - Square brackets for simple variables
print $"Processing file [$filename] at [$timestamp]"

# ❌ BAD - Parentheses for simple variables (confusing style)
print $"Processing file ($filename) at ($timestamp)"

Actual Correct Syntax (Tested in Nushell 0.107.1):

# ✅ CORRECT - Parentheses for ALL interpolations
print $"Processing file ($filename) at ($timestamp)"
print $"Total: (1 + 2 + 3)"

# ❌ WRONG - Square brackets (NO interpolation occurs)
print $"Processing file [$filename]"  # Outputs: "Processing file [$filename]"

Test Results:

# Test 1: Square brackets (NO INTERPOLATION)
$ nu -c 'let name = "Alice"; print $"Hello [$name]"'
Hello [$name]  # Variable NOT substituted!

# Test 2: Parentheses (CORRECT INTERPOLATION)
$ nu -c 'let name = "Alice"; print $"Hello ($name)"'
Hello Alice  # Variable correctly substituted

Impact: CRITICAL - This affects ALL string interpolations in the codebase Required Action: IMMEDIATE REMOVAL of Rule 17 or complete rewrite


🟡 NEEDS CLARIFICATION: Try-Catch Error Parameter (Lines 116, 713-767)

Status: ⚠️ PARTIALLY INCORRECT / NEEDS CONTEXT

Current Rules:

  • Line 116: "In Nushell 0.108, try-catch with error parameter might not be supported when assigning to variables."
  • Lines 713-767: Recommend using do { } | complete instead of try-catch

Test Results:

# Test 1: try-catch with error parameter (WORKS)
$ nu -c 'try { "test" | into int } catch { |e| print $"Error: ($e.msg)" }'
Error: Can't convert to int.  # ✅ Works fine!

# Test 2: try-catch without error parameter (WORKS)
$ nu -c 'try { ls /nonexistent } catch { print "Caught error" }'
Caught error  # ✅ Works fine!

# Test 3: complete with do (FAILS for internal commands)
$ nu -c 'let result = (do { "test" | into int } | complete); print $result'
Error: nu::shell::cant_convert  # ❌ Error not caught by complete!

Findings:

  • Try-catch with error parameter |e| works perfectly in Nushell 0.107.1
  • The note about "might not be supported" appears to be incorrect or outdated
  • The complete command may not catch all internal Nushell errors
  • According to research, major error handling changes were in v0.98.0, not v0.107.1+

Impact: MEDIUM - Affects error handling patterns Required Action: Clarify when complete vs try-catch should be used


Rule-by-Rule Validation

Valid Rules (No Changes Required)

Rule Status Notes
Rule 1: One Command, One Purpose Valid Core design principle, version-independent
Rule 2: Explicit Type Signatures Valid Still enforced in 0.107.1/0.108.0
Rule 3: Return Early, Fail Fast Valid Design pattern, not syntax-dependent
Rule 4: No Side Effects Valid Design principle, version-independent
Rule 5: Atomic Operations Valid Design pattern, still applicable
Rule 6: Explicit Dependencies Valid Best practice, version-independent
Rule 7-15: All other rules Valid Design patterns and conventions

Invalid Rules (Immediate Fix Required)

Rule Status Severity Action Required
Rule 16: Function Signature Syntax INCORRECT CRITICAL Complete rewrite with correct syntax
Rule 17: String Interpolation Style INCORRECT CRITICAL Remove or completely rewrite
Try-Catch Notes (Lines 116, 713-767) ⚠️ UNCLEAR MEDIUM Clarify and update with correct guidance

Nushell 0.108.0 New Features

Based on release notes and research:

1. MCP Server for AI Agents (NEW in 0.108)

  • Optional Model Context Protocol (MCP) server integration
  • Enables AI agents to interact with Nushell more effectively
  • Relevant for AI code generation use cases

2. Experimental Options (NEW in 0.108)

  • pipefail: Sets $env.LAST_EXIT_CODE to rightmost non-zero exit code in pipeline
  • enforce-runtime-annotations: Stricter type checking at runtime

3. Per-Command Completers (NEW in 0.108)

  • Custom commands can use @complete attribute to specify completers
  • More flexible completion system

4. Stronger CustomValue Support (NEW in 0.108)

  • Better handling of plugin-provided custom values
  • into value renamed to detect type for native values

5. Improved Error Handling (Enhanced in 0.108)

  • Clearer error messages
  • Better error context in pipelines
  • Stream collection now raises errors when stream contains errors

6. Breaking Changes in 0.108

  • into valuedetect type (renamed)
  • Stream collection with errors now raises errors
  • Type coercion between strings and globs now supported

Immediate (Critical Priority)

  1. Fix Rule 16 - Update function signature syntax to:

    def command-name [param: type]: input_type -> return_type {
        # body
    }
    
  2. Remove or Rewrite Rule 17 - Correct string interpolation:

    # ✅ ALWAYS use parentheses for interpolation
    print $"Variable: ($var)"
    print $"Expression: (1 + 2)"
    
  3. Update Template Pattern (Lines 639-674) - Fix the template to use correct syntax

High Priority

  1. Clarify Try-Catch Guidance - Research and document:

    • When to use try-catch vs complete
    • Whether error parameter |e| has any limitations
    • Specific scenarios where each approach is appropriate
  2. Add 0.108.0 Features Section - Document new features:

    • MCP server integration
    • Experimental options (pipefail, enforce-runtime-annotations)
    • Per-command completers with @complete
    • CustomValue handling changes

Medium Priority

  1. Add Migration Guide - Create section for:

    • Breaking changes from 0.107.1 to 0.108.0
    • into valuedetect type migration
    • Stream error handling changes
  2. Update Examples - Verify all code examples use correct syntax


Testing Methodology

All syntax rules were validated using:

# Test environment
Nushell Version: 0.107.1
OS: macOS (Darwin 25.0.0)
Test Date: 2025-10-18

# Test commands executed
1. Function signature with colon only
2. Function signature with arrow only
3. Function signature with colon + arrow
4. String interpolation with square brackets
5. String interpolation with parentheses
6. Try-catch with error parameter
7. Try-catch without error parameter
8. Complete-based error handling

Conclusion

The best_nushell_code.md document contains critical syntax errors that will cause code generation failures. Rules 16 and 17 must be fixed immediately to prevent widespread issues in AI-generated Nushell code.

Priority Level: 🔴 CRITICAL - IMMEDIATE ACTION REQUIRED

The document should not be used for code generation until these issues are resolved.


Detailed Validation Results (JSON Format)

{
  "validation_date": "2025-10-18",
  "nushell_version_tested": "0.107.1",
  "target_version": "0.108.0",
  "document": ".claude/best_nushell_code.md",
  "rules_validated": [
    {
      "rule_number": 16,
      "rule_name": "Function Signature Syntax with Colon",
      "status": "incorrect",
      "severity": "critical",
      "current_syntax": "def fn [param: type]: return_type {}",
      "correct_syntax": "def fn [param: type]: input_type -> return_type {}",
      "test_results": {
        "colon_only": "FAIL - Expected arrow (->)",
        "arrow_only": "FAIL - Expected colon (:) before type signature",
        "colon_and_arrow": "PASS"
      },
      "recommendation": "Complete rewrite required. The colon introduces the type signature section which MUST include both input type and output type separated by arrow (->)."
    },
    {
      "rule_number": 17,
      "rule_name": "String Interpolation Style - Use Square Brackets",
      "status": "incorrect",
      "severity": "critical",
      "current_recommendation": "Use [$var] for variables, ($expr) for expressions",
      "correct_syntax": "ALWAYS use ($var) or ($expr) with parentheses",
      "test_results": {
        "square_brackets": "FAIL - No interpolation occurs",
        "parentheses": "PASS - Correct interpolation"
      },
      "recommendation": "Remove this rule entirely or rewrite to state that parentheses () are ALWAYS required for string interpolation in Nushell."
    },
    {
      "rule_number": "N/A",
      "rule_name": "Try-Catch Block Pattern (Lines 116, 713-767)",
      "status": "needs_clarification",
      "severity": "medium",
      "issue": "States try-catch with error parameter 'might not be supported' but testing shows it works fine",
      "test_results": {
        "try_catch_with_error_param": "PASS - Works correctly",
        "try_catch_without_param": "PASS - Works correctly",
        "complete_based": "PARTIAL - Doesn't catch all internal errors"
      },
      "recommendation": "Research and clarify when complete vs try-catch should be used. The blanket recommendation to avoid try-catch appears incorrect."
    }
  ],
  "new_syntax_features_0_108": [
    {
      "feature": "MCP Server Integration",
      "description": "Optional Model Context Protocol server for AI agents",
      "impact": "Enables better AI tool integration"
    },
    {
      "feature": "Experimental pipefail",
      "description": "Sets $env.LAST_EXIT_CODE to rightmost non-zero exit in pipeline",
      "impact": "Better error tracking in pipelines"
    },
    {
      "feature": "Per-command completers",
      "description": "@complete attribute for custom completers",
      "impact": "More flexible completion system"
    },
    {
      "feature": "Stronger CustomValue support",
      "description": "Better plugin custom value handling",
      "impact": "Improved plugin development"
    }
  ],
  "breaking_changes_0_108": [
    {
      "change": "into value renamed to detect type",
      "impact": "Code using 'into value' needs migration",
      "migration": "Replace 'into value' with 'detect type'"
    },
    {
      "change": "Stream collection with errors now raises error",
      "impact": "Error handling in pipelines may need adjustment",
      "mitigation": "Wrap in try-catch if error recovery needed"
    },
    {
      "change": "Type coercion between strings and globs",
      "impact": "More flexible type system for paths",
      "benefit": "Less explicit conversions needed"
    }
  ],
  "summary": {
    "total_rules_checked": 17,
    "valid_rules": 15,
    "invalid_rules": 2,
    "needs_clarification": 1,
    "critical_issues": 2,
    "recommended_action": "IMMEDIATE UPDATE REQUIRED - Do not use for code generation until fixed"
  }
}

References

  1. Nushell 0.108.0 Release Notes: https://www.nushell.sh/blog/2025-10-15-nushell_v0_108_0.html
  2. Nushell Type Signatures Documentation: https://www.nushell.sh/lang-guide/chapters/types/type_signatures.html
  3. Nushell Custom Commands Documentation: https://www.nushell.sh/book/custom_commands.html
  4. Working with Strings Documentation: https://www.nushell.sh/book/working_with_strings.html
  5. GitHub Issue #1035: Documentation for 'def' keyword signature should include optional syntax for return type
  6. Pull Request #14309: Make command signature parsing more strict

Report Generated: 2025-10-18 Validated By: Claude Code (Sonnet 4.5) Next Review: After implementing recommended fixes