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

_65 commits._

### Features
- **feat(packs): expose Terraform replacement paths** (e3e00db)
- **feat(portal): admins manage billing, pack trust follows pack access, keys need the fleet** (fc65692)
- **feat(portal): seed the demo account to a paginating volume** (55ead4c)
- **feat(portal): an operator owns what it minted, and the console says so** (affa9ec)
- **feat(portal): operators get the access their role implies** (c294dfe)
- **feat(portal): one shape for a gated setting — the value is always visible** (5dac084)
- **Add Google Cloud Logging diagnostics** (2f90b8a)
- **Packs: add compact incident diagnostics** (2767d6d)
- **feat(portal): the update tooltip carries its command as a copyable row** (341e681)
- **feat(portal): seed the dev staff account for /admin** (45a9ce5)
- **feat(portal): read-only staff console at /admin** (b2a44df)
- **feat(portal): bind session MFA proof to its enrollment; gate staff /admin on it** (5c10386)

### Fixes
- **fix(ci): shard heavyweight pack behavior suites** (e616b4c)
- **fix(ci): count connected runners across the MCP page** (a8f1837)
- **fix(dev): build Runner and MCP with Go 1.26.6** (c5478e6)
- **fix(portal): tighten restricted pack spacing** (e16a83f)
- **fix(portal): distinguish runner access empty states** (9129731)
- **fix(portal): unify the LLM agent icon** (b6b8a49)
- **fix(portal): distinguish filtered empty states** (56a587f)
- **fix(portal): combine runner identity search** (ba3c6fe)
- **fix(portal): clear scope-audit maintenance debt** (edd50fe)
- **fix(portal): harden scoped history and cleanup** (9f91fe9)
- **fix(portal): make mapping lists and overlays reachable** (d4da160)
- **fix(portal): scope audit filter controls** (f9b9620)
- **fix(portal): group related filters** (f6a79b5)
- **fix(portal): hide dashboard from billing managers** (b19092c)
- **fix(portal): explain pack-scoped console results** (649ec18)
- **fix(portal): reconnect after membership authorization changes** (68844ed)
- **fix(portal): an overlay opens on the side that fits** (9f1bcff)
- **fix(portal): smaller pages, a door off the runbooks rail, unbroken pills** (d9696de)
- **fix(portal): pin the role model — superset invariant, finance seat, audit filter** (d6c9a77)
- **fix(portal): policy and audit stop naming runners you can't reach** (4ec95ce)
- **fix(tooling): cap the two docs shots that crop a paginated list** (6c4c9e7)
- **fix(portal): the finance seat gets team, billing, and the money trail** (455c4ae)
- **fix(portal): the staff invite works, and the admin-scope note goes** (ac0852c)
- **fix(portal): you can only promote someone you could already reach** (42ae1f3)
- **fix(portal): a menu near the edge opens where it fits** (1792fe8)
- **fix(portal): the operator's console stops offering what it can't do** (dccd283)
- **fix(portal): a roster role is a value, not a disabled-looking control** (4951d3f)
- **fix(portal): a row with two verbs wears the bordered face** (280394b)
- **fix(go): move the toolchain to 1.26.6 for the stdlib advisory batch** (1d6ddde)
- **fix(portal): marketing CTA arrows ride the text flow — one treatment** (59d8ce2)
- **fix(portal): a copy click never activates the surface beneath it** (7a16051)
- **fix(portal): meta_line stops rendering its own template newline** (d146f46)
- **fix(portal): one face for View activity across the policies page** (da58ce9)
- **fix(portal): audit quick filters separate their three dimensions with air** (6aa1a5e)
- **fix(portal): pillar metrics one grammar, paired verbs one face, pill width to the column** (47912af)
- **fix(portal): console grammar — fixed tracks, one button language, no restatement** (2fe9e86)
- **fix(portal): staff /admin console polish — one vocabulary, no restatement** (d4a5fb6)
- **fix(portal): console tone pass — semantic color roles hold everywhere** (4182eba)
- **fix(portal): decision copy reachable, composite values unclipped** (b2103a0)
- **fix(portal): failed reads render as load errors, never as empty states** (d9931ee)
- **fix(portal): code_input owns fixed cell geometry on every surface** (ada1b28)

### Backend
- **release: v0.41.0 — role and scope changes take effect immediately** (e195a4b)
- **content(portal): say why a key needs the whole fleet, in plain words** (aa23dae)
- **content(portal): name what access gets you, not what a pack holds** (e0844b8)
- **content(portal): scoping an admin is a guardrail, not containment** (84da578)
- **content(portal): the runbooks page introduces itself** (13c58f0)
- **Harden ChatGPT review workflows** (ff3e658)
- **Bump the pinned admin runner release to 0.20.0 in infra/compute.tf (#42)** (370b15a)
- **content(portal): approvals rails say it once** (6b81fa2)

### Docs
- **docs(portal): the layered-context examples teach a context that doesn't exist** (17bad68)
- **docs: extend §7.47 row-grammar with the two-verb bordered-face trigger (#43)** (a974757)
- **docs: correct Audit.resolve_references arity from /1 to /2 (#45)** (b60ae10)
- **docs: mark pure-flasharray continuation_token rename as done in KB rule (#40)** (31c5738)

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