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

# v0.5.0-beta.16

> 2026-04-28

Beta.16 is a compatibility patch for template hash portability, task archive inputs, and Claude Code statusLine upgrades after beta.15.

## Bug Fixes

### Template hash portability

Template hash storage now uses POSIX path keys and LF-normalized content hashes.

The `.trellis/.template-hashes.json` file now uses a versioned envelope:

```json theme={null}
{
  "__version": 2,
  "hashes": {
    ".trellis/scripts/task.py": "<sha256>"
  }
}
```

| Area                    | beta.16 behavior                                                    |
| ----------------------- | ------------------------------------------------------------------- |
| Hash keys               | Stored with `/` separators on every host                            |
| Hash input              | CRLF content is normalized to LF before SHA256                      |
| Legacy flat hash file   | Discarded and regenerated from installed templates                  |
| Directory safety checks | `path.relative()` output is normalized before template/hash lookups |
| OpenCode templates      | Collector stores `.opencode/*` keys in POSIX form                   |

This fixes Windows checkout cases where backslash hash keys or CRLF line endings made unchanged templates look modified.

### `task.py archive` input contract

`task.py archive` now accepts the same task inputs as the other task-directory commands.

| Input form         | Example                                                                       |
| ------------------ | ----------------------------------------------------------------------------- |
| Bare task name     | `python3 .trellis/scripts/task.py archive 04-27-example`                      |
| Relative task path | `python3 .trellis/scripts/task.py archive .trellis/tasks/04-27-example`       |
| Absolute task path | `python3 .trellis/scripts/task.py archive /repo/.trellis/tasks/04-27-example` |

Previously, `archive` was the only dir-style task command that used slug-only lookup. Passing `.trellis/tasks/<slug>` failed with `Task not found` even though other task commands accepted that form.

### Existing Claude Code statusLine installs are preserved

Beta.15 stopped installing Claude Code `statusLine` for new projects. That default is unchanged.

The upgrade path is now more conservative:

| Case                                                       | beta.16 behavior                                                                                               |
| ---------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
| New project                                                | Trellis does not create `.claude/hooks/statusline.py` and does not add `statusLine` to `.claude/settings.json` |
| Existing project with `.claude/hooks/statusline.py`        | `trellis update` preserves the file                                                                            |
| Existing project with `.claude/settings.json` `statusLine` | `trellis update` carries that entry into the updated settings file                                             |

This means beta.16 no longer treats Claude Code statusLine as a cleanup target. Users who no longer want it can delete the file and settings entry manually.

### Shared-hook cleanup still applies to orphan platform files

The non-Claude `statusline.py` cleanup entries remain hash-verified safe deletes. Those platforms have no `statusLine` event, so the files were never invoked:

* `.cursor/hooks/statusline.py`
* `.codex/hooks/statusline.py`
* `.gemini/hooks/statusline.py`
* `.qoder/hooks/statusline.py`
* `.github/copilot/hooks/statusline.py`
* `.codebuddy/hooks/statusline.py`
* `.factory/hooks/statusline.py`
* `.kiro/hooks/statusline.py`

## Upgrade

Existing projects:

```bash theme={null}
trellis update
```

No `--migrate` flag is required for this patch.
