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
*[developer-docs/work-queues/playwright-e2e-smoke.md](developer-docs/work-queues/playwright-e2e-smoke.md) — active Playwright backlog
11
11
12
+
**Before commit or push** on dependency, CI, workflow, or e2e/example changes: complete [developer-docs/playbooks/change-authoring-verification.md](developer-docs/playbooks/change-authoring-verification.md) ([AD-10](developer-docs/decisions.md#ad-10-change-authoring-requires-ci-parity-verification-before-commit)). Dependency bumps: also [dependency-update-verification.md](developer-docs/playbooks/dependency-update-verification.md).
13
+
12
14
Human onboarding (commands, emulator): [LOCAL_DEVELOPMENT.md](LOCAL_DEVELOPMENT.md) owns that content; do not duplicate here.
Copy file name to clipboardExpand all lines: LOCAL_DEVELOPMENT.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,7 +6,7 @@ This guide walks you through running FirebaseUI Web locally so you can test feat
6
6
7
7
Make sure you have these installed:
8
8
9
-
-[Node.js](https://nodejs.org/) v18+ (CI uses v22 — matching this avoids surprises)
9
+
-[Node.js](https://nodejs.org/) v18+ locally; **CI uses v24** — use Node 24 for pre-push verification to match CI ([change-authoring-verification.md](developer-docs/playbooks/change-authoring-verification.md))
10
10
-[pnpm](https://pnpm.io/) — if you have Node.js 18+, [corepack](https://nodejs.org/api/corepack.html) can install pnpm on demand when you run it
Copy file name to clipboardExpand all lines: developer-docs/decisions.md
+40-1Lines changed: 40 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -3,7 +3,7 @@ type: Decision Log
3
3
title: Architecture decisions
4
4
description: Sequential decision log for firebaseui-web. Entries use AD-number identifiers.
5
5
tags: [adr, architecture]
6
-
timestamp: 2026-07-01T00:00:00Z
6
+
timestamp: 2026-07-03T00:00:00Z
7
7
---
8
8
9
9
Decisions follow the shape in [ADR format (mattpocock)](https://github.com/mattpocock/skills/blob/main/skills/engineering/domain-modeling/ADR-FORMAT.md) (read that spec only during documentation maintenance runs).
@@ -57,3 +57,42 @@ Browser smoke runs in its **own workflow**, not folded into the unit `test.yaml`
MVP validates **dev-server runtime only**. Validating built/deployed artifacts — Next.js SSG `output: "export"`, Angular production build, `next start` SSR, and `firebase.json` hosting rewrites — is a recognized gap: dev mode auto-connects the emulator via `import.meta.env.MODE` / `process.env.NODE_ENV` / `isDevMode()`, so production builds would need explicit emulator wiring. This is tracked as a **future design phase and is intentionally NOT in the MVP work queue** ([work-queues/playwright-e2e-smoke.md](work-queues/playwright-e2e-smoke.md)).
60
+
61
+
---
62
+
63
+
## AD-9: Firebase JS SDK version policy (v11 resolved, v12 for consumers)
64
+
65
+
The monorepo **resolves**`firebase`**11.x** in the pnpm catalog (`^11.10.0` today). That is **not a regression** from a stable v12 baseline: catalog `^12.2.1` existed only briefly during the Sep 2025 catalog migration and was reverted; main has used catalog **11.x since Sep 2025** ([commit a275905a](https://github.com/firebase/firebaseui-web/commit/a275905a7598cb9d9e1be2250befc840334e8ab2) — peer range widened to `^11 || ^12` while keeping catalog 11 for AngularFire).
66
+
67
+
**Why catalog 11:**`@angular/fire@20.0.1` depends on `firebase ^11.8.0` and `rxfire ^6.1.0` (rxfire peers firebase through **^11**). `@firebase-oss/ui-angular` imports both `@angular/fire/auth` and `firebase/auth` directly; forcing catalog **12** duplicates SDK types at compile time (e.g. `RecaptchaVerifier`, `TotpSecret`) — same class of failure as [angular/angularfire#3666](https://github.com/angular/angularfire/issues/3666).
68
+
69
+
**Consumer policy:** package **peer** catalog stays **`firebase: ^11 || ^12`** — apps embedding `@firebase-oss/ui-*` may install firebase 12; published packages must remain compatible with both majors where types overlap.
70
+
71
+
**Angular paths (explicit pin):**`packages/angular` and `examples/angular` keep a **non-catalog** devDependency pin (e.g. `"firebase": "^11.10.0"`) aligned with `@angular/fire`, not the workspace catalog entry.
72
+
73
+
**Optional internal split (prove v12 sooner):** bump catalog `firebase` to **12.x** for core/react/shadcn and non-angular examples (`"firebase": "catalog:"`); leave angular packages on explicit **11.x** pins so pnpm can install both majors. Validate with `pnpm build`, `pnpm test`, and `pnpm test:e2e` (especially `@firebase-oss/ui-angular` and the angular example). Do **not** use a workspace-wide `pnpm.overrides` forcing firebase 12 — that breaks AngularFire immediately.
74
+
75
+
**Upstream to track (harmonize on v12 later):**
76
+
77
+
| Track | Link |
78
+
|-------|------|
79
+
| Firebase 12 on AngularFire v20 |[angular/angularfire#3666](https://github.com/angular/angularfire/issues/3666)|
**Unlock:** when **AngularFire 21 stable** (and rxfire firebase 12) ships, bump `@angular/fire`, angular pins, and catalog together in one verified change.
85
+
86
+
Owner for catalog/peer fields: [pnpm-workspace.yaml](../pnpm-workspace.yaml). Verification steps: [playbooks/change-authoring-verification.md](playbooks/change-authoring-verification.md), [playbooks/dependency-update-verification.md](playbooks/dependency-update-verification.md).
87
+
88
+
---
89
+
90
+
## AD-10: Change authoring requires CI-parity verification before commit
91
+
92
+
Authors (human or agent) **must not commit or push** changes that touch dependencies, CI workflows, or example/test harnesses until [change-authoring-verification.md](playbooks/change-authoring-verification.md)**Required sequence** completes locally with exit code 0.
93
+
94
+
**Why:** CI runs `pnpm test:e2e` and builds `custom-auth-server` on demand; root `pnpm build` does not. Skipping e2e or custom-auth-server build allowed firebase-admin 14 and jsdom/`localStorage` test drift to land while local `pnpm test` + `pnpm build` passed on a different Node version.
95
+
96
+
**Includes:** run on the **same Node major as CI** ([LOCAL_DEVELOPMENT.md](../LOCAL_DEVELOPMENT.md)). Use the playbook one-shot script for dependency PRs.
97
+
98
+
**Does not replace** code review or CI; it is the minimum pre-commit bar for change classes above.
Copy file name to clipboardExpand all lines: developer-docs/index.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -25,6 +25,7 @@ OKF knowledge bundle for firebaseui-web: architecture, decisions, playbooks, and
25
25
26
26
# Playbooks
27
27
28
+
-[playbooks/change-authoring-verification.md](playbooks/change-authoring-verification.md) — **required before commit/push** on deps, CI, or e2e changes ([AD-10](decisions.md#ad-10-change-authoring-requires-ci-parity-verification-before-commit))
28
29
-[playbooks/dependency-update-verification.md](playbooks/dependency-update-verification.md) — verify monorepo after dependency bumps
Use the **same Node major as CI** (see [LOCAL_DEVELOPMENT.md](../../LOCAL_DEVELOPMENT.md)). Local Node 26+ can pass tests that fail on CI Node 24 (e.g. jsdom `localStorage` behavior).
22
+
23
+
# CI parity matrix
24
+
25
+
| CI job | Workflow | Local command | Notes |
26
+
|--------|----------|---------------|-------|
27
+
| Lint and Format Check |`lint.yaml`|`pnpm lint:check` && `pnpm format:check`||
28
+
| Test |`test.yaml`|`pnpm build` then `pnpm test`| CI starts Auth emulator; skipped integration tests do not need it |
0 commit comments