## dagucloud/dagu — v2.17.2…v2.18.0

_38 commits._

### Features
- **feat: expose step precondition bypass in retry API and UI (#2880)** (5afca0d)
- **feat: make desktop state readable by programs (#2896)** (8373022)
- **feat: add container env_file support (#2881)** (f0e2b70)
- **feat(ui): autocomplete for DAG name and run ID filters (#2877)** (614a765)
- **feat(scheduler): support cron descriptors like @daily (#2876)** (bbec905)
- **Add computer steps for desktop automation (#2865)** (cd17d4a)
- **feat: reply to emails, publish message_id, and accept OAuth scopes (#2871)** (2c89bf8)
- **feat: add mailbox actions (#2867)** (7a3f06f)

### Fixes
- **fix: surface DAG build errors on run records (#2890)** (16b4bc7)
- **fix(agent): reject duplicate execution of an already-recorded dag-run attempt (#2931)** (8840e89)
- **fix: stop dropping YAML documents after empty documents (#2914)** (a87c6d3)
- **fix(docker): support bracketed IPv6 hosts in port mappings (#2911)** (d55d435)
- **fix(coordinator): distinguish busy workers from selector mismatches (#2943)** (60b7232)
- **fix(api): recover approvals and preserve direct resumes (#2901)** (aecd87a)
- **fix(router): allow a step to be the target of several routes (#2942)** (c6a4508)
- **fix: clear worker ownership when re-queuing a retry (#2940)** (78b1e28)
- **fix: load dotenv for scheduler-triggered runs (#2937)** (a073f03)
- **fix(runtime): surface repeat_policy evaluation errors (#2902)** (26430c0)
- **fix(ssh): resolve params in DAG-level ssh fields (#2887)** (57a3ea2)
- **fix: recover browser acts that lose the page session (#2924)** (404a28a)
- **fix: keep final output line in step logs when secrets are declared (#2933)** (7cb7f60)
- **fix: child run params take precedence over inherited parent env (#2888)** (775f15e)
- **fix: embed time zone database for Windows (#2916)** (6fc2f68)
- **fix: keep multi-line jq filters as the filter (#2897)** (bffab48)
- **fix(notification): fill run.error from failed steps (#2894)** (f8b2e8d)
- **fix(coordinator): set WorkspaceBundleDir on runtime dispatcher (#2879)** (81c30ca)
- **fix(coordinator): preserve queue identity for distributed starts (#2895)** (b851868)
- **fix(runtime): propagate condition abort and timeout (#2878)** (a794dd5)
- **fix: make computer steps safe on a shared desktop (#2892)** (03e1e4e)
- **fix(persis): deflake base.yaml watch test on Windows (#2874)** (91b4808)
- **fix(runtime): correct sibling condition message on evaluation error (#2870)** (21d312b)
- **fix: type mail attachments and reject unreadable ones (#2869)** (91cd43b)
- **fix: record browser replays only when the step succeeds (#2868)** (ee6fdba)

### Backend
- **runtime: warn about missing shell and commands in dry runs (#2899)** (34ef606)

### Tests
- **test(spec): pin SFTP DAG-level SSH inheritance contract (#2886)** (2227b35)

### Chore
- **ci: publish a signed packslip with each release (#2891)** (ed68df5)
- **refactor: deduplicate non-escaping JSON marshal helper (#2872)** (4c9c195)
- **ci: shard Go and conformance tests to cut CI time (#2862)** (1a76b62)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/dagucloud/dagu?utm_source=github-action)._