You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: .squad/decisions.md
+65-1Lines changed: 65 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,7 +2,71 @@
2
2
3
3
## Active Decisions
4
4
5
-
No decisions recorded yet.
5
+
### 1. GitHub Issues Created for Azure + Entra ID Plan (2026-03-13)
6
+
7
+
**Status:** DOCUMENTED
8
+
**Date:** 2026-03-13
9
+
**Author:** Zoe (Lead)
10
+
11
+
27 GitHub issues decompose the Azure deployment + Entra ID authentication plan into actionable work items across 5 phases. All issues linked with dependency references and assigned to team members.
12
+
13
+
**Key Decisions:**
14
+
-**Reframed Issue #39:** User-secrets workflow as team best practice (not security emergency) — no secrets accidentally committed; `appsettings.json` already in `.gitignore`
- Localhost testing of auth eliminates blocker for early validation
32
+
- DevAuthHandler alongside Entra ID maintains developer velocity
33
+
- User-secrets as team best practice enables secure local dev
34
+
35
+
**Next Steps:**
36
+
1. Captain: Register Entra ID app registrations (#42)
37
+
2. Zoe: Begin user-secrets setup (#39-40)
38
+
3. Kaylee: Begin CI workflow (#56)
39
+
4. All phases proceed in parallel where dependencies allow
40
+
41
+
---
42
+
43
+
### 2. Architecture Plan: Azure Deployment with Entra ID Authentication (2026-03-13)
44
+
45
+
**Status:** REFERENCE
46
+
**Date:** 2026-03-13
47
+
**Author:** Zoe (Lead)
48
+
49
+
Comprehensive architecture plan for transitioning SentenceStudio from local-dev-only to production-ready Azure deployment with real authentication. Covers 5 phases from secret management through hardening, with technical decisions, risk register, and cost estimates.
50
+
51
+
**Key Technical Decisions:**
52
+
1.**Aspire-Native Provisioning over Raw Bicep** — AppHost defines resources; `azd` generates Bicep
53
+
2.**Keep DevAuthHandler Alongside Entra ID** — Developer velocity: use DevAuthHandler for local dev, Entra ID for production
54
+
3.**PostgreSQL over Azure SQL** — Aligns with AppHost declaration and CoreSync support
55
+
4.**Single-Tenant First** — Start with single Entra ID tenant; multi-tenant support added later
56
+
5.**Token Caching:** SecureStorage (MAUI) and Redis (WebApp)
Established the .NET user-secrets pattern for secure local development across all server-side projects.
11
+
12
+
## What Changed
13
+
14
+
1.**Initialized user-secrets** for `SentenceStudio.Api` and `SentenceStudio.WebApp` via `dotnet user-secrets init`. Workers and AppHost already had UserSecretsId configured.
15
+
16
+
2.**Created `secrets.template.json`** at repo root documenting every secret key, organized by project context (AppHost/Aspire, Api standalone, WebApp standalone, MAUI apps).
17
+
18
+
3.**Updated `README.md`** section 3 ("API Keys and Secrets") with three clear paths:
19
+
- Option A: Aspire (recommended) -- set secrets once in AppHost, they flow to all services via `WithEnvironment()`
20
+
- Option B: Standalone projects -- set secrets per-project with `dotnet user-secrets`
21
+
- Option C: MAUI mobile/desktop -- use gitignored `appsettings.json` in AppLib
22
+
23
+
## How Secrets Flow
24
+
25
+
The AppHost uses Aspire Parameters (`builder.AddParameter("openaikey", secret: true)`) which resolve from the AppHost's user-secrets under `Parameters:openaikey`. These are then passed to child projects via `.WithEnvironment("AI__OpenAI__ApiKey", openaikey)`. Aspire normalizes `__` to `:` in configuration, so `AI__OpenAI__ApiKey` becomes `AI:OpenAI:ApiKey` at the receiving end.
The AppHost passes these to Api, WebApp, Workers, and MAUI projects via `WithEnvironment()` at runtime. You do not need to configure secrets in each individual project when using Aspire.
159
160
160
-
Copy the template configuration file and add your API keys:
161
+
#### Option B: Running individual projects without Aspire
161
162
163
+
If you run a project standalone (not through the AppHost), set its secrets directly:
# Edit src/SentenceStudio.AppLib/appsettings.json with your actual keys
181
186
```
182
187
183
-
**⚠️ Security Warning**: Never commit the `appsettings.json`file containing real API keys to version control. The file is included in `.gitignore` to prevent accidental exposure.
188
+
**Security note:** The `appsettings.json`files containing secrets are gitignored. Never commit real API keys to version control. Use `dotnet user-secrets` for all server-side projects.
0 commit comments