- 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
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 { } | completeinstead oftry-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
completecommand 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_CODEto rightmost non-zero exit code in pipelineenforce-runtime-annotations: Stricter type checking at runtime
3. Per-Command Completers (NEW in 0.108)
- Custom commands can use
@completeattribute to specify completers - More flexible completion system
4. Stronger CustomValue Support (NEW in 0.108)
- Better handling of plugin-provided custom values
into valuerenamed todetect typefor 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 value→detect type(renamed)- Stream collection with errors now raises errors
- Type coercion between strings and globs now supported
Recommended Actions
Immediate (Critical Priority)
-
Fix Rule 16 - Update function signature syntax to:
def command-name [param: type]: input_type -> return_type { # body } -
Remove or Rewrite Rule 17 - Correct string interpolation:
# ✅ ALWAYS use parentheses for interpolation print $"Variable: ($var)" print $"Expression: (1 + 2)" -
Update Template Pattern (Lines 639-674) - Fix the template to use correct syntax
High Priority
-
Clarify Try-Catch Guidance - Research and document:
- When to use
try-catchvscomplete - Whether error parameter
|e|has any limitations - Specific scenarios where each approach is appropriate
- When to use
-
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
-
Add Migration Guide - Create section for:
- Breaking changes from 0.107.1 to 0.108.0
into value→detect typemigration- Stream error handling changes
-
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
- Nushell 0.108.0 Release Notes: https://www.nushell.sh/blog/2025-10-15-nushell_v0_108_0.html
- Nushell Type Signatures Documentation: https://www.nushell.sh/lang-guide/chapters/types/type_signatures.html
- Nushell Custom Commands Documentation: https://www.nushell.sh/book/custom_commands.html
- Working with Strings Documentation: https://www.nushell.sh/book/working_with_strings.html
- GitHub Issue #1035: Documentation for 'def' keyword signature should include optional syntax for return type
- 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