# Upgrade Guide — v0.28.1

<!-- bump: patch -->

## What Changed

**Gate Failure Diagnostics** — When a job's gate command fails, the scheduler now captures and logs the exit code, stderr output, and the gate command itself in the event metadata. Previously, gate failures were silently swallowed with only "gate check returned nothing to do" — making it impossible to diagnose why jobs were being skipped.

Additionally, gate skips are now recorded in the SkipLedger (previously only quota, paused, claimed, and machine-scope skips were tracked). The new `gate` skip reason appears in skip reports and the auto-tune system.

**Memory Export Gate Auth Fix** — The memory-export job's gate command referenced an undefined `$AUTH` shell variable. The gate now resolves the auth token inline from the agent's config file, matching the pattern used by the job's execute script.

## What to Tell Your User

- **Better job skip visibility**: "If your scheduled jobs are being skipped and you are not sure why, the skip events now include the actual error from the gate check. You can see these in the event log or skip ledger."

- **Memory export reliability**: "The memory export job had a gate that would always fail silently due to a missing authentication token. This is now fixed — memory exports should run on schedule."

## Summary of New Capabilities

| Capability | How to Use |
|-----------|-----------|
| Gate skip diagnostics | Automatic — check event log for `job_gate_skip` events with `exitCode` and `stderr` metadata |
| Gate skip in SkipLedger | `GET /jobs/report` now includes gate skips in skip counts |
