---
# System prepended metadata

title: Nushell core team meeting 2023-07-19

---

## Attendees
- AucaCoyan
- Amtoine
- Michael
- JT
- Stefan
- WindSoilder
- Andres

## Agenda
- [x] [feat!: follow the XDG Base Directory Specification everywhere
](https://github.com/nushell/nushell/pull/8682#issuecomment-1637237930) :eyes:
- [x] the release approaches and the website still does not build...
    - [this failing job](https://github.com/nushell/nushell.github.io/actions/runs/5403427180/jobs/10246620887?pr=966) in [#966](https://github.com/nushell/nushell.github.io/pull/966)
    - related to [#983](https://github.com/nushell/nushell.github.io/issues/983)?
- [x] Input/output type checking progress
- [x] Fun and 1.0 release
- [x] [function body can't use variable which out of scope #9724](https://github.com/nushell/nushell/issues/9724)

# Discussed Topics

## XDG or directory
Defer to Darren?
PR author pinged us
Area where we are hesitant to make breaking changes as it affects basically all users immediately

## Website build problem
CI runs fail currently only affects draft blog post. Maybe is this a problem with the file containing possibly a templating string that breaks VuePress
I (@amtoine) did a javascript injection attack :smirk:
=> opened https://github.com/nushell/nu_scripts/issues/556

## input/output types
we now have a lot more input/output checking. Replaced broken mechanism with a much more sensitive solution. JTs executive summary:
walk the pipeline, read the output, check if there is at least one intersection with the next element, does it for each of the output types.

Also now custom input/output types
still some likely syntax errors (e.g. `-> type` coming from rust) either support syntax or provide errors.

Several issues: https://github.com/nushell/nushell/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Atype-system

Known issues:
handling `return`
`vectorizes_over_list`: remove for now and make it explicit
example test that broke: we need to clean up after the effort

AucaCoyan: what is the behavior if something `return`'s or passes `$nothing` -> should be incompatible if not expecting `nothing`.

Q: is there malicious input that breaks the eager selection of types.
    - we only pick the first, no backtracking
    
Sentiment of going into the next release:
Amtoine: great direction, maybe we can fix the bugs later

Problem with rest parameter: https://github.com/nushell/nushell/issues/9720

- Append is not creating a list but a `liststream`

Can we describe how our typechecking is MVP

## Fun and the 1.0 release
- Relevance of fun for free/fast hacking
- Chat Darren + JT: How can we get more fun?
- Incentivization and recognition for bug fixes/polish work
    - the long tail currently doesn't feel fun
- Shoutouts to people
    - in the release notes we previously primarily shouted out features. And this doesn't perfectly align with the 1.0 stability goals. We need to incentivice bug fixing
- We should reward fixing hard bugs
    - even if they might got it not quite right at first
- We don't talk about easter eggs ;)
    - seasonal messages
    - NES in Nushell
    - april fools => bash-like prompt / output

## Function bodies capturing
[function body can't use variable which out of scope #9724](https://github.com/nushell/nushell/issues/9724)

JT: assumption commands shouldn't close over outers scope. modules need to behave hygienic enough

Jakub has been working to get `const` far enough so it could be "cloned" in

Improve the error message to say: "Custom commands do not have visibility to variables outside its scope" suggest solution

Darren: Is there different behavior in the REPL?


SURPRISE SURPRISE it works in the repl
`do` also a different beast

We should have consistent rules here
Discussions with Jakub on the module/overlay side would be relevant to fill our gaps here

```
~> mut b = 3; def c [] { $b }; c; b = 5; c                                                                              kkkkk Error: nu::parser::expected_keyword

  × Capture of mutable variable.
   ╭─[entry #2:1:1]
 1 │ mut b = 3; def c [] { $b }; c; b = 5; c
   ·                       ─┬
   ·                        ╰── capture of mutable variable
   ╰────

~>

 

~> def c [] { $b }; let b = 3; c                                     Error: nu::parser::variable_not_found

  × Variable not found.
   ╭─[entry #1:1:1]
 1 │ def c [] { $b }; let b = 3; c
   ·            ─┬
   ·             ╰── variable not found.
   ╰────

~> do { let b = 3; def c [] { $b }; c }                              Error: nu::shell::variable_not_found

  × Variable not found
   ╭─[entry #1:1:1]
 1 │ do { let b = 3; def c [] { $b }; c }
   ·    ────────────────┬────────────────
   ·                    ╰── variable not found
   ╰────
```

Brings light into some dark corners of our parser and scoping

## PRs and Issues
- [ ] https://github.com/nushell/nushell/pull/9646
- [ ] https://github.com/nushell/nushell/pull/9575

> :bulb: the issues which [needs-core-team-attention](https://github.com/nushell/nushell/labels/needs-core-team-attention)

> :bulb: **Note**
> to list all the PRs currently [opened in `nushell/nushell`](https://github.com/nushell/nushell/pulls):
> ```nu
> gh pr list --json url,number,author,title
> | from json
> | each {|i|
>     $"- [($i.number)]\(($i.url)\) ($i.title) \(@($i.author.login)\)"
> }
> | reverse
> | to text
> ```