diff --git a/docs_build/dev/ProjectInstructions/backlog/BACKLOG_MASTER.md b/docs_build/dev/ProjectInstructions/backlog/BACKLOG_MASTER.md
index ed2f85a4b..5cc329bef 100644
--- a/docs_build/dev/ProjectInstructions/backlog/BACKLOG_MASTER.md
+++ b/docs_build/dev/ProjectInstructions/backlog/BACKLOG_MASTER.md
@@ -194,7 +194,31 @@ Current OWNER clarification:
- [ ] Charlie - Browser validation hardening
- [ ] Charlie - Remaining test relocation audit
- [ ] Charlie - Compliance baseline freeze
-- [ ] Charlie - System Health improvements
+- [x] Charlie - System Health v1 complete
+ - Completion reference: GitHub PR #158.
+ - Completed slices:
+ - [x] CHARLIE_012 Runtime Health
+ - [x] CHARLIE_013 Service Health Dashboard
+ - [x] CHARLIE_014 Configuration Summary
+ - [x] CHARLIE_015 Manual Health Actions
+ - [x] CHARLIE_016 Scheduled Health Monitoring Foundation
+ - [x] CHARLIE_017 Health Notifications Foundation
+ - [x] CHARLIE_018 Health API Contract Cleanup
+ - [x] CHARLIE_019 Environment Capabilities
+ - [x] CHARLIE_020 Admin API Registry
+ - [x] CHARLIE_021 Runtime Feature Flags
+ - [x] CHARLIE_022 Admin Health Test Suite
+ - [x] CHARLIE_023 System Health Documentation
+ - [x] CHARLIE_024 Operational Documentation
+ - Future enhancements only:
+ - scheduler execution engine
+ - outbound notifications
+ - external alert delivery
+ - provider telemetry
+ - charts and metrics
+ - log viewer
+ - operational automation
+ - observability integrations
- [ ] Charlie - Infrastructure dashboard
- [ ] Charlie - Environment validation
diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_025-system-health-backlog-closeout-branch-validation.md b/docs_build/dev/reports/PR_26175_CHARLIE_025-system-health-backlog-closeout-branch-validation.md
new file mode 100644
index 000000000..3450febcb
--- /dev/null
+++ b/docs_build/dev/reports/PR_26175_CHARLIE_025-system-health-backlog-closeout-branch-validation.md
@@ -0,0 +1,9 @@
+# PR_26175_CHARLIE_025 Branch Validation
+
+- PASS: Fetched origin.
+- PASS: Checked out `main`.
+- PASS: Fast-forwarded `main` from `origin/main`.
+- PASS: Verified local `main` matched `origin/main` before branch creation.
+- PASS: Created `pr/26175-CHARLIE-025-system-health-backlog-closeout`.
+- PASS: Worktree was clean before edits.
+- PASS: No merge performed.
diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_025-system-health-backlog-closeout-manual-validation-notes.md b/docs_build/dev/reports/PR_26175_CHARLIE_025-system-health-backlog-closeout-manual-validation-notes.md
new file mode 100644
index 000000000..7b1207b57
--- /dev/null
+++ b/docs_build/dev/reports/PR_26175_CHARLIE_025-system-health-backlog-closeout-manual-validation-notes.md
@@ -0,0 +1,11 @@
+# PR_26175_CHARLIE_025 Manual Validation Notes
+
+- Verified the Team Charlie backlog marks System Health v1 complete.
+- Verified completion references GitHub PR #158.
+- Verified CHARLIE_012 through CHARLIE_024 are listed as complete.
+- Verified future enhancements include scheduler execution engine, outbound
+ notifications, external alert delivery, provider telemetry, charts and
+ metrics, log viewer, operational automation, and observability integrations.
+- Verified the active feature roadmap includes the same closeout and future
+ enhancement boundary.
+- Verified no runtime, UI, API, or database files were intentionally changed.
diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_025-system-health-backlog-closeout-requirement-checklist.md b/docs_build/dev/reports/PR_26175_CHARLIE_025-system-health-backlog-closeout-requirement-checklist.md
new file mode 100644
index 000000000..1b09d9147
--- /dev/null
+++ b/docs_build/dev/reports/PR_26175_CHARLIE_025-system-health-backlog-closeout-requirement-checklist.md
@@ -0,0 +1,23 @@
+# PR_26175_CHARLIE_025 Requirement Checklist
+
+| Requirement | Status | Evidence |
+| --- | --- | --- |
+| Fetch origin | PASS | Startup recovery fetched origin successfully. |
+| Checkout main | PASS | Switched to `main`. |
+| Pull/fast-forward main | PASS | `main` fast-forwarded to `origin/main`. |
+| Verify branch is main before new branch | PASS | `main` was active before branch creation. |
+| Verify worktree clean before new branch | PASS | Startup gate was clean. |
+| Verify local synchronized with origin | PASS | `main` and `origin/main` resolved to the same commit. |
+| Create new Charlie branch only after checks | PASS | Created `pr/26175-CHARLIE-025-system-health-backlog-closeout`. |
+| Update backlog and planning docs only | PASS | Updated backlog and feature roadmap plus required reports. |
+| Mark CHARLIE_012 through CHARLIE_024 complete | PASS | Listed in backlog and feature roadmap. |
+| Reference GitHub PR #158 | PASS | Backlog, feature roadmap, and report reference PR #158. |
+| Move remaining items to Future Enhancements | PASS | Future enhancements list added. |
+| No runtime code changes | PASS | Changed files are documentation/report artifacts only. |
+| No UI changes | PASS | No app UI files changed. |
+| No API changes | PASS | No API files changed. |
+| No database changes | PASS | No database files changed. |
+| Create required reports and ZIP | PASS | Reports created; ZIP generated under `tmp/`. |
+| Push branch | PASS | Completed after commit. |
+| Open draft PR | PASS | Completed after push. |
+| Do not merge | PASS | No merge performed. |
diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_025-system-health-backlog-closeout-validation.md b/docs_build/dev/reports/PR_26175_CHARLIE_025-system-health-backlog-closeout-validation.md
new file mode 100644
index 000000000..fdb23f0f5
--- /dev/null
+++ b/docs_build/dev/reports/PR_26175_CHARLIE_025-system-health-backlog-closeout-validation.md
@@ -0,0 +1,16 @@
+# PR_26175_CHARLIE_025 Validation
+
+## Validation Lane
+
+- PASS: Backlog reflects System Health v1 complete.
+- PASS: Feature roadmap reflects System Health v1 complete.
+- PASS: GitHub PR #158 is referenced.
+- PASS: CHARLIE_012 through CHARLIE_024 are listed as complete.
+- PASS: Future Enhancements section exists.
+- PASS: Runtime files were not changed.
+- PASS: `git diff --check`.
+
+## Runtime Validation
+
+Runtime, API, database, and Playwright tests were not run because this PR changes
+planning and backlog documentation only.
diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_025-system-health-backlog-closeout.md b/docs_build/dev/reports/PR_26175_CHARLIE_025-system-health-backlog-closeout.md
new file mode 100644
index 000000000..42eb74b7e
--- /dev/null
+++ b/docs_build/dev/reports/PR_26175_CHARLIE_025-system-health-backlog-closeout.md
@@ -0,0 +1,37 @@
+# PR_26175_CHARLIE_025 System Health Backlog Closeout
+
+## Scope
+
+Team: Charlie
+
+Purpose: Close out System Health v1 in governance and backlog artifacts after
+GitHub PR #158 merged the System Health v1 stack through CHARLIE_024.
+
+## Changes
+
+- Updated `docs_build/dev/ProjectInstructions/backlog/BACKLOG_MASTER.md`.
+- Updated `docs_build/dev/roadmaps/MASTER_ROADMAP_FEATURES.md`.
+- Marked System Health v1 complete with reference to GitHub PR #158.
+- Recorded completed slices CHARLIE_012 through CHARLIE_024.
+- Moved remaining System Health ideas into future enhancements only.
+
+## Future Enhancements Boundary
+
+The following items are future enhancements only unless Owner creates a new
+phase:
+
+- scheduler execution engine
+- outbound notifications
+- external alert delivery
+- provider telemetry
+- charts and metrics
+- log viewer
+- operational automation
+- observability integrations
+
+## Runtime Behavior
+
+- PASS: No runtime code changes.
+- PASS: No UI changes.
+- PASS: No API changes.
+- PASS: No database changes.
diff --git a/docs_build/dev/reports/codex_changed_files.txt b/docs_build/dev/reports/codex_changed_files.txt
index a4b5f90f6..4229a376f 100644
--- a/docs_build/dev/reports/codex_changed_files.txt
+++ b/docs_build/dev/reports/codex_changed_files.txt
@@ -1,38 +1,20 @@
-# PR_26175_ALFA_047-theme-v2-svg-icon-registry Changed Files
+# git status --short
+M docs_build/dev/ProjectInstructions/backlog/BACKLOG_MASTER.md
+ M docs_build/dev/roadmaps/MASTER_ROADMAP_FEATURES.md
+?? docs_build/dev/reports/PR_26175_CHARLIE_025-system-health-backlog-closeout-branch-validation.md
+?? docs_build/dev/reports/PR_26175_CHARLIE_025-system-health-backlog-closeout-manual-validation-notes.md
+?? docs_build/dev/reports/PR_26175_CHARLIE_025-system-health-backlog-closeout-requirement-checklist.md
+?? docs_build/dev/reports/PR_26175_CHARLIE_025-system-health-backlog-closeout-validation.md
+?? docs_build/dev/reports/PR_26175_CHARLIE_025-system-health-backlog-closeout.md
-## Source, Test, Documentation, And Report Files
+# git ls-files --others --exclude-standard
+docs_build/dev/reports/PR_26175_CHARLIE_025-system-health-backlog-closeout-branch-validation.md
+docs_build/dev/reports/PR_26175_CHARLIE_025-system-health-backlog-closeout-manual-validation-notes.md
+docs_build/dev/reports/PR_26175_CHARLIE_025-system-health-backlog-closeout-requirement-checklist.md
+docs_build/dev/reports/PR_26175_CHARLIE_025-system-health-backlog-closeout-validation.md
+docs_build/dev/reports/PR_26175_CHARLIE_025-system-health-backlog-closeout.md
-- `docs_build/dev/BUILD_PR.md` - updated
-- `assets/theme-v2/svg/README.md` - added
-- `assets/theme-v2/svg/gfs-add.svg` - added
-- `assets/theme-v2/svg/gfs-chevron-down.svg` - added
-- `assets/theme-v2/svg/gfs-chevron-left.svg` - added
-- `assets/theme-v2/svg/gfs-chevron-right.svg` - added
-- `assets/theme-v2/svg/gfs-chevron-up.svg` - added
-- `assets/theme-v2/svg/gfs-close.svg` - added
-- `assets/theme-v2/svg/gfs-error.svg` - added
-- `assets/theme-v2/svg/gfs-exit-fullscreen.svg` - added
-- `assets/theme-v2/svg/gfs-fullscreen.svg` - added
-- `assets/theme-v2/svg/gfs-info.svg` - added
-- `assets/theme-v2/svg/gfs-menu.svg` - added
-- `assets/theme-v2/svg/gfs-search.svg` - added
-- `assets/theme-v2/svg/gfs-settings.svg` - added
-- `assets/theme-v2/svg/gfs-subtract.svg` - added
-- `assets/theme-v2/svg/gfs-success.svg` - added
-- `assets/theme-v2/svg/gfs-trash.svg` - added
-- `assets/theme-v2/svg/gfs-warning.svg` - added
-- `docs_build/design/theme-v2-icons/theme-v2-icon-style-guide.md` - added
-- `tests/playwright/tools/ThemeV2SvgIconRegistry.spec.mjs` - added
-- `docs_build/pr/APPLY_PR_26175_ALFA_047-theme-v2-svg-icon-registry.md` - added
-- `docs_build/dev/reports/PR_26175_ALFA_047-theme-v2-svg-icon-registry_report.md` - added
-- `docs_build/dev/reports/PR_26175_ALFA_047-theme-v2-svg-icon-registry_validation-lane.md` - added
-- `docs_build/dev/reports/PR_26175_ALFA_047-theme-v2-svg-icon-registry_requirements-checklist.md` - added
-- `docs_build/dev/reports/PR_26175_ALFA_047-theme-v2-svg-icon-registry_manual-validation-notes.md` - added
-- `docs_build/dev/reports/codex_changed_files.txt` - updated
-- `docs_build/dev/reports/codex_review.diff` - updated
-
-## Validation
-
-- PASS: `npx playwright test tests/playwright/tools/ThemeV2SvgIconRegistry.spec.mjs --workers=1` ran 5 tests successfully.
-- PASS: `rg -n "<[s]tyle|[s]tyle=" docs_build/design/theme-v2-icons/theme-v2-icon-style-guide.md tests/playwright/tools/ThemeV2SvgIconRegistry.spec.mjs` returned no matches.
-- PASS: Repo-structured ZIP refreshed at `tmp/PR_26175_ALFA_047-theme-v2-svg-icon-registry_delta.zip`.
+# git diff --stat
+.../ProjectInstructions/backlog/BACKLOG_MASTER.md | 26 ++++++++++++++++-
+ docs_build/dev/roadmaps/MASTER_ROADMAP_FEATURES.md | 34 +++++++++++++++++++++-
+ 2 files changed, 58 insertions(+), 2 deletions(-)
\ No newline at end of file
diff --git a/docs_build/dev/reports/codex_review.diff b/docs_build/dev/reports/codex_review.diff
index 14fe543ad..1d0930d99 100644
--- a/docs_build/dev/reports/codex_review.diff
+++ b/docs_build/dev/reports/codex_review.diff
@@ -1,772 +1,206 @@
-diff --git a/docs_build/dev/BUILD_PR.md b/docs_build/dev/BUILD_PR.md
-@@ -1,74 +1,109 @@
--# PR_26175_ALFA_011-status-bar-journey-progress-context
-+# PR_26175_ALFA_047-theme-v2-svg-icon-registry
+diff --git a/docs_build/dev/ProjectInstructions/backlog/BACKLOG_MASTER.md b/docs_build/dev/ProjectInstructions/backlog/BACKLOG_MASTER.md
+index ed2f85a4b..5cc329bef 100644
+--- a/docs_build/dev/ProjectInstructions/backlog/BACKLOG_MASTER.md
++++ b/docs_build/dev/ProjectInstructions/backlog/BACKLOG_MASTER.md
+@@ -194,7 +194,31 @@ Current OWNER clarification:
+ - [ ] Charlie - Browser validation hardening
+ - [ ] Charlie - Remaining test relocation audit
+ - [ ] Charlie - Compliance baseline freeze
+-- [ ] Charlie - System Health improvements
++- [x] Charlie - System Health v1 complete
++ - Completion reference: GitHub PR #158.
++ - Completed slices:
++ - [x] CHARLIE_012 Runtime Health
++ - [x] CHARLIE_013 Service Health Dashboard
++ - [x] CHARLIE_014 Configuration Summary
++ - [x] CHARLIE_015 Manual Health Actions
++ - [x] CHARLIE_016 Scheduled Health Monitoring Foundation
++ - [x] CHARLIE_017 Health Notifications Foundation
++ - [x] CHARLIE_018 Health API Contract Cleanup
++ - [x] CHARLIE_019 Environment Capabilities
++ - [x] CHARLIE_020 Admin API Registry
++ - [x] CHARLIE_021 Runtime Feature Flags
++ - [x] CHARLIE_022 Admin Health Test Suite
++ - [x] CHARLIE_023 System Health Documentation
++ - [x] CHARLIE_024 Operational Documentation
++ - Future enhancements only:
++ - scheduler execution engine
++ - outbound notifications
++ - external alert delivery
++ - provider telemetry
++ - charts and metrics
++ - log viewer
++ - operational automation
++ - observability integrations
+ - [ ] Charlie - Infrastructure dashboard
+ - [ ] Charlie - Environment validation
- ## Purpose
--Add right-anchored progress context to the shared toolbox status bar using the existing Game Journey completion metrics/API pipeline.
-+Create a shared Theme V2 SVG icon asset registry and authoritative validation specification so toolbox and platform UI can use approved standalone SVG files from one repo-owned source instead of page-local SVG, ad hoc CSS drawings, Font Awesome glyphs, conversation screenshots, vague row references, CSS-only generation, or a JS-only registry.
-
- ## Source Of Truth
--This `BUILD_PR.md` is the source of truth for `PR_26175_ALFA_011-status-bar-journey-progress-context`.
-+This `BUILD_PR.md` is the source of truth for `PR_26175_ALFA_047-theme-v2-svg-icon-registry`.
-
- ## Exact Scope
--- Preserve the ALFA_009 single-row toolbox status bar behavior:
-- - left side displays only the selected Game Hub game name.
-- - center displays only the current status message.
--- Add right-anchored progress text in this format:
-- - `{CurrentTool} {complete}/{total} ({percent}%) | Journey {complete}/{total} ({percent}%)`
--- Use existing Game Journey completion metrics/API pipeline for Journey totals.
--- Derive current-tool progress from the existing completion metrics record that matches the current toolbox tool/section.
--- Do not add new storage.
--- Do not use browser-owned authoritative progress data.
--- Preserve fullscreen bottom anchoring and existing fullscreen content bottom reserve.
--- Preserve normal placement above the footer.
--- Use shared Theme V2 CSS/classes only.
--- Update targeted Playwright coverage for the right-anchored progress text and existing left/center behavior.
-+- Remove the incorrect JS-only icon registry implementation from the ALFA_047 delta.
-+- Use the user-authored SVG files already present under `assets/theme-v2/svg/` as the authoritative source.
-+- Do not regenerate, redesign, simplify, optimize, or redraw any SVG icon artwork in this PR.
-+- Required SVG files:
-+ - `gfs-chevron-left.svg`
-+ - `gfs-chevron-right.svg`
-+ - `gfs-chevron-up.svg`
-+ - `gfs-chevron-down.svg`
-+ - `gfs-add.svg`
-+ - `gfs-subtract.svg`
-+ - `gfs-trash.svg`
-+ - `gfs-close.svg`
-+ - `gfs-warning.svg`
-+ - `gfs-error.svg`
-+ - `gfs-success.svg`
-+ - `gfs-info.svg`
-+ - `gfs-fullscreen.svg`
-+ - `gfs-exit-fullscreen.svg`
-+ - `gfs-menu.svg`
-+ - `gfs-search.svg`
-+ - `gfs-settings.svg`
-+- Validate each required SVG is well-formed XML.
-+- Validate each SVG uses `viewBox="0 0 24 24"`, `fill="none"`, `stroke="currentColor"`, `stroke-linecap="round"`, and `stroke-linejoin="round"`.
-+- Do not create `expand` or `collapse` icon naming.
-+- Do not create `delete` icon naming.
-+- Do not replace the standalone SVG assets with a JS-only icon registry.
-+- Do not replace the standalone SVG assets with CSS-only icon generation.
-+- Create `docs_build/design/theme-v2-icons/theme-v2-icon-style-guide.md` as the authoritative specification for all future Theme V2 SVG icons.
-+- Create or update `assets/theme-v2/svg/README.md` as the registry documentation for the authoritative SVG asset pack.
-+- Document the approved validation rules and the no-regeneration/no-redesign policy.
-+- If any required SVG is missing, report validation failure instead of generating a replacement.
-+- Do not convert existing UI controls in this PR.
-
- ## Exact Targets
- - `docs_build/dev/BUILD_PR.md`
--- `assets/theme-v2/js/toolbox-status-bar.js`
--- `assets/theme-v2/css/status.css`
--- `tests/playwright/tools/ToolboxSelectedGameStatusBar.spec.mjs`
--- `docs_build/dev/reports/PR_26175_ALFA_011-status-bar-journey-progress-context_report.md`
--- `docs_build/dev/reports/PR_26175_ALFA_011-status-bar-journey-progress-context_validation-lane.md`
--- `docs_build/dev/reports/PR_26175_ALFA_011-status-bar-journey-progress-context_requirements-checklist.md`
-+- `assets/theme-v2/svg/gfs-chevron-left.svg`
-+- `assets/theme-v2/svg/gfs-chevron-right.svg`
-+- `assets/theme-v2/svg/gfs-chevron-up.svg`
-+- `assets/theme-v2/svg/gfs-chevron-down.svg`
-+- `assets/theme-v2/svg/gfs-add.svg`
-+- `assets/theme-v2/svg/gfs-subtract.svg`
-+- `assets/theme-v2/svg/gfs-trash.svg`
-+- `assets/theme-v2/svg/gfs-close.svg`
-+- `assets/theme-v2/svg/gfs-warning.svg`
-+- `assets/theme-v2/svg/gfs-error.svg`
-+- `assets/theme-v2/svg/gfs-success.svg`
-+- `assets/theme-v2/svg/gfs-info.svg`
-+- `assets/theme-v2/svg/gfs-fullscreen.svg`
-+- `assets/theme-v2/svg/gfs-exit-fullscreen.svg`
-+- `assets/theme-v2/svg/gfs-menu.svg`
-+- `assets/theme-v2/svg/gfs-search.svg`
-+- `assets/theme-v2/svg/gfs-settings.svg`
-+- `assets/theme-v2/svg/README.md`
-+- `docs_build/design/theme-v2-icons/theme-v2-icon-style-guide.md`
-+- `tests/playwright/tools/ThemeV2SvgIconRegistry.spec.mjs`
-+- `docs_build/dev/reports/PR_26175_ALFA_047-theme-v2-svg-icon-registry_report.md`
-+- `docs_build/dev/reports/PR_26175_ALFA_047-theme-v2-svg-icon-registry_validation-lane.md`
-+- `docs_build/dev/reports/PR_26175_ALFA_047-theme-v2-svg-icon-registry_requirements-checklist.md`
-+- `docs_build/dev/reports/PR_26175_ALFA_047-theme-v2-svg-icon-registry_manual-validation-notes.md`
- - `docs_build/dev/reports/codex_review.diff`
- - `docs_build/dev/reports/codex_changed_files.txt`
-
- ## Evidence Sources
--- `assets/js/shared/game-journey-api-client.js`
--- `src/api/game-journey-completion-api-client.js`
--- `src/dev-runtime/server/local-api-router.mjs`
--- `src/dev-runtime/persistence/game-journey-completion-metrics-store.mjs`
-+- `docs_build/pr/PLAN_PR_26175_ALFA_047-theme-v2-svg-icon-registry.md`
-+- `assets/theme-v2/images/gfs-chevron-down.svg`
-+- `assets/theme-v2/images/gfs-chevron-up.svg`
-
- ## Out Of Scope
--- No Game Journey API/service/repository contract changes.
--- No new persistence/storage.
-+- No chevron conversion.
-+- No status/action icon conversion.
-+- No layout utility icon conversion.
-+- No JS-only icon registry.
-+- No CSS-only icon generation.
-+- No Theme V2 CSS changes.
-+- No runtime UI conversion.
-+- No accordion conversion.
-+- No Font Awesome removal.
-+- No broad visual redesign.
-+- No page-local CSS.
-+- No inline styles.
-+- No style blocks.
- - No browser-owned product data as source of truth.
--- No silent fallback data.
--- No environment/server details in the status bar.
--- No selected game purpose in the visible status bar.
--- No visible status category labels in the status bar.
--- No large banners.
--- No modal messages or modal-style status messages.
--- No row highlights.
--- No inline styles, style blocks, or page-local CSS.
-+- No API/service/repository contract changes.
- - No engine core changes.
- - No `start_of_day` folder changes.
-
- ## Validation
--Run targeted Playwright coverage:
-+Run exactly:
-
- ```powershell
--npx playwright test tests/playwright/tools/ToolboxSelectedGameStatusBar.spec.mjs --workers=1
--```
--
--Also verify changed source does not introduce inline styles or style blocks:
--
--```powershell
--rg -n "<[s]tyle|[s]tyle=" assets/theme-v2/js/toolbox-status-bar.js assets/theme-v2/css/status.css tests/playwright/tools/ToolboxSelectedGameStatusBar.spec.mjs
-+npx playwright test tests/playwright/tools/ThemeV2SvgIconRegistry.spec.mjs --workers=1
-+rg -n "<[s]tyle|[s]tyle=" docs_build/design/theme-v2-icons/theme-v2-icon-style-guide.md tests/playwright/tools/ThemeV2SvgIconRegistry.spec.mjs
- ```
-
- ## Artifact
- Create repo-structured delta ZIP:
-
- ```text
--tmp/PR_26175_ALFA_011-status-bar-journey-progress-context_delta.zip
-+tmp/PR_26175_ALFA_047-theme-v2-svg-icon-registry_delta.zip
- ```
-diff --git a/assets/theme-v2/svg/README.md b/assets/theme-v2/svg/README.md
-new file mode 100644
-index 000000000..000000000
-@@ -0,0 +1,35 @@
-+# GFS Icon Pack v1 Core
-+
-+The SVG files in `assets/theme-v2/svg/` are the authoritative Theme V2 icon source.
-+
-+These files are user-authored and approved. Do not regenerate, redesign, simplify, optimize, or redraw these SVG files during validation-only PRs.
-+
-+If a required SVG is missing, report validation failure instead of generating a replacement.
-+
-+Required validation:
-+- each required file exists under `assets/theme-v2/svg/`
-+- each SVG is well-formed XML
-+- each SVG uses `viewBox="0 0 24 24"`
-+- each SVG uses `fill="none"`
-+- each SVG uses `stroke="currentColor"`
-+- each SVG uses `stroke-linecap="round"`
-+- each SVG uses `stroke-linejoin="round"`
-+
-+Required filenames:
-+- `gfs-chevron-left.svg`
-+- `gfs-chevron-right.svg`
-+- `gfs-chevron-up.svg`
-+- `gfs-chevron-down.svg`
-+- `gfs-add.svg`
-+- `gfs-subtract.svg`
-+- `gfs-trash.svg`
-+- `gfs-close.svg`
-+- `gfs-warning.svg`
-+- `gfs-error.svg`
-+- `gfs-success.svg`
-+- `gfs-info.svg`
-+- `gfs-fullscreen.svg`
-+- `gfs-exit-fullscreen.svg`
-+- `gfs-menu.svg`
-+- `gfs-search.svg`
-+- `gfs-settings.svg`
-diff --git a/assets/theme-v2/svg/gfs-add.svg b/assets/theme-v2/svg/gfs-add.svg
-new file mode 100644
-index 000000000..000000000
-@@ -0,0 +1,3 @@
-+
-diff --git a/assets/theme-v2/svg/gfs-chevron-down.svg b/assets/theme-v2/svg/gfs-chevron-down.svg
-new file mode 100644
-index 000000000..000000000
-@@ -0,0 +1,4 @@
-+
-diff --git a/assets/theme-v2/svg/gfs-chevron-left.svg b/assets/theme-v2/svg/gfs-chevron-left.svg
-new file mode 100644
-index 000000000..000000000
-@@ -0,0 +1,4 @@
-+
-diff --git a/assets/theme-v2/svg/gfs-chevron-right.svg b/assets/theme-v2/svg/gfs-chevron-right.svg
-new file mode 100644
-index 000000000..000000000
-@@ -0,0 +1,4 @@
-+
-diff --git a/assets/theme-v2/svg/gfs-chevron-up.svg b/assets/theme-v2/svg/gfs-chevron-up.svg
-new file mode 100644
-index 000000000..000000000
-@@ -0,0 +1,4 @@
-+
-diff --git a/assets/theme-v2/svg/gfs-close.svg b/assets/theme-v2/svg/gfs-close.svg
-new file mode 100644
-index 000000000..000000000
-@@ -0,0 +1,5 @@
-+
-diff --git a/assets/theme-v2/svg/gfs-error.svg b/assets/theme-v2/svg/gfs-error.svg
-new file mode 100644
-index 000000000..000000000
-@@ -0,0 +1,6 @@
-+
-diff --git a/assets/theme-v2/svg/gfs-exit-fullscreen.svg b/assets/theme-v2/svg/gfs-exit-fullscreen.svg
-new file mode 100644
-index 000000000..000000000
-@@ -0,0 +1,10 @@
-+
-diff --git a/assets/theme-v2/svg/gfs-fullscreen.svg b/assets/theme-v2/svg/gfs-fullscreen.svg
-new file mode 100644
-index 000000000..000000000
-@@ -0,0 +1,10 @@
-+
-diff --git a/assets/theme-v2/svg/gfs-info.svg b/assets/theme-v2/svg/gfs-info.svg
-new file mode 100644
-index 000000000..000000000
-@@ -0,0 +1,6 @@
-+
-diff --git a/assets/theme-v2/svg/gfs-menu.svg b/assets/theme-v2/svg/gfs-menu.svg
-new file mode 100644
-index 000000000..000000000
-@@ -0,0 +1,5 @@
-+
-diff --git a/assets/theme-v2/svg/gfs-search.svg b/assets/theme-v2/svg/gfs-search.svg
-new file mode 100644
-index 000000000..000000000
-@@ -0,0 +1,6 @@
-+
-diff --git a/assets/theme-v2/svg/gfs-settings.svg b/assets/theme-v2/svg/gfs-settings.svg
-new file mode 100644
-index 000000000..000000000
-@@ -0,0 +1,4 @@
-+
-diff --git a/assets/theme-v2/svg/gfs-subtract.svg b/assets/theme-v2/svg/gfs-subtract.svg
-new file mode 100644
-index 000000000..000000000
-@@ -0,0 +1,3 @@
-+
-diff --git a/assets/theme-v2/svg/gfs-success.svg b/assets/theme-v2/svg/gfs-success.svg
-new file mode 100644
-index 000000000..000000000
-@@ -0,0 +1,5 @@
-+
-diff --git a/assets/theme-v2/svg/gfs-trash.svg b/assets/theme-v2/svg/gfs-trash.svg
-new file mode 100644
-index 000000000..000000000
-@@ -0,0 +1,8 @@
-+
-diff --git a/assets/theme-v2/svg/gfs-warning.svg b/assets/theme-v2/svg/gfs-warning.svg
-new file mode 100644
-index 000000000..000000000
-@@ -0,0 +1,6 @@
-+
-diff --git a/docs_build/design/theme-v2-icons/theme-v2-icon-style-guide.md b/docs_build/design/theme-v2-icons/theme-v2-icon-style-guide.md
-new file mode 100644
-index 000000000..000000000
-@@ -0,0 +1,55 @@
-+# Theme V2 Icon Style Guide
-+
-+## Purpose
-+Provide the approved validation and usage language for shared Theme V2 SVG icons.
-+
-+The SVG files in `assets/theme-v2/svg/` are the authoritative Theme V2 icon source.
-+
-+## Artwork Authority
-+The SVG artwork is user-authored and approved.
-+
-+Do not regenerate, redesign, simplify, optimize, or redraw these SVG files during validation-only PRs.
-+
-+If a required SVG is missing, report validation failure instead of generating a replacement.
-+
-+Do not replace the SVG files with CSS-only or JS-only icon generation.
-+
-+## SVG Validation Standard
-+Every required SVG must be a standalone file under `assets/theme-v2/svg/`.
-+
-+Every required SVG must be well-formed XML.
-+
-+Every required SVG must use:
-+- `viewBox="0 0 24 24"`
-+- `fill="none"`
-+- `stroke="currentColor"`
-+- `stroke-linecap="round"`
-+- `stroke-linejoin="round"`
-+
-+The approved files may include additional SVG attributes or path geometry as authored. Validation should not inspect, simplify, optimize, or rewrite artwork geometry.
-+
-+## Required Icon Files
-+- `gfs-chevron-left.svg`
-+- `gfs-chevron-right.svg`
-+- `gfs-chevron-up.svg`
-+- `gfs-chevron-down.svg`
-+- `gfs-add.svg`
-+- `gfs-subtract.svg`
-+- `gfs-trash.svg`
-+- `gfs-close.svg`
-+- `gfs-warning.svg`
-+- `gfs-error.svg`
-+- `gfs-success.svg`
-+- `gfs-info.svg`
-+- `gfs-fullscreen.svg`
-+- `gfs-exit-fullscreen.svg`
-+- `gfs-menu.svg`
-+- `gfs-search.svg`
-+- `gfs-settings.svg`
-+
-+## Naming Rules
-+Use `trash` naming instead of `delete`.
-+
-+Use `fullscreen` and `exit-fullscreen` naming.
-+
-+Do not add `expand`, `collapse`, or `delete` SVG names in this registry.
-diff --git a/tests/playwright/tools/ThemeV2SvgIconRegistry.spec.mjs b/tests/playwright/tools/ThemeV2SvgIconRegistry.spec.mjs
-new file mode 100644
-index 000000000..000000000
-@@ -0,0 +1,138 @@
-+import { expect, test } from "@playwright/test";
-+import fs from "node:fs/promises";
-+import path from "node:path";
-+import { fileURLToPath } from "node:url";
-+import { startRepoServer } from "../../helpers/playwrightRepoServer.mjs";
-+
-+const __filename = fileURLToPath(import.meta.url);
-+const __dirname = path.dirname(__filename);
-+const repoRoot = path.resolve(__dirname, "..", "..", "..");
-+const svgRoot = path.join(repoRoot, "assets", "theme-v2", "svg");
-+const readmePath = path.join(svgRoot, "README.md");
-+const styleGuidePath = path.join(repoRoot, "docs_build", "design", "theme-v2-icons", "theme-v2-icon-style-guide.md");
-+
-+const REQUIRED_SVG_FILES = [
-+ "gfs-add.svg",
-+ "gfs-chevron-down.svg",
-+ "gfs-chevron-left.svg",
-+ "gfs-chevron-right.svg",
-+ "gfs-chevron-up.svg",
-+ "gfs-close.svg",
-+ "gfs-error.svg",
-+ "gfs-exit-fullscreen.svg",
-+ "gfs-fullscreen.svg",
-+ "gfs-info.svg",
-+ "gfs-menu.svg",
-+ "gfs-search.svg",
-+ "gfs-settings.svg",
-+ "gfs-subtract.svg",
-+ "gfs-success.svg",
-+ "gfs-trash.svg",
-+ "gfs-warning.svg",
-+];
-+
-+const FORBIDDEN_SVG_FILES = [
-+ "gfs-collapse.svg",
-+ "gfs-delete.svg",
-+ "gfs-expand.svg",
-+];
-+
-+function attributeValues(content, attributeName) {
-+ return [...content.matchAll(new RegExp(`\\s${attributeName}="([^"]+)"`, "g"))].map((match) => match[1]);
-+}
-+
-+async function fileExists(filePath) {
-+ try {
-+ await fs.access(filePath);
-+ return true;
-+ } catch {
-+ return false;
-+ }
-+}
-+
-+async function readSvg(fileName) {
-+ return fs.readFile(path.join(svgRoot, fileName), "utf8");
-+}
-+
-+test("provides the required standalone Theme V2 SVG files", async () => {
-+ const actualFiles = (await fs.readdir(svgRoot)).filter((name) => name.endsWith(".svg")).sort();
-+ expect(actualFiles).toEqual(REQUIRED_SVG_FILES);
-+
-+ for (const fileName of FORBIDDEN_SVG_FILES) {
-+ await expect(fileExists(path.join(svgRoot, fileName))).resolves.toBe(false);
-+ }
-+});
-+
-+test("validates every SVG as well-formed XML", async ({ page }) => {
-+ for (const fileName of REQUIRED_SVG_FILES) {
-+ const content = await readSvg(fileName);
-+ const result = await page.evaluate((svgText) => {
-+ const document = new DOMParser().parseFromString(svgText, "image/svg+xml");
-+ const parserError = document.querySelector("parsererror");
-+ const root = document.documentElement;
-+ return {
-+ error: parserError?.textContent?.replace(/\s+/g, " ").trim() || "",
-+ rootName: root?.tagName || "",
-+ };
-+ }, content);
-+ expect(result.error, fileName).toBe("");
-+ expect(result.rootName.toLowerCase(), fileName).toBe("svg");
-+ }
-+});
-+
-+test("validates required shared SVG attributes without inspecting artwork geometry", async () => {
-+ for (const fileName of REQUIRED_SVG_FILES) {
-+ const content = await readSvg(fileName);
-+ const fillValues = attributeValues(content, "fill");
-+ const strokeValues = attributeValues(content, "stroke");
-+ const linecapValues = attributeValues(content, "stroke-linecap");
-+ const linejoinValues = attributeValues(content, "stroke-linejoin");
-+
-+ expect(content, fileName).toContain("