# 3.2.5

**Release Date:** March 11, 2026

---

## 🐛 Bug Fixes

### Terraform — Azure Front Door

#### Front Door Route Names Now Use `project_id` to Ensure Uniqueness 🔧

**Module:** `src/terraform/saif-api-service`

Fixed a conflict error occurring during `terraform apply` when multiple projects share the same Azure Front Door profile and endpoint. Route names were generated from `var.api.name`, which is not unique across projects on the same shared Front Door profile, causing `already exists` errors on subsequent applies.

**Root Cause:**

The `saif-api-service` module used `var.api.name` as the route name suffix. When two or more API services deployed to the same shared Front Door profile, their routes produced the same name (e.g., `PremiumAudit-api-route`), and Terraform could not reconcile the state, resulting in an apply failure.

**The Fix:**

Changed the route name to use `var.project_id`, which is unique per project:

**Before (conflicting):**
```hcl
name = "${var.api.name}-api-route"
```

**After (unique):**
```hcl
name = "${var.project_id}-api-route"
```

**Migration:**

On the next `terraform apply`, workspaces that change from the old route name to the new `var.project_id`-based name will see a **forced replacement** of the Azure Front Door route (destroy + create). This does not normally require a `terraform import`, but you should be aware of the brief window where the old route is removed before the new one is created. If you have an existing Front Door route that is not tracked in state (for example, it was created manually or state was lost), use `terraform import` as described in [PR #501](https://github.com/saif-corp/forge/pull/501).

> **Note:** The `saif-web-service` module's route naming (`var.application_name`) was intentionally left unchanged — web service paths are unique per application and do not conflict.

**PR:** [#501](https://github.com/saif-corp/forge/pull/501)

---

## 📦 Dependencies

### .NET Packages

The following .NET packages were updated ([#500](https://github.com/saif-corp/forge/pull/500)):

| Package | Version |
|---|---|
| `Microsoft.AspNetCore.Authentication.JwtBearer` | `10.0.4` |
| `Microsoft.AspNetCore.Authentication.OpenIdConnect` | `10.0.4` |
| `Microsoft.AspNetCore.TestHost` | `10.0.4` |
| `Microsoft.Extensions.Caching.*` | `10.0.4` |
| `Microsoft.Extensions.Configuration.*` | `10.0.4` |
| `Microsoft.Extensions.DependencyInjection.*` | `10.0.4` |
| `Microsoft.Extensions.Diagnostics.HealthChecks` | `10.0.4` |
| `Microsoft.Extensions.Hosting.*` | `10.0.4` |
| `Microsoft.Extensions.Http` | `10.0.4` |
| `Microsoft.Extensions.Http.Resilience` | `10.4.0` |
| `Microsoft.Extensions.Logging.*` | `10.0.4` |
| `Microsoft.Extensions.Options.*` | `10.0.4` |
| `Microsoft.Extensions.Primitives` | `10.0.4` |
| `Microsoft.Extensions.ServiceDiscovery` | `10.4.0` |
| `Microsoft.Identity.Client` | `4.83.1` |
| `Microsoft.Identity.Client.Broker` | `4.83.1` |
| `Microsoft.Identity.Client.Extensions.Msal` | `4.83.1` |
| `Microsoft.TemplateEngine.Authoring.TemplateVerifier` | `10.0.200` |
| `Microsoft.TemplateEngine.IDE` | `10.0.200` |
| `ModelContextProtocol` | `1.1.0` |

### TypeScript / Node Packages

The following TypeScript packages were updated ([#498](https://github.com/saif-corp/forge/pull/498), [#496](https://github.com/saif-corp/forge/pull/496), [#493](https://github.com/saif-corp/forge/pull/493)):

| Package | Version |
|---|---|
| `@typespec/compiler` | `1.10.0` |
| `@typespec/http` | `1.10.0` |
| `@typespec/http-server-csharp` | `0.58.0-alpha.26` |
| `@typespec/library-linter` | `0.80.0` |
| `@typespec/openapi` | `1.10.0` |
| `@typespec/openapi3` | `1.10.0` |
| `@typespec/rest` | `0.80.0` |
| `@typespec/versioning` | `0.80.0` |
| `eslint` | `9.39.4` |

---

## 🔄 Breaking Changes

None in this release ✅

---

## 📋 Additional Notes

- Total commits: 5
- Files changed: ~4
- Contributors: Emmitt Johnson, dependabot[bot]

---

### 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)

---
