> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lagerdata.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Version 0.31.11

> July 14, 2026

## <u>Bug Fixes</u>

* **`lager box config apply` no longer reports success while applying nothing.** `apply` runs `start_box.sh` on the box as the login user, and its four box-config renderers *create* files in `/etc/lager` (`box_config.docker.sh`, `user_requirements.txt`, `cargo_packages.txt`, `npm_packages.txt`). Creating a file needs write permission on the **directory**, and `lager install` left `/etc/lager` owned by the container user only (`33:33`, mode `755`) — so every render failed with `EACCES`. Renders are soft-failed by design (the container must always come up), which turned this into a silent no-op: the install steps read files that were never written, so `apply` skipped them, stamped the applied-hash, and printed "Applied box config". Every `pip`/`cargo`/`npm` package, mount, volume, and env var added through `lager box config` was quietly dropped on any box whose last provisioning step was an install. `/etc/lager` is now owned `33:<box-user-group>` mode `2775` (setgid), so the container (owner) and `start_box.sh` (group) can both write it.
* **`/etc/lager` is no longer world-writable.** `lager update` previously granted the box user write access by running `chmod 777` on the directory, which also gave it to every other local account — enough to replace `box_config.json`, `saved_nets.json`, or the org secrets. It now gets the same owner/group/setgid treatment as above: what the two writers actually need, and nothing more.
* **A box-config render failure is now loud, and no longer poisons the retry.** A failed render used to print a one-line warning and a raw Python traceback, then let the run continue as if applied. It now reports which file could not be written, why, and how to fix it; `start_box.sh` exits 3 ("container up, config NOT applied") and `apply` no longer stamps the applied-hash (which had sealed the bug shut on retry) or rolls back a healthy container.

## <u>Installation</u>

To install this version:

```bash theme={null}
pip install lager-cli==0.31.11
```

To upgrade from a previous version:

```bash theme={null}
pip install --upgrade lager-cli
```

## Resources

[View Release on PyPI](https://pypi.org/project/lager-cli/0.31.11/)
