## AndrewDryga/emisar — v0.39.0…v0.40.0

_66 commits._

### Features
- **Add verified runner self-update** (bfeb7e9)
- **Add a Symbolicator pack for the host that symbolicates** (c83c47b)
- **Add Cassandra migration use case page** (f61ad2a)
- **Add Cassandra migration use case page and tests** (fc27805)
- **Add a Sentry pack for cloud and self-hosted instances** (fc66521)
- **Add the Databricks pack** (4e659c6)
- **Add the JFrog Artifactory pack** (1976b47)

### Fixes
- **fix(tooling): score recoverable MCP client behavior** (3d794f5)
- **fix(portal): make terminal demo seeds atomic** (73edc58)
- **fix(portal): recover cleanly from stale UI state** (a892d82)
- **fix(runner): emit pack update JSON before errors** (1e26bd3)
- **Packs: fix Blitz runner capability checks** (80a0bfe)
- **Walk the LiveView CVE patch through the release-age gate** (9a09c51)
- **Patch the LiveView open-redirect advisory** (61cc1ab)

### Backend
- **release: v0.40.0 — Large runbooks finish** (bf741bb)
- **Keep MCP output pages model-consumable** (bebb9e5)
- **Paginate oversized runbook outputs** (09d1b17)
- **Remove arbitrary runbook step limit** (ff2ec95)
- **Remove theoretical authorization locking** (8ac1f0c)
- **Glue inline punctuation to prose elements** (0ed77ad)
- **Scope current discovery to membership access** (ca18303)
- **Bump the admin runner to v0.19.0** (cffda0a)
- **Keep approval and pack scope aligned** (4467cc4)
- **Use valid scoped audit fixtures** (ef6c9bc)
- **Use the empty pack environment in update tests** (e1098e9)
- **Keep a control's geometry out of its caller's hands** (da232aa)
- **Record that nil is not an empty list, and check the shape that hid it** (d6d6cab)
- **Keep an email paragraph on one line** (b545bf2)
- **Run every CI gate when selection changes** (0cd7b1a)
- **Select client gates for installer harness changes** (f0d18e8)
- **Repair runner and infra CI regressions** (e95ae63)
- **Render a stored runbook definition that predates its inputs key** (d107a12)
- **Handle the runners table's own filter event** (a960612)
- **Explain policy decisions in complete sentences** (e13b30e)
- **Link approval evidence to audit records** (eebba23)
- **Preserve Pure FlashArray pagination cursors** (53c08bc)
- **Make COS admin runner packs executable** (4522c54)
- **Scope approval decisions to current access** (3cc4546)
- **Track coarse membership console activity** (d4dab8f)
- **Redesign the invitation completion receipt** (8a2b172)
- **Nest SSO enforcement with its connection settings** (ab13fc2)
- **Give the admin runner the sentry pack and its token** (d0c2ae8)
- **Let Symbolicator actually symbolicate a crash** (98743f4)
- **Show an available runner update quietly, and name the release** (5d0984e)
- **Bring the admin runner's pinned packs up to what the registry publishes** (8f24705)
- **Say "update the pack" and state who is still on a retired version** (ff954fb)
- **Cover Cassandra's runtime limits, configuration, and administration** (1afa299)
- **Tighten homepage and demo copy** (5c57e58)
- **Bump cloudflare to 0.2.1 to clear the 0.2.0 publish race** (5bc21fd)
- **Cover Cloudflare Workers and Pages operations** (1c1cc45)
- **Record the secret-vocabulary output-key rule** (8488fb8)
- **Rework the Cloudflare pack around a packaged API script** (10e96a3)
- **Serve the packs contents toggle from the last load's groups** (d803108)
- **Read the packs console at browse width and estimate unaffordable audit counts** (0db6678)
- **Call a validated live runbook Validated** (8bb7d3a)
- **Stop offering [:safe] as a defense against ETF decompression bombs** (fc5d85a)
- **Collapsed runbook steps stop paying for their pickers** (627a9eb)
- **Let a shot click through a reveal, in order** (e9718e1)
- **Ship one option catalog per fleet, not one per step** (0e6dece)
- **Admit an advertised read-only action adjacent to the certified task** (7d7f794)
- **Tell a published runbook it runs, not that it is ready to publish** (32660af)

### Docs
- **docs: correct requires_external_service counts after Cloudflare rework (#38)** (755f091)
- **docs: correct pack action cap 80 → 120 in MCP API spec (#39)** (4bf731b)
- **docs: note that shot --click repeats for a multi-step reveal (#34)** (7204c11)
- **docs: correct runbook preflight to reflect trust-gap narrowing (#36)** (8b3c05a)

### Chore
- **chore: remove dead Subject.actor_email/1 (#37)** (4dd1722)

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