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:
| 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 |
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 |
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 CodestatusLine 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 |
Shared-hook cleanup still applies to orphan platform files
The non-Claudestatusline.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:--migrate flag is required for this patch.