# 3.8.0

**Release Date:** July 8, 2026

This release brings CLI-native pipeline observability with `saif pipeline logs`, `saif pipeline open`, and `saif pipeline monitor`, a searchable service catalog with `saif service search` and `saif service describe`, and deep Smithy/SDK investment - the Forge agent now speaks real Azure DevOps REST and exposes CLI commands and templates directly to consumers. Terraform gains a dedicated Front Door route for the event service and default health checks for web/API services.

---

## ✨ New Features

### CLI

- **pipeline observability** - `saif pipeline logs --follow` for live build tail, `saif pipeline open`, `saif pipeline logs <build-id>`, and build URL support in `saif pipeline monitor` ([`426722b2`](https://github.com/saif-corp/forge/commit/426722b2) | [#796](https://github.com/saif-corp/forge/pull/796), [`0d27e5a6`](https://github.com/saif-corp/forge/commit/0d27e5a6) | [#794](https://github.com/saif-corp/forge/pull/794), [`0f8bfc66`](https://github.com/saif-corp/forge/commit/0f8bfc66) | [#795](https://github.com/saif-corp/forge/pull/795), [`26c7da81`](https://github.com/saif-corp/forge/commit/26c7da81) | [#773](https://github.com/saif-corp/forge/pull/773))
- **service catalog** - `saif service search` and `saif service describe <name>`, later showing deployed image tags, build numbers, and slots ([`ed07ffa3`](https://github.com/saif-corp/forge/commit/ed07ffa3) | [#797](https://github.com/saif-corp/forge/pull/797), [`011607cc`](https://github.com/saif-corp/forge/commit/011607cc) | [#807](https://github.com/saif-corp/forge/pull/807), [`6f568d3d`](https://github.com/saif-corp/forge/commit/6f568d3d) | [#870](https://github.com/saif-corp/forge/pull/870))
- **doctor** - update global tools to the latest available version ([`cb4b2f18`](https://github.com/saif-corp/forge/commit/cb4b2f18) | [#900](https://github.com/saif-corp/forge/pull/900))
- **observability** - Dynatrace integration for `saif auth` and `saif otel` ([`81ad7bf0`](https://github.com/saif-corp/forge/commit/81ad7bf0) | [#874](https://github.com/saif-corp/forge/pull/874))

### Smithy & SDK

- Expose `saif` CLI commands and templates to the Forge agent ([`b8926cca`](https://github.com/saif-corp/forge/commit/b8926cca) | [#861](https://github.com/saif-corp/forge/pull/861))
- Implement real Azure DevOps REST in `DevOpsAgent` ([`21f7aee5`](https://github.com/saif-corp/forge/commit/21f7aee5) | [#858](https://github.com/saif-corp/forge/pull/858))
- Add SDK service catalog with on-behalf-of identity ([`4d89f29e`](https://github.com/saif-corp/forge/commit/4d89f29e) | [#849](https://github.com/saif-corp/forge/pull/849))
- Move documentation into the SDK with tiered Smithy-brokered search ([`2898a739`](https://github.com/saif-corp/forge/commit/2898a739) | [#844](https://github.com/saif-corp/forge/pull/844))
- Scaffold `SAIF.Platform.CLI.Sdk` leaf library with auth seam ([`fb6634f2`](https://github.com/saif-corp/forge/commit/fb6634f2) | [#841](https://github.com/saif-corp/forge/pull/841))
- Add bundled CLI knowledge manifest and reader ([`fbafa454`](https://github.com/saif-corp/forge/commit/fbafa454) | [#860](https://github.com/saif-corp/forge/pull/860))
- Add MCP Inspector dev harness to `Smithy.AppHost` ([`27245f8e`](https://github.com/saif-corp/forge/commit/27245f8e) | [#830](https://github.com/saif-corp/forge/pull/830))
- Add OpenTelemetry GenAI diagnostics ([`9cce801b`](https://github.com/saif-corp/forge/commit/9cce801b) | [#826](https://github.com/saif-corp/forge/pull/826))

### Terraform

- Add dedicated Front Door route for the event service ([`1bdbfaa3`](https://github.com/saif-corp/forge/commit/1bdbfaa3) | [#905](https://github.com/saif-corp/forge/pull/905))
- Enable health checks by default for web and API services ([`f4c6e11b`](https://github.com/saif-corp/forge/commit/f4c6e11b) | [#855](https://github.com/saif-corp/forge/pull/855))

### Templates

- Add the `enableSlotDeployment` pipeline parameter and expand the PR slot deployment guide ([`33f41405`](https://github.com/saif-corp/forge/commit/33f41405) | [#868](https://github.com/saif-corp/forge/pull/868))
- Add PR slot deployment routing and a standalone slot routing extension ([`2eb5c18d`](https://github.com/saif-corp/forge/commit/2eb5c18d) | [#866](https://github.com/saif-corp/forge/pull/866))
- **event-subscription** - add app settings config to the subscription template ([`88da2fad`](https://github.com/saif-corp/forge/commit/88da2fad) | [#768](https://github.com/saif-corp/forge/pull/768))
- **docs site** - fix trailing-slash redirect and add owner to `saif-feature-docs-site` ([`d85c3315`](https://github.com/saif-corp/forge/commit/d85c3315) | [#839](https://github.com/saif-corp/forge/pull/839))

---

## 🔧 Enhancements

### CLI

- Standardize CLI JSON handling on `System.Text.Json` ([`54700a85`](https://github.com/saif-corp/forge/commit/54700a85) | [#886](https://github.com/saif-corp/forge/pull/886))
- Centralize output formatting (JSON/table/markdown) across commands ([`9149860f`](https://github.com/saif-corp/forge/commit/9149860f) | [#865](https://github.com/saif-corp/forge/pull/865))
- Invert catalog auth seam and split repository host into SCM + pipeline axes ([`2588cacf`](https://github.com/saif-corp/forge/commit/2588cacf) | [#834](https://github.com/saif-corp/forge/pull/834))
- Cut startup time with update-check caching and lazy command init ([`3311412d`](https://github.com/saif-corp/forge/commit/3311412d) | [#806](https://github.com/saif-corp/forge/pull/806))
- Adopt shared AzureDevOps context resolver in pipeline run/list/approve ([`43ae453d`](https://github.com/saif-corp/forge/commit/43ae453d) | [#793](https://github.com/saif-corp/forge/pull/793))

### Smithy & SDK

- Extract shared `AzureDevOpsRestClient` ([`7d295b70`](https://github.com/saif-corp/forge/commit/7d295b70) | [#857](https://github.com/saif-corp/forge/pull/857))
- Move service catalog into `SAIF.Platform.Sdk` ([`223afe33`](https://github.com/saif-corp/forge/commit/223afe33) | [#842](https://github.com/saif-corp/forge/pull/842))
- Remove Teams/M365 integration, leaving an MCP-only agent ([`c5a54e6c`](https://github.com/saif-corp/forge/commit/c5a54e6c) | [#827](https://github.com/saif-corp/forge/pull/827))
- Add `ConfigureAwait(false)` throughout `SAIF.Platform.Sdk` ([`9fbe014b`](https://github.com/saif-corp/forge/commit/9fbe014b) | [#884](https://github.com/saif-corp/forge/pull/884))
- Remove null-forgiving operator usages in CLI and SDK ([`36e46dcf`](https://github.com/saif-corp/forge/commit/36e46dcf) | [#882](https://github.com/saif-corp/forge/pull/882))

### Skills

- Relocate release tooling into the release-management skill ([`116605bb`](https://github.com/saif-corp/forge/commit/116605bb) | [#837](https://github.com/saif-corp/forge/pull/837))
- Relocate sole-caller tools into skill `scripts/` dirs ([`d5b3e85d`](https://github.com/saif-corp/forge/commit/d5b3e85d) | [#836](https://github.com/saif-corp/forge/pull/836))

---

## 🐛 Bug Fixes

### CLI

- Resolve `Commands/_deprecated/` audit finding - all commands verified live, not dead code ([`97b94806`](https://github.com/saif-corp/forge/commit/97b94806) | [#887](https://github.com/saif-corp/forge/pull/887))
- Remove blocking `Wait()` calls in doctor cache resets and document swallowed catch ([`1b79b7de`](https://github.com/saif-corp/forge/commit/1b79b7de) | [#885](https://github.com/saif-corp/forge/pull/885))
- Convert `repo search --name` to a positional arg and enforce non-nullable `Query` ([`2c1f45e4`](https://github.com/saif-corp/forge/commit/2c1f45e4) | [#854](https://github.com/saif-corp/forge/pull/854))
- `saif pipeline monitor` now returns a non-zero exit code for failed builds ([`4aa05276`](https://github.com/saif-corp/forge/commit/4aa05276) | [#792](https://github.com/saif-corp/forge/pull/792))
- Surface `PublishResult` errors/warnings, fix pipeline creation, idempotent publish ([`cf58e950`](https://github.com/saif-corp/forge/commit/cf58e950) | [#782](https://github.com/saif-corp/forge/pull/782))
- Bound `saif service search` Graph paging for broad queries ([`3ae51e7d`](https://github.com/saif-corp/forge/commit/3ae51e7d) | [#817](https://github.com/saif-corp/forge/pull/817))

### Terraform

- Source APIM `display_name` from the OpenAPI spec title ([`03d0324e`](https://github.com/saif-corp/forge/commit/03d0324e) | [#890](https://github.com/saif-corp/forge/pull/890))
- Route prod diagnostic logs to the prod Dynatrace event hub ([`618a28ac`](https://github.com/saif-corp/forge/commit/618a28ac) | [#853](https://github.com/saif-corp/forge/pull/853))
- Connect function apps to the function app service plan ([`f2024c24`](https://github.com/saif-corp/forge/commit/f2024c24) | [#876](https://github.com/saif-corp/forge/pull/876))
- Bump `application_permissions` module to `~> 4.12.0` ([`d4fba054`](https://github.com/saif-corp/forge/commit/d4fba054) | [#840](https://github.com/saif-corp/forge/pull/840))

### Templates

- Remove dead port symbol and align health-check description ([`da05514e`](https://github.com/saif-corp/forge/commit/da05514e) | [#888](https://github.com/saif-corp/forge/pull/888))
- Move generated port ranges off the reserved band 22921-23020 ([`1cbeaa93`](https://github.com/saif-corp/forge/commit/1cbeaa93) | [#809](https://github.com/saif-corp/forge/pull/809))

### Other

- **typespec** - remove `status` from `ProblemDetails` base for Kiota codegen ([`d3849f5d`](https://github.com/saif-corp/forge/commit/d3849f5d) | [#904](https://github.com/saif-corp/forge/pull/904))
- **kiota** - fall back to client credentials when no user token is present ([`02299eff`](https://github.com/saif-corp/forge/commit/02299eff) | [#871](https://github.com/saif-corp/forge/pull/871))
- **dotnet** - wire orphaned CLI and AspNetCore tests into `Forge.sln` ([`1add14c3`](https://github.com/saif-corp/forge/commit/1add14c3) | [#878](https://github.com/saif-corp/forge/pull/878))
- **smithy** - resolve NuGet restore failures in CI ([`1d8f8bc0`](https://github.com/saif-corp/forge/commit/1d8f8bc0) | [#825](https://github.com/saif-corp/forge/pull/825))

---

## 📚 Documentation

- Add Platform Economics section to the platform overview and fix Azure App Service cost figures ([`4dcd43e0`](https://github.com/saif-corp/forge/commit/4dcd43e0) | [#864](https://github.com/saif-corp/forge/pull/864), [`436e5ac8`](https://github.com/saif-corp/forge/commit/436e5ac8) | [#896](https://github.com/saif-corp/forge/pull/896))
- Correct deployment target in the platform overview ([`b944fe5f`](https://github.com/saif-corp/forge/commit/b944fe5f) | [#810](https://github.com/saif-corp/forge/pull/810))
- Document how a service maps to its Azure resources ([`52c7136b`](https://github.com/saif-corp/forge/commit/52c7136b) | [#872](https://github.com/saif-corp/forge/pull/872))
- Consolidate the auth permission model to `Client.*` scopes and `App.*` roles ([`1ee452ec`](https://github.com/saif-corp/forge/commit/1ee452ec) | [#780](https://github.com/saif-corp/forge/pull/780))
- Remove deprecated CLI commands from documentation ([`08e5f4dd`](https://github.com/saif-corp/forge/commit/08e5f4dd) | [#877](https://github.com/saif-corp/forge/pull/877))

---

## 📦 Dependencies

Routine dependency maintenance via Dependabot: 25 PRs across NuGet and npm/yarn workspaces, including a security-relevant bump of `Microsoft.Identity.Client` and 3 related packages ([`d02e580d`](https://github.com/saif-corp/forge/commit/d02e580d) | [#852](https://github.com/saif-corp/forge/pull/852)). See the [full commit range](https://github.com/saif-corp/forge/compare/3.7.5...3.8.0) for the complete list.

---

## 🔄 Breaking Changes

None in this release ✅

---

## 📋 Additional Notes

- Total commits: 98
- Files changed: 606
- Contributors: Aaron Morgulis, dependabot[bot], Emmitt Johnson, Jason Coria Corona Yue

---

### Support

- 📧 Teams Support Channel: [Support](https://teams.microsoft.com/l/channel/19%3Acb611810fb0b42b080cfff5590bdd51c%40thread.tacv2/Support?groupId=514d2dac-2d62-48ce-bf99-0fa0ce39469c&tenantId=a86cb8ed-369b-4df5-ace5-43811f6e08cf)

---
