From 50b0bd9ef24fbb44fd5380f6f554f4d5d897fbec Mon Sep 17 00:00:00 2001
From: Charlie Team <97194984+ToolboxAid@users.noreply.github.com>
Date: Wed, 24 Jun 2026 17:25:30 -0400
Subject: [PATCH] Close out System Health v1 backlog
---
.../backlog/BACKLOG_MASTER.md | 26 +-
...alth-backlog-closeout-branch-validation.md | 9 +
...acklog-closeout-manual-validation-notes.md | 11 +
...-backlog-closeout-requirement-checklist.md | 23 +
...stem-health-backlog-closeout-validation.md | 16 +
...RLIE_025-system-health-backlog-closeout.md | 37 +
.../dev/reports/codex_changed_files.txt | 98 +-
docs_build/dev/reports/codex_review.diff | 3802 +----------------
.../dev/roadmaps/MASTER_ROADMAP_FEATURES.md | 34 +-
9 files changed, 345 insertions(+), 3711 deletions(-)
create mode 100644 docs_build/dev/reports/PR_26175_CHARLIE_025-system-health-backlog-closeout-branch-validation.md
create mode 100644 docs_build/dev/reports/PR_26175_CHARLIE_025-system-health-backlog-closeout-manual-validation-notes.md
create mode 100644 docs_build/dev/reports/PR_26175_CHARLIE_025-system-health-backlog-closeout-requirement-checklist.md
create mode 100644 docs_build/dev/reports/PR_26175_CHARLIE_025-system-health-backlog-closeout-validation.md
create mode 100644 docs_build/dev/reports/PR_26175_CHARLIE_025-system-health-backlog-closeout.md
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 274329a5e..4229a376f 100644
--- a/docs_build/dev/reports/codex_changed_files.txt
+++ b/docs_build/dev/reports/codex_changed_files.txt
@@ -1,78 +1,20 @@
-admin/system-health.html
-assets/theme-v2/js/admin-system-health.js
-docs_build/dev/reports/PR_26175_CHARLIE_012-017-system-health-phase-2-closeout.md
-docs_build/dev/reports/PR_26175_CHARLIE_012-runtime-health-branch-validation.md
-docs_build/dev/reports/PR_26175_CHARLIE_012-runtime-health-manual-validation-notes.md
-docs_build/dev/reports/PR_26175_CHARLIE_012-runtime-health-requirement-checklist.md
-docs_build/dev/reports/PR_26175_CHARLIE_012-runtime-health-validation.md
-docs_build/dev/reports/PR_26175_CHARLIE_012-runtime-health.md
-docs_build/dev/reports/PR_26175_CHARLIE_013-service-health-dashboard-branch-validation.md
-docs_build/dev/reports/PR_26175_CHARLIE_013-service-health-dashboard-manual-validation-notes.md
-docs_build/dev/reports/PR_26175_CHARLIE_013-service-health-dashboard-requirement-checklist.md
-docs_build/dev/reports/PR_26175_CHARLIE_013-service-health-dashboard-validation.md
-docs_build/dev/reports/PR_26175_CHARLIE_013-service-health-dashboard.md
-docs_build/dev/reports/PR_26175_CHARLIE_014-configuration-summary-branch-validation.md
-docs_build/dev/reports/PR_26175_CHARLIE_014-configuration-summary-manual-validation-notes.md
-docs_build/dev/reports/PR_26175_CHARLIE_014-configuration-summary-requirement-checklist.md
-docs_build/dev/reports/PR_26175_CHARLIE_014-configuration-summary-validation.md
-docs_build/dev/reports/PR_26175_CHARLIE_014-configuration-summary.md
-docs_build/dev/reports/PR_26175_CHARLIE_015-manual-health-actions-branch-validation.md
-docs_build/dev/reports/PR_26175_CHARLIE_015-manual-health-actions-manual-validation-notes.md
-docs_build/dev/reports/PR_26175_CHARLIE_015-manual-health-actions-requirement-checklist.md
-docs_build/dev/reports/PR_26175_CHARLIE_015-manual-health-actions-validation.md
-docs_build/dev/reports/PR_26175_CHARLIE_015-manual-health-actions.md
-docs_build/dev/reports/PR_26175_CHARLIE_016-scheduled-health-monitoring-branch-validation.md
-docs_build/dev/reports/PR_26175_CHARLIE_016-scheduled-health-monitoring-manual-validation-notes.md
-docs_build/dev/reports/PR_26175_CHARLIE_016-scheduled-health-monitoring-requirement-checklist.md
-docs_build/dev/reports/PR_26175_CHARLIE_016-scheduled-health-monitoring-validation.md
-docs_build/dev/reports/PR_26175_CHARLIE_016-scheduled-health-monitoring.md
-docs_build/dev/reports/PR_26175_CHARLIE_017-health-notifications-foundation-branch-validation.md
-docs_build/dev/reports/PR_26175_CHARLIE_017-health-notifications-foundation-manual-validation-notes.md
-docs_build/dev/reports/PR_26175_CHARLIE_017-health-notifications-foundation-requirement-checklist.md
-docs_build/dev/reports/PR_26175_CHARLIE_017-health-notifications-foundation-validation.md
-docs_build/dev/reports/PR_26175_CHARLIE_017-health-notifications-foundation.md
-docs_build/dev/reports/PR_26175_CHARLIE_018-health-api-contract-cleanup-branch-validation.md
-docs_build/dev/reports/PR_26175_CHARLIE_018-health-api-contract-cleanup-manual-validation-notes.md
-docs_build/dev/reports/PR_26175_CHARLIE_018-health-api-contract-cleanup-requirement-checklist.md
-docs_build/dev/reports/PR_26175_CHARLIE_018-health-api-contract-cleanup-validation.md
-docs_build/dev/reports/PR_26175_CHARLIE_018-health-api-contract-cleanup.md
-docs_build/dev/reports/PR_26175_CHARLIE_019-environment-capabilities-branch-validation.md
-docs_build/dev/reports/PR_26175_CHARLIE_019-environment-capabilities-manual-validation-notes.md
-docs_build/dev/reports/PR_26175_CHARLIE_019-environment-capabilities-requirement-checklist.md
-docs_build/dev/reports/PR_26175_CHARLIE_019-environment-capabilities-validation.md
-docs_build/dev/reports/PR_26175_CHARLIE_019-environment-capabilities.md
-docs_build/dev/reports/PR_26175_CHARLIE_020-admin-api-registry-branch-validation.md
-docs_build/dev/reports/PR_26175_CHARLIE_020-admin-api-registry-manual-validation-notes.md
-docs_build/dev/reports/PR_26175_CHARLIE_020-admin-api-registry-requirement-checklist.md
-docs_build/dev/reports/PR_26175_CHARLIE_020-admin-api-registry-validation.md
-docs_build/dev/reports/PR_26175_CHARLIE_020-admin-api-registry.md
-docs_build/dev/reports/PR_26175_CHARLIE_021-runtime-feature-flags-branch-validation.md
-docs_build/dev/reports/PR_26175_CHARLIE_021-runtime-feature-flags-manual-validation-notes.md
-docs_build/dev/reports/PR_26175_CHARLIE_021-runtime-feature-flags-requirement-checklist.md
-docs_build/dev/reports/PR_26175_CHARLIE_021-runtime-feature-flags-validation.md
-docs_build/dev/reports/PR_26175_CHARLIE_021-runtime-feature-flags.md
-docs_build/dev/reports/PR_26175_CHARLIE_022-admin-health-test-suite-branch-validation.md
-docs_build/dev/reports/PR_26175_CHARLIE_022-admin-health-test-suite-manual-validation-notes.md
-docs_build/dev/reports/PR_26175_CHARLIE_022-admin-health-test-suite-requirement-checklist.md
-docs_build/dev/reports/PR_26175_CHARLIE_022-admin-health-test-suite-validation.md
-docs_build/dev/reports/PR_26175_CHARLIE_022-admin-health-test-suite.md
-docs_build/dev/reports/PR_26175_CHARLIE_023-system-health-documentation-closeout-branch-validation.md
-docs_build/dev/reports/PR_26175_CHARLIE_023-system-health-documentation-closeout-manual-validation-notes.md
-docs_build/dev/reports/PR_26175_CHARLIE_023-system-health-documentation-closeout-requirement-checklist.md
-docs_build/dev/reports/PR_26175_CHARLIE_023-system-health-documentation-closeout-validation.md
-docs_build/dev/reports/PR_26175_CHARLIE_023-system-health-documentation-closeout.md
-docs_build/dev/reports/PR_26175_CHARLIE_024-system-health-operational-docs-branch-validation.md
-docs_build/dev/reports/PR_26175_CHARLIE_024-system-health-operational-docs-manual-validation-notes.md
-docs_build/dev/reports/PR_26175_CHARLIE_024-system-health-operational-docs-requirement-checklist.md
-docs_build/dev/reports/PR_26175_CHARLIE_024-system-health-operational-docs-validation.md
-docs_build/dev/reports/PR_26175_CHARLIE_024-system-health-operational-docs.md
-docs_build/dev/reports/codex_changed_files.txt
-docs_build/dev/reports/codex_review.diff
-docs_build/dev/reports/coverage_changed_js_guardrail.txt
-docs_build/dev/reports/playwright_v8_coverage_report.txt
-docs_build/operations/system-health-v1-operational-guide.md
-src/api/admin-system-health-api-client.js
-src/dev-runtime/server/local-api-router.mjs
-tests/api/admin-system-health/contract.test.mjs
-tests/dev-runtime/AdminHealthOperations.test.mjs
-tests/playwright/tools/AdminHealthOperationsPage.spec.mjs
+# 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
+
+# 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
+
+# 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 093b19950..1d0930d99 100644
--- a/docs_build/dev/reports/codex_review.diff
+++ b/docs_build/dev/reports/codex_review.diff
@@ -1,3666 +1,206 @@
-diff --git a/admin/system-health.html b/admin/system-health.html
-index 8573b3310..abe5c4f97 100644
---- a/admin/system-health.html
-+++ b/admin/system-health.html
-@@ -40,9 +40,19 @@
-
-
Environment Identity
-
Environment Map
-+
Environment Capabilities
-+
Health API Contract
-+
Admin API Registry
-+
Runtime Feature Flags
-+
Service Health
-+
Configuration Summary
-+
Manual Health Actions
-+
Scheduled Health Monitoring
-+
Notifications & Alerts
-
Local API Startup
-
Database Health
-
Storage Health
-+
Runtime Health
-
Health Check History
-
Runtime Environment
-
Limits & Capacity
-@@ -99,6 +109,156 @@
-
-
-
-+
-+
-+ Environment Capabilities
-+
-+
-+ | Capability |
-+ Current Deployment |
-+ Status |
-+
-+
-+
-+ | Environment Capabilities | Waiting for safe API status | PENDING |
-+
-+
-+
-+
-+
-+ Health API Contract
-+
-+
-+ | Field |
-+ Contract |
-+ Status |
-+
-+
-+
-+ | Health API Contract | Waiting for safe API status | PENDING |
-+
-+
-+
-+
-+
-+ Admin API Registry
-+
-+
-+ | Method |
-+ Route |
-+ Owner |
-+ Status |
-+
-+
-+
-+ | GET | Waiting for safe API status | Team Charlie | PENDING |
-+
-+
-+
-+
-+
-+ Runtime Feature Flags
-+
-+
-+ | Flag |
-+ Current Deployment |
-+ Status |
-+
-+
-+
-+ | Runtime Feature Flags | Waiting for safe API status | PENDING |
-+
-+
-+
-+
-+
-+
Current Deployment
-+
Service Health
-+
-+
-+
-+
-+
Loading
-+
PENDING
-+
Waiting for safe API status.
-+
-+
-+
-+
-+
-+
-+ Configuration Summary
-+
-+
-+ | Field |
-+ Read-only Value |
-+ Status |
-+
-+
-+
-+ | Configuration Summary | Waiting for safe API status | PENDING |
-+
-+
-+
-+
-+
-+
Current Deployment
-+
Manual Health Actions
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+ Manual Health Action Results
-+
-+
-+ | Action |
-+ Last Checked |
-+ Status |
-+ Result |
-+
-+
-+
-+ | Manual health actions | not run | PENDING | Waiting for Admin action. |
-+
-+
-+
-+
-+
-+
-+ Scheduled Health Monitoring
-+
-+
-+ | Field |
-+ Current Deployment |
-+ Status |
-+
-+
-+
-+ | Scheduled Health Monitoring | Not Configured | PENDING |
-+
-+
-+
-+
-+
-+ Notifications & Alerts
-+
-+
-+ | Integration |
-+ Current Deployment |
-+ Status |
-+
-+
-+
-+ | Notifications & Alerts | Not Configured | PENDING |
-+
-+
-+
-
-
- Local API Startup Diagnostics
-@@ -153,6 +313,27 @@
-
-
-
-+
-+
-+ Runtime Health
-+
-+
-+ | Field |
-+ Current Deployment |
-+ Status |
-+
-+
-+
-+ | Environment | Loading | PENDING |
-+ | App/runtime version | Loading | PENDING |
-+ | API version | Loading | PENDING |
-+ | Node version | Loading | PENDING |
-+ | Server start time | Loading | PENDING |
-+ | Uptime | Loading | PENDING |
-+ | Last checked | Loading | PENDING |
-+
-+
-+
-
-
- Health Check History
-diff --git a/assets/theme-v2/js/admin-system-health.js b/assets/theme-v2/js/admin-system-health.js
-index e0c2cab9f..656394104 100644
---- a/assets/theme-v2/js/admin-system-health.js
-+++ b/assets/theme-v2/js/admin-system-health.js
-@@ -1,5 +1,6 @@
- import {
- readAdminSystemHealthStatus,
-+ runAdminSystemHealthAction,
- runAdminSystemHealthStorageConnectivityAction,
- } from "../../../src/api/admin-system-health-api-client.js";
- import {
-@@ -15,11 +16,17 @@ const STORAGE_DIAGNOSTIC_ACTIONS = Object.freeze([
- Object.freeze({ actionId: "storage-read-test-object", key: "read" }),
- Object.freeze({ actionId: "storage-delete-test-object", key: "delete" }),
- ]);
-+const STORAGE_DIAGNOSTIC_ACTION_KEY_BY_ID = new Map(STORAGE_DIAGNOSTIC_ACTIONS.map((action) => [action.actionId, action.key]));
-
- function asText(value, fallback = "not available") {
- return statusText(value, fallback);
- }
-
-+function formatUptimeSeconds(value) {
-+ const seconds = Number(value);
-+ return Number.isFinite(seconds) ? `${Math.max(0, Math.floor(seconds))} s` : "not available";
-+}
-+
- class AdminSystemHealthController {
- constructor(root) {
- this.root = root;
-@@ -47,7 +54,25 @@ class AdminSystemHealthController {
- node.dataset.adminSystemHealthStorageStatus,
- node,
- ]));
-+ this.runtimeHealthValues = new Map(Array.from(root.querySelectorAll("[data-admin-system-health-runtime-health-value]")).map((node) => [
-+ node.dataset.adminSystemHealthRuntimeHealthValue,
-+ node,
-+ ]));
-+ this.runtimeHealthStatuses = new Map(Array.from(root.querySelectorAll("[data-admin-system-health-runtime-health-status]")).map((node) => [
-+ node.dataset.adminSystemHealthRuntimeHealthStatus,
-+ node,
-+ ]));
- this.historyRows = root.querySelector("[data-admin-system-health-history-rows]");
-+ this.apiContractRows = root.querySelector("[data-admin-system-health-api-contract-rows]");
-+ this.apiRegistryRows = root.querySelector("[data-admin-system-health-api-registry-rows]");
-+ this.capabilityRows = root.querySelector("[data-admin-system-health-capability-rows]");
-+ this.featureFlagRows = root.querySelector("[data-admin-system-health-feature-flag-rows]");
-+ this.actionRows = root.querySelector("[data-admin-system-health-action-rows]");
-+ this.actionButtons = Array.from(root.querySelectorAll("[data-admin-system-health-action]"));
-+ this.configurationRows = root.querySelector("[data-admin-system-health-configuration-rows]");
-+ this.scheduledRows = root.querySelector("[data-admin-system-health-scheduled-rows]");
-+ this.notificationRows = root.querySelector("[data-admin-system-health-notification-rows]");
-+ this.serviceCards = root.querySelector("[data-admin-system-health-service-cards]");
- this.startupRows = root.querySelector("[data-admin-system-health-startup-rows]");
- this.runtimeRows = root.querySelector("[data-admin-system-health-runtime-rows]");
- }
-@@ -56,6 +81,7 @@ class AdminSystemHealthController {
- if ((!this.environmentValues.size && !this.dbValues.size && !this.storageValues.size) || document.querySelector("[data-session-access-blocked='admin']") || window.GameFoundrySessionGuard?.blocked === true) {
- return;
- }
-+ this.bindManualActions();
- this.load();
- }
-
-@@ -95,6 +121,18 @@ class AdminSystemHealthController {
- this.setStatusNode(node, status, reason);
- }
-
-+ setRuntimeHealthValue(key, value, fallback) {
-+ const node = this.runtimeHealthValues.get(key);
-+ if (node) {
-+ node.textContent = asText(value, fallback);
-+ }
-+ }
-+
-+ setRuntimeHealthStatus(key, status, reason = "") {
-+ const node = this.runtimeHealthStatuses.get(key);
-+ this.setStatusNode(node, status, reason);
-+ }
-+
- setStatusNode(node, status, reason = "") {
- applyStatusNode(node, status, { reason });
- }
-@@ -108,9 +146,32 @@ class AdminSystemHealthController {
- });
- this.renderStartupPending(reason);
- this.renderStoragePending(reason);
-+ this.renderRuntimeHealthPending(reason);
-+ this.renderEnvironmentCapabilitiesPending(reason);
-+ this.renderApiContractPending(reason);
-+ this.renderAdminApiRegistryPending(reason);
-+ this.renderRuntimeFeatureFlagsPending(reason);
-+ this.renderServiceHealthPending(reason);
-+ this.renderConfigurationSummaryPending(reason);
-+ this.renderScheduledMonitoringPending(reason);
-+ this.renderNotificationsFoundationPending(reason);
- this.renderHistoryPending(reason);
- }
-
-+ bindManualActions() {
-+ this.actionButtons.forEach((button) => {
-+ button.addEventListener("click", () => {
-+ this.runManualHealthAction(button.dataset.adminSystemHealthAction);
-+ });
-+ });
-+ }
-+
-+ setManualActionsDisabled(disabled) {
-+ this.actionButtons.forEach((button) => {
-+ button.disabled = disabled;
-+ });
-+ }
-+
- renderEnvironmentIdentity(environmentIdentity = {}) {
- const reason = environmentIdentity.message || "Current deployment environment identity returned by the safe Admin System Health API.";
- this.setEnvironmentValue("name", environmentIdentity.name, "Unknown");
-@@ -162,6 +223,369 @@ class AdminSystemHealthController {
- this.setStorageStatus("lastChecked", storageStatus.lastChecked ? "PASS" : "WARN", reason);
- }
-
-+ renderRuntimeHealthPending(reason) {
-+ ["environment", "appVersion", "apiVersion", "nodeVersion", "serverStartTime", "uptime", "lastChecked"].forEach((key) => {
-+ this.setRuntimeHealthValue(key, "not available");
-+ this.setRuntimeHealthStatus(key, "PENDING", reason);
-+ });
-+ }
-+
-+ renderRuntimeHealth(runtimeHealth = {}) {
-+ const reason = runtimeHealth.message || "Current deployment runtime health returned by the safe Admin System Health API.";
-+ if (runtimeHealth?.secretsExposed === true || runtimeHealth?.secretEditingAllowed === true) {
-+ this.renderRuntimeHealthPending("Safe runtime health response was blocked because it exposed secret controls.");
-+ return;
-+ }
-+ this.setRuntimeHealthValue("environment", runtimeHealth.environmentName, "Unknown");
-+ this.setRuntimeHealthStatus("environment", runtimeHealth.environmentName ? runtimeHealth.status : "WARN", reason);
-+ this.setRuntimeHealthValue("appVersion", runtimeHealth.appVersion, "not available");
-+ this.setRuntimeHealthStatus("appVersion", runtimeHealth.appVersion ? "PASS" : "WARN", reason);
-+ this.setRuntimeHealthValue("apiVersion", runtimeHealth.apiVersion, "not available");
-+ this.setRuntimeHealthStatus("apiVersion", runtimeHealth.apiVersion ? "PASS" : "WARN", reason);
-+ this.setRuntimeHealthValue("nodeVersion", runtimeHealth.nodeVersion, "not available");
-+ this.setRuntimeHealthStatus("nodeVersion", runtimeHealth.nodeVersion ? "PASS" : "WARN", reason);
-+ this.setRuntimeHealthValue("serverStartTime", runtimeHealth.serverStartTime, "not available");
-+ this.setRuntimeHealthStatus("serverStartTime", runtimeHealth.serverStartTime ? "PASS" : "WARN", reason);
-+ this.setRuntimeHealthValue("uptime", formatUptimeSeconds(runtimeHealth.uptimeSeconds));
-+ this.setRuntimeHealthStatus("uptime", Number.isFinite(Number(runtimeHealth.uptimeSeconds)) ? "PASS" : "WARN", reason);
-+ this.setRuntimeHealthValue("lastChecked", runtimeHealth.lastChecked, "not available");
-+ this.setRuntimeHealthStatus("lastChecked", runtimeHealth.lastChecked ? "PASS" : "WARN", reason);
-+ }
-+
-+ renderApiContractPending(reason) {
-+ if (!this.apiContractRows) {
-+ return;
-+ }
-+ const row = document.createElement("tr");
-+ row.append(
-+ this.createCell("Health API Contract"),
-+ this.createCell("not available"),
-+ this.createStatusCell("PENDING", reason),
-+ );
-+ this.apiContractRows.replaceChildren(row);
-+ }
-+
-+ renderApiContract(apiContract = {}) {
-+ if (!this.apiContractRows) {
-+ return;
-+ }
-+ if (apiContract?.secretsExposed === true || apiContract?.secretEditingAllowed === true) {
-+ this.renderApiContractPending("Safe API contract response was blocked because it exposed secret controls.");
-+ return;
-+ }
-+ const rows = Array.isArray(apiContract.rows) ? apiContract.rows : [];
-+ if (!rows.length) {
-+ this.renderApiContractPending("Safe Admin System Health API returned no contract rows.");
-+ return;
-+ }
-+ const fragment = document.createDocumentFragment();
-+ rows.forEach((contractRow) => {
-+ const row = document.createElement("tr");
-+ row.append(
-+ this.createCell(contractRow.field),
-+ this.createCell(contractRow.value),
-+ this.createStatusCell(contractRow.status, apiContract.message),
-+ );
-+ fragment.append(row);
-+ });
-+ this.apiContractRows.replaceChildren(fragment);
-+ }
-+
-+ renderEnvironmentCapabilitiesPending(reason) {
-+ if (!this.capabilityRows) {
-+ return;
-+ }
-+ const row = document.createElement("tr");
-+ row.append(
-+ this.createCell("Environment Capabilities"),
-+ this.createCell("not available"),
-+ this.createStatusCell("PENDING", reason),
-+ );
-+ this.capabilityRows.replaceChildren(row);
-+ }
-+
-+ renderEnvironmentCapabilities(environmentCapabilities = {}) {
-+ if (!this.capabilityRows) {
-+ return;
-+ }
-+ if (environmentCapabilities?.secretsExposed === true || environmentCapabilities?.secretEditingAllowed === true) {
-+ this.renderEnvironmentCapabilitiesPending("Safe environment capabilities response was blocked because it exposed secret controls.");
-+ return;
-+ }
-+ const rows = Array.isArray(environmentCapabilities.rows) ? environmentCapabilities.rows : [];
-+ if (!rows.length) {
-+ this.renderEnvironmentCapabilitiesPending("Safe Admin System Health API returned no environment capability rows.");
-+ return;
-+ }
-+ const fragment = document.createDocumentFragment();
-+ rows.forEach((capabilityRow) => {
-+ const row = document.createElement("tr");
-+ row.append(
-+ this.createCell(capabilityRow.capability),
-+ this.createCell(capabilityRow.value),
-+ this.createStatusCell(capabilityRow.status, environmentCapabilities.message),
-+ );
-+ fragment.append(row);
-+ });
-+ this.capabilityRows.replaceChildren(fragment);
-+ }
-+
-+ renderAdminApiRegistryPending(reason) {
-+ if (!this.apiRegistryRows) {
-+ return;
-+ }
-+ const row = document.createElement("tr");
-+ row.append(
-+ this.createCell("GET"),
-+ this.createCell("not available"),
-+ this.createCell("Team Charlie"),
-+ this.createStatusCell("PENDING", reason),
-+ );
-+ this.apiRegistryRows.replaceChildren(row);
-+ }
-+
-+ renderAdminApiRegistry(adminApiRegistry = {}) {
-+ if (!this.apiRegistryRows) {
-+ return;
-+ }
-+ if (adminApiRegistry?.secretsExposed === true || adminApiRegistry?.secretEditingAllowed === true) {
-+ this.renderAdminApiRegistryPending("Safe Admin API registry response was blocked because it exposed secret controls.");
-+ return;
-+ }
-+ const rows = Array.isArray(adminApiRegistry.rows) ? adminApiRegistry.rows : [];
-+ if (!rows.length) {
-+ this.renderAdminApiRegistryPending("Safe Admin System Health API returned no Admin API registry rows.");
-+ return;
-+ }
-+ const fragment = document.createDocumentFragment();
-+ rows.forEach((registryRow) => {
-+ const row = document.createElement("tr");
-+ row.append(
-+ this.createCell(registryRow.method),
-+ this.createCell(`${registryRow.path} - ${registryRow.purpose}`),
-+ this.createCell(registryRow.owner),
-+ this.createStatusCell(registryRow.status, adminApiRegistry.message),
-+ );
-+ fragment.append(row);
-+ });
-+ this.apiRegistryRows.replaceChildren(fragment);
-+ }
-+
-+ renderRuntimeFeatureFlagsPending(reason) {
-+ if (!this.featureFlagRows) {
-+ return;
-+ }
-+ const row = document.createElement("tr");
-+ row.append(
-+ this.createCell("Runtime Feature Flags"),
-+ this.createCell("not available"),
-+ this.createStatusCell("PENDING", reason),
-+ );
-+ this.featureFlagRows.replaceChildren(row);
-+ }
-+
-+ renderRuntimeFeatureFlags(runtimeFeatureFlags = {}) {
-+ if (!this.featureFlagRows) {
-+ return;
-+ }
-+ if (runtimeFeatureFlags?.secretsExposed === true || runtimeFeatureFlags?.secretEditingAllowed === true) {
-+ this.renderRuntimeFeatureFlagsPending("Safe runtime feature flags response was blocked because it exposed secret controls.");
-+ return;
-+ }
-+ const rows = Array.isArray(runtimeFeatureFlags.rows) ? runtimeFeatureFlags.rows : [];
-+ if (!rows.length) {
-+ this.renderRuntimeFeatureFlagsPending("Safe Admin System Health API returned no runtime feature flag rows.");
-+ return;
-+ }
-+ const fragment = document.createDocumentFragment();
-+ rows.forEach((featureRow) => {
-+ const row = document.createElement("tr");
-+ row.append(
-+ this.createCell(featureRow.flag),
-+ this.createCell(featureRow.value),
-+ this.createStatusCell(featureRow.status, runtimeFeatureFlags.message),
-+ );
-+ fragment.append(row);
-+ });
-+ this.featureFlagRows.replaceChildren(fragment);
-+ }
-+
-+ renderServiceHealthPending(reason) {
-+ if (!this.serviceCards) {
-+ return;
-+ }
-+ const card = this.createServiceHealthCard({
-+ healthStatus: "PENDING",
-+ label: "Service Health",
-+ status: "Not Configured",
-+ summary: reason,
-+ });
-+ this.serviceCards.replaceChildren(card);
-+ }
-+
-+ createServiceHealthCard(service = {}) {
-+ const card = document.createElement("article");
-+ card.className = "card";
-+ card.dataset.adminSystemHealthServiceCard = service.id || "";
-+ const body = document.createElement("div");
-+ body.className = "card-body content-stack content-stack--compact";
-+ const title = document.createElement("h4");
-+ title.textContent = asText(service.label, "Service");
-+ const status = document.createElement("p");
-+ const healthStatus = normalizeStatusValue(service.healthStatus);
-+ status.dataset.healthStatus = healthStatus;
-+ status.textContent = asText(service.status, "Not Configured");
-+ if (healthStatus !== "PASS") {
-+ const reason = asText(service.summary, "Safe server diagnostics did not provide a reason.");
-+ status.setAttribute("title", `Reason: ${reason}`);
-+ status.setAttribute("aria-label", `${status.textContent}: ${reason}`);
-+ }
-+ const summary = document.createElement("p");
-+ summary.textContent = asText(service.summary, "Status unavailable.");
-+ const checkedAt = document.createElement("p");
-+ checkedAt.textContent = `Last checked: ${asText(service.lastChecked, "not available")}`;
-+ body.append(title, status, summary, checkedAt);
-+ card.append(body);
-+ return card;
-+ }
-+
-+ renderServiceHealth(serviceHealth = {}) {
-+ if (!this.serviceCards) {
-+ return;
-+ }
-+ if (serviceHealth?.secretsExposed === true || serviceHealth?.secretEditingAllowed === true) {
-+ this.renderServiceHealthPending("Safe service health response was blocked because it exposed secret controls.");
-+ return;
-+ }
-+ const services = Array.isArray(serviceHealth.services) ? serviceHealth.services : [];
-+ if (!services.length) {
-+ this.renderServiceHealthPending("Safe Admin System Health API returned no service health cards.");
-+ return;
-+ }
-+ const fragment = document.createDocumentFragment();
-+ services.forEach((service) => {
-+ fragment.append(this.createServiceHealthCard(service));
-+ });
-+ this.serviceCards.replaceChildren(fragment);
-+ }
-+
-+ renderConfigurationSummaryPending(reason) {
-+ if (!this.configurationRows) {
-+ return;
-+ }
-+ const row = document.createElement("tr");
-+ row.append(
-+ this.createCell("Configuration Summary"),
-+ this.createCell("not available"),
-+ this.createStatusCell("PENDING", reason),
-+ );
-+ this.configurationRows.replaceChildren(row);
-+ }
-+
-+ renderConfigurationSummary(configurationSummary = {}) {
-+ if (!this.configurationRows) {
-+ return;
-+ }
-+ if (configurationSummary?.secretsExposed === true || configurationSummary?.secretEditingAllowed === true) {
-+ this.renderConfigurationSummaryPending("Safe configuration summary response was blocked because it exposed secret controls.");
-+ return;
-+ }
-+ const rows = Array.isArray(configurationSummary.rows) ? configurationSummary.rows : [];
-+ if (!rows.length) {
-+ this.renderConfigurationSummaryPending("Safe Admin System Health API returned no configuration summary rows.");
-+ return;
-+ }
-+ const fragment = document.createDocumentFragment();
-+ rows.forEach((configurationRow) => {
-+ const row = document.createElement("tr");
-+ row.append(
-+ this.createCell(configurationRow.field),
-+ this.createCell(configurationRow.value),
-+ this.createStatusCell(configurationRow.status, configurationSummary.message),
-+ );
-+ fragment.append(row);
-+ });
-+ this.configurationRows.replaceChildren(fragment);
-+ }
-+
-+ renderScheduledMonitoringPending(reason) {
-+ if (!this.scheduledRows) {
-+ return;
-+ }
-+ const row = document.createElement("tr");
-+ row.append(
-+ this.createCell("Scheduled Health Monitoring"),
-+ this.createCell("Not Configured"),
-+ this.createStatusCell("PENDING", reason),
-+ );
-+ this.scheduledRows.replaceChildren(row);
-+ }
-+
-+ renderScheduledMonitoring(scheduledMonitoring = {}) {
-+ if (!this.scheduledRows) {
-+ return;
-+ }
-+ if (scheduledMonitoring?.secretsExposed === true || scheduledMonitoring?.secretEditingAllowed === true) {
-+ this.renderScheduledMonitoringPending("Safe scheduled monitoring response was blocked because it exposed secret controls.");
-+ return;
-+ }
-+ const rows = Array.isArray(scheduledMonitoring.rows) ? scheduledMonitoring.rows : [];
-+ if (!rows.length) {
-+ this.renderScheduledMonitoringPending("Safe Admin System Health API returned no scheduled monitoring rows.");
-+ return;
-+ }
-+ const fragment = document.createDocumentFragment();
-+ rows.forEach((scheduledRow) => {
-+ const row = document.createElement("tr");
-+ row.append(
-+ this.createCell(scheduledRow.field),
-+ this.createCell(scheduledRow.value),
-+ this.createStatusCell(scheduledRow.status, scheduledMonitoring.message),
-+ );
-+ fragment.append(row);
-+ });
-+ this.scheduledRows.replaceChildren(fragment);
-+ }
-+
-+ renderNotificationsFoundationPending(reason) {
-+ if (!this.notificationRows) {
-+ return;
-+ }
-+ const row = document.createElement("tr");
-+ row.append(
-+ this.createCell("Notifications & Alerts"),
-+ this.createCell("Not Configured"),
-+ this.createStatusCell("PENDING", reason),
-+ );
-+ this.notificationRows.replaceChildren(row);
-+ }
-+
-+ renderNotificationsFoundation(notificationsFoundation = {}) {
-+ if (!this.notificationRows) {
-+ return;
-+ }
-+ if (notificationsFoundation?.secretsExposed === true || notificationsFoundation?.secretEditingAllowed === true) {
-+ this.renderNotificationsFoundationPending("Safe notifications response was blocked because it exposed secret controls.");
-+ return;
-+ }
-+ const rows = Array.isArray(notificationsFoundation.rows) ? notificationsFoundation.rows : [];
-+ if (!rows.length) {
-+ this.renderNotificationsFoundationPending("Safe Admin System Health API returned no notifications rows.");
-+ return;
-+ }
-+ const fragment = document.createDocumentFragment();
-+ rows.forEach((notificationRow) => {
-+ const row = document.createElement("tr");
-+ row.append(
-+ this.createCell(notificationRow.field),
-+ this.createCell(notificationRow.value),
-+ this.createStatusCell(notificationRow.status, notificationsFoundation.message),
-+ );
-+ fragment.append(row);
-+ });
-+ this.notificationRows.replaceChildren(fragment);
-+ }
-+
- renderStartupPending(reason) {
- if (!this.startupRows) {
- return;
-@@ -290,6 +714,71 @@ class AdminSystemHealthController {
- return cell;
- }
-
-+ renderManualActionResult(result = {}) {
-+ if (!this.actionRows) {
-+ return;
-+ }
-+ const blocked = result?.secretsExposed === true || result?.secretEditingAllowed === true;
-+ const row = document.createElement("tr");
-+ row.append(
-+ this.createCell(result.label || "Manual health action"),
-+ this.createCell(result.checkedAt || result.lastChecked || "not available"),
-+ this.createStatusCell(blocked ? "PENDING" : result.status, blocked ? "Safe manual action response was blocked because it exposed secret controls." : result.message),
-+ this.createCell(blocked ? "Safe manual action response was blocked." : result.message),
-+ );
-+ this.actionRows.replaceChildren(row);
-+ }
-+
-+ applyManualActionResult(result = {}) {
-+ if (result.statusSnapshot) {
-+ this.renderStatusData(result.statusSnapshot);
-+ }
-+ if (result.runtimeHealth) {
-+ this.renderRuntimeHealth(result.runtimeHealth);
-+ }
-+ if (result.databaseStatus) {
-+ this.renderPostgresStatus(result.databaseStatus);
-+ }
-+ if (result.storageStatus) {
-+ this.renderStorageStatus(result.storageStatus);
-+ }
-+ const storageDiagnostics = Array.isArray(result.storageDiagnostics) ? result.storageDiagnostics : [];
-+ storageDiagnostics.forEach((storageResult) => {
-+ const key = STORAGE_DIAGNOSTIC_ACTION_KEY_BY_ID.get(storageResult.actionId);
-+ if (key) {
-+ this.renderStorageResult(key, storageResult);
-+ }
-+ });
-+ }
-+
-+ runManualHealthAction(actionId) {
-+ if (!actionId) {
-+ return;
-+ }
-+ this.setManualActionsDisabled(true);
-+ this.renderManualActionResult({
-+ checkedAt: new Date().toISOString(),
-+ label: "Manual health action",
-+ message: "Manual health action is running through the safe Admin System Health API.",
-+ status: "PENDING",
-+ });
-+ try {
-+ const result = runAdminSystemHealthAction(actionId);
-+ this.renderManualActionResult(result);
-+ this.applyManualActionResult(result);
-+ } catch (error) {
-+ const message = error instanceof Error ? error.message : "Safe Admin System Health action API is unavailable.";
-+ this.renderManualActionResult({
-+ checkedAt: new Date().toISOString(),
-+ label: "Manual health action",
-+ message,
-+ status: "FAIL",
-+ });
-+ } finally {
-+ this.setManualActionsDisabled(false);
-+ }
-+ }
-+
- renderRuntimePending(reason) {
- if (!this.runtimeRows) {
- return;
-@@ -331,20 +820,33 @@ class AdminSystemHealthController {
- this.runtimeRows.replaceChildren(fragment);
- }
-
-+ renderStatusData(data = {}) {
-+ if (data?.secretsExposed === true || data?.secretEditingAllowed === true) {
-+ this.renderPending("Safe Admin System Health API refused to render because the response exposed secret controls.");
-+ return;
-+ }
-+ this.renderEnvironmentIdentity(data?.environmentIdentity || {});
-+ this.renderPostgresStatus(data?.databaseStatus || {});
-+ this.renderStartupDiagnostics(data?.localApiStartup || {});
-+ this.renderStorageStatus(data?.storageStatus || {});
-+ this.runStorageDiagnostics();
-+ this.renderRuntimeHealth(data?.runtimeHealth || {});
-+ this.renderEnvironmentCapabilities(data?.environmentCapabilities || {});
-+ this.renderApiContract(data?.apiContract || {});
-+ this.renderAdminApiRegistry(data?.adminApiRegistry || {});
-+ this.renderRuntimeFeatureFlags(data?.runtimeFeatureFlags || {});
-+ this.renderServiceHealth(data?.serviceHealth || {});
-+ this.renderConfigurationSummary(data?.configurationSummary || {});
-+ this.renderScheduledMonitoring(data?.scheduledMonitoring || {});
-+ this.renderNotificationsFoundation(data?.notificationsFoundation || {});
-+ this.renderHealthCheckHistory(data?.healthCheckHistory || []);
-+ this.renderRuntimeEnvironment(data?.runtimeEnvironment || {});
-+ }
-+
- load() {
- try {
- const data = readAdminSystemHealthStatus();
-- if (data?.secretsExposed === true || data?.secretEditingAllowed === true) {
-- this.renderPending("Safe Admin System Health API refused to render because the response exposed secret controls.");
-- return;
-- }
-- this.renderEnvironmentIdentity(data?.environmentIdentity || {});
-- this.renderPostgresStatus(data?.databaseStatus || {});
-- this.renderStartupDiagnostics(data?.localApiStartup || {});
-- this.renderStorageStatus(data?.storageStatus || {});
-- this.runStorageDiagnostics();
-- this.renderHealthCheckHistory(data?.healthCheckHistory || []);
-- this.renderRuntimeEnvironment(data?.runtimeEnvironment || {});
-+ this.renderStatusData(data);
- } catch (error) {
- const message = error instanceof Error ? error.message : "Safe Admin System Health API is unavailable.";
- this.renderPending(message);
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_012-017-system-health-phase-2-closeout.md b/docs_build/dev/reports/PR_26175_CHARLIE_012-017-system-health-phase-2-closeout.md
-new file mode 100644
-index 000000000..769036e82
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_012-017-system-health-phase-2-closeout.md
-@@ -0,0 +1,43 @@
-+# PR_26175_CHARLIE_012-017 System Health Phase 2 Closeout
-+
-+## Scope
-+
-+Team: Charlie
-+
-+Workstream branch: `pr/26175-CHARLIE-010-system-health-history-and-closeout`
-+
-+## Completed Phase 2 Slices
-+
-+- PASS: PR_26175_CHARLIE_012-runtime-health
-+- PASS: PR_26175_CHARLIE_013-service-health-dashboard
-+- PASS: PR_26175_CHARLIE_014-configuration-summary
-+- PASS: PR_26175_CHARLIE_015-manual-health-actions
-+- PASS: PR_26175_CHARLIE_016-scheduled-health-monitoring
-+- PASS: PR_26175_CHARLIE_017-health-notifications-foundation
-+
-+## Architecture Closeout
-+
-+- PASS: System Health remains one page per deployed environment.
-+- PASS: Each deployment actively checks only itself.
-+- PASS: Environment Map remains reference-only.
-+- PASS: No cross-environment checks were added.
-+- PASS: Web UI calls API/service contracts.
-+- PASS: Browser does not own infrastructure health state.
-+- PASS: Not Configured placeholders do not fake success.
-+
-+## Validation Closeout
-+
-+- PASS: Targeted System Health API/unit tests passed for each slice.
-+- PASS: Targeted System Health Playwright tests passed for each slice.
-+- PASS: Syntax checks passed for touched JavaScript modules.
-+- PASS: `git diff --check` passed for each slice with CRLF warnings only.
-+- NOT RUN: Full samples smoke; not required for System Health Phase 2.
-+
-+## ZIP Artifacts
-+
-+- `tmp/PR_26175_CHARLIE_012-runtime-health_delta.zip`
-+- `tmp/PR_26175_CHARLIE_013-service-health-dashboard_delta.zip`
-+- `tmp/PR_26175_CHARLIE_014-configuration-summary_delta.zip`
-+- `tmp/PR_26175_CHARLIE_015-manual-health-actions_delta.zip`
-+- `tmp/PR_26175_CHARLIE_016-scheduled-health-monitoring_delta.zip`
-+- `tmp/PR_26175_CHARLIE_017-health-notifications-foundation_delta.zip`
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_012-runtime-health-branch-validation.md b/docs_build/dev/reports/PR_26175_CHARLIE_012-runtime-health-branch-validation.md
-new file mode 100644
-index 000000000..58442a3f7
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_012-runtime-health-branch-validation.md
-@@ -0,0 +1,14 @@
-+# PR_26175_CHARLIE_012 Branch Validation
-+
-+## Start Gate
-+
-+- PASS: Worktree was clean before Phase 2 implementation started.
-+- PASS: Current branch was `pr/26175-CHARLIE-010-system-health-history-and-closeout`.
-+- PASS: Branch history contained Charlie PRs 007 through 011.
-+
-+## Branch Rules
-+
-+- PASS: Continued on the existing Charlie workstream branch.
-+- PASS: No merge was performed.
-+- PASS: No rebase was performed.
-+- PASS: No new root branch was created.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_012-runtime-health-manual-validation-notes.md b/docs_build/dev/reports/PR_26175_CHARLIE_012-runtime-health-manual-validation-notes.md
-new file mode 100644
-index 000000000..7eb85fd46
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_012-runtime-health-manual-validation-notes.md
-@@ -0,0 +1,7 @@
-+# PR_26175_CHARLIE_012 Manual Validation Notes
-+
-+- Verified the Runtime Health table is present on `admin/system-health.html`.
-+- Verified Runtime Health values are rendered from `/api/admin/system-health/status`.
-+- Verified the page still blocks Creator sessions before System Health API calls.
-+- Verified Runtime Environment remains a masked variable table and was not repurposed as Runtime Health.
-+- Verified no cross-environment health checks were introduced.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_012-runtime-health-requirement-checklist.md b/docs_build/dev/reports/PR_26175_CHARLIE_012-runtime-health-requirement-checklist.md
-new file mode 100644
-index 000000000..5c744daaf
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_012-runtime-health-requirement-checklist.md
-@@ -0,0 +1,15 @@
-+# PR_26175_CHARLIE_012 Requirement Checklist
-+
-+- PASS: Added Runtime Health section.
-+- PASS: Shows current environment.
-+- PASS: Shows app/runtime version when available.
-+- PASS: Shows API version when available.
-+- PASS: Shows Node version from the server.
-+- PASS: Shows server start time from the server.
-+- PASS: Shows uptime from the server.
-+- PASS: Shows last checked from the server.
-+- PASS: Uses API/service contract data.
-+- PASS: Browser does not own runtime health state.
-+- PASS: Does not actively check other environments.
-+- PASS: Tests were updated.
-+- PASS: Required reports were generated.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_012-runtime-health-validation.md b/docs_build/dev/reports/PR_26175_CHARLIE_012-runtime-health-validation.md
-new file mode 100644
-index 000000000..4cce6df84
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_012-runtime-health-validation.md
-@@ -0,0 +1,18 @@
-+# PR_26175_CHARLIE_012 Validation Report
-+
-+## Commands
-+
-+- PASS: `node --check src/dev-runtime/server/local-api-router.mjs`
-+- PASS: `node --check assets/theme-v2/js/admin-system-health.js`
-+- PASS: `git diff --check`
-+ - Result: no whitespace errors; CRLF conversion warnings only.
-+- PASS: `node --test tests/dev-runtime/AdminHealthOperations.test.mjs`
-+ - Result: 4 passed.
-+- PASS: `npx playwright test tests/playwright/tools/AdminHealthOperationsPage.spec.mjs --workers=1 --reporter=line`
-+ - Result: 3 passed.
-+
-+## Validation Lane
-+
-+- Targeted System Health API/unit lane: PASS.
-+- Targeted System Health Playwright lane: PASS.
-+- Full samples smoke: not run; not required for this System Health-only slice.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_012-runtime-health.md b/docs_build/dev/reports/PR_26175_CHARLIE_012-runtime-health.md
-new file mode 100644
-index 000000000..c653f5faf
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_012-runtime-health.md
-@@ -0,0 +1,26 @@
-+# PR_26175_CHARLIE_012 Runtime Health
-+
-+## Scope
-+
-+Team: Charlie
-+
-+Purpose: Add current-deployment Runtime Health to Admin System Health Phase 2.
-+
-+## Changes
-+
-+- Added server-owned `runtimeHealth` to the Admin System Health status API.
-+- Added Runtime Health UI table for environment, app/runtime version, API version, Node version, server start time, uptime, and last checked.
-+- Kept Runtime Environment masking as a separate existing section.
-+- Updated API and Playwright System Health tests for the Runtime Health contract.
-+
-+## Architecture Notes
-+
-+- PASS: Current deployment only.
-+- PASS: Environment Map remains reference-only.
-+- PASS: Browser renders API-owned runtime health state.
-+- PASS: No cross-environment runtime checks were added.
-+- PASS: No secrets are exposed.
-+
-+## Artifact
-+
-+- `tmp/PR_26175_CHARLIE_012-runtime-health_delta.zip`
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_013-service-health-dashboard-branch-validation.md b/docs_build/dev/reports/PR_26175_CHARLIE_013-service-health-dashboard-branch-validation.md
-new file mode 100644
-index 000000000..4a6555ee3
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_013-service-health-dashboard-branch-validation.md
-@@ -0,0 +1,9 @@
-+# PR_26175_CHARLIE_013 Branch Validation
-+
-+## Branch Rules
-+
-+- PASS: Continued on `pr/26175-CHARLIE-010-system-health-history-and-closeout`.
-+- PASS: Stacked on PR_26175_CHARLIE_012.
-+- PASS: No merge was performed.
-+- PASS: No rebase was performed.
-+- PASS: No new root branch was created.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_013-service-health-dashboard-manual-validation-notes.md b/docs_build/dev/reports/PR_26175_CHARLIE_013-service-health-dashboard-manual-validation-notes.md
-new file mode 100644
-index 000000000..120527618
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_013-service-health-dashboard-manual-validation-notes.md
-@@ -0,0 +1,7 @@
-+# PR_26175_CHARLIE_013 Manual Validation Notes
-+
-+- Verified Service Health cards render on `admin/system-health.html`.
-+- Verified all seven requested service labels are present.
-+- Verified visible card statuses are limited to Healthy, Warning, Failed, and Not Configured.
-+- Verified Email and Background Jobs remain Not Configured placeholders.
-+- Verified no peer environment health checks were introduced.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_013-service-health-dashboard-requirement-checklist.md b/docs_build/dev/reports/PR_26175_CHARLIE_013-service-health-dashboard-requirement-checklist.md
-new file mode 100644
-index 000000000..ab51aae0b
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_013-service-health-dashboard-requirement-checklist.md
-@@ -0,0 +1,15 @@
-+# PR_26175_CHARLIE_013 Requirement Checklist
-+
-+- PASS: Added Service Health summary cards.
-+- PASS: Added Runtime card.
-+- PASS: Added API card.
-+- PASS: Added Database card.
-+- PASS: Added Storage card.
-+- PASS: Added Authentication placeholder/status.
-+- PASS: Added Email placeholder/status.
-+- PASS: Added Background Jobs placeholder/status.
-+- PASS: Used statuses Healthy, Warning, Failed, and Not Configured.
-+- PASS: Current environment only.
-+- PASS: Browser does not own service health state.
-+- PASS: Tests were updated.
-+- PASS: Required reports were generated.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_013-service-health-dashboard-validation.md b/docs_build/dev/reports/PR_26175_CHARLIE_013-service-health-dashboard-validation.md
-new file mode 100644
-index 000000000..b7d181b37
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_013-service-health-dashboard-validation.md
-@@ -0,0 +1,18 @@
-+# PR_26175_CHARLIE_013 Validation Report
-+
-+## Commands
-+
-+- PASS: `node --check src/dev-runtime/server/local-api-router.mjs`
-+- PASS: `node --check assets/theme-v2/js/admin-system-health.js`
-+- PASS: `git diff --check`
-+ - Result: no whitespace errors; CRLF conversion warnings only.
-+- PASS: `node --test tests/dev-runtime/AdminHealthOperations.test.mjs`
-+ - Result: 4 passed.
-+- PASS: `npx playwright test tests/playwright/tools/AdminHealthOperationsPage.spec.mjs --workers=1 --reporter=line`
-+ - Result: 3 passed.
-+
-+## Validation Lane
-+
-+- Targeted System Health API/unit lane: PASS.
-+- Targeted System Health Playwright lane: PASS.
-+- Full samples smoke: not run; not required for this System Health-only slice.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_013-service-health-dashboard.md b/docs_build/dev/reports/PR_26175_CHARLIE_013-service-health-dashboard.md
-new file mode 100644
-index 000000000..99d98533d
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_013-service-health-dashboard.md
-@@ -0,0 +1,26 @@
-+# PR_26175_CHARLIE_013 Service Health Dashboard
-+
-+## Scope
-+
-+Team: Charlie
-+
-+Purpose: Add current-environment Service Health summary cards to Admin System Health Phase 2.
-+
-+## Changes
-+
-+- Added server-owned `serviceHealth` payload to the Admin System Health status API.
-+- Added compact Service Health cards for Runtime, API, Database, Storage, Authentication, Email, and Background Jobs.
-+- Used the requested visible statuses: Healthy, Warning, Failed, and Not Configured.
-+- Kept Email and Background Jobs as production-safe Not Configured placeholders.
-+- Updated API and Playwright System Health tests.
-+
-+## Architecture Notes
-+
-+- PASS: Current deployment only.
-+- PASS: No cross-environment health checks were added.
-+- PASS: Browser renders API/service contract state only.
-+- PASS: Placeholder services do not fake successful health.
-+
-+## Artifact
-+
-+- `tmp/PR_26175_CHARLIE_013-service-health-dashboard_delta.zip`
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_014-configuration-summary-branch-validation.md b/docs_build/dev/reports/PR_26175_CHARLIE_014-configuration-summary-branch-validation.md
-new file mode 100644
-index 000000000..9bf1bf62d
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_014-configuration-summary-branch-validation.md
-@@ -0,0 +1,9 @@
-+# PR_26175_CHARLIE_014 Branch Validation
-+
-+## Branch Rules
-+
-+- PASS: Continued on `pr/26175-CHARLIE-010-system-health-history-and-closeout`.
-+- PASS: Stacked on PR_26175_CHARLIE_013.
-+- PASS: No merge was performed.
-+- PASS: No rebase was performed.
-+- PASS: No new root branch was created.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_014-configuration-summary-manual-validation-notes.md b/docs_build/dev/reports/PR_26175_CHARLIE_014-configuration-summary-manual-validation-notes.md
-new file mode 100644
-index 000000000..1a03e013b
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_014-configuration-summary-manual-validation-notes.md
-@@ -0,0 +1,7 @@
-+# PR_26175_CHARLIE_014 Manual Validation Notes
-+
-+- Verified Configuration Summary renders on `admin/system-health.html`.
-+- Verified the summary contains only read-only fields.
-+- Verified site/API URL credentials are not displayed.
-+- Verified no raw database or auth secrets are included.
-+- Verified no peer environment health checks were introduced.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_014-configuration-summary-requirement-checklist.md b/docs_build/dev/reports/PR_26175_CHARLIE_014-configuration-summary-requirement-checklist.md
-new file mode 100644
-index 000000000..e08c7873b
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_014-configuration-summary-requirement-checklist.md
-@@ -0,0 +1,15 @@
-+# PR_26175_CHARLIE_014 Requirement Checklist
-+
-+- PASS: Added read-only Configuration Summary.
-+- PASS: Shows current environment.
-+- PASS: Shows hosting model.
-+- PASS: Shows site URL.
-+- PASS: Shows API URL.
-+- PASS: Shows database provider/type.
-+- PASS: Shows storage provider/folder.
-+- PASS: Shows auth provider/status.
-+- PASS: Does not expose secrets.
-+- PASS: Masks sensitive URL values.
-+- PASS: Uses API/service contract data.
-+- PASS: Tests were updated.
-+- PASS: Required reports were generated.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_014-configuration-summary-validation.md b/docs_build/dev/reports/PR_26175_CHARLIE_014-configuration-summary-validation.md
-new file mode 100644
-index 000000000..12f7143cc
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_014-configuration-summary-validation.md
-@@ -0,0 +1,18 @@
-+# PR_26175_CHARLIE_014 Validation Report
-+
-+## Commands
-+
-+- PASS: `node --check src/dev-runtime/server/local-api-router.mjs`
-+- PASS: `node --check assets/theme-v2/js/admin-system-health.js`
-+- PASS: `git diff --check`
-+ - Result: no whitespace errors; CRLF conversion warnings only.
-+- PASS: `node --test tests/dev-runtime/AdminHealthOperations.test.mjs`
-+ - Result: 4 passed.
-+- PASS: `npx playwright test tests/playwright/tools/AdminHealthOperationsPage.spec.mjs --workers=1 --reporter=line`
-+ - Result: 3 passed.
-+
-+## Validation Lane
-+
-+- Targeted System Health API/unit lane: PASS.
-+- Targeted System Health Playwright lane: PASS.
-+- Full samples smoke: not run; not required for this System Health-only slice.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_014-configuration-summary.md b/docs_build/dev/reports/PR_26175_CHARLIE_014-configuration-summary.md
-new file mode 100644
-index 000000000..b576b4fff
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_014-configuration-summary.md
-@@ -0,0 +1,26 @@
-+# PR_26175_CHARLIE_014 Configuration Summary
-+
-+## Scope
-+
-+Team: Charlie
-+
-+Purpose: Add a read-only current-environment Configuration Summary to Admin System Health Phase 2.
-+
-+## Changes
-+
-+- Added server-owned `configurationSummary` to the Admin System Health status API.
-+- Added a Configuration Summary table with current environment, hosting model, site URL, API URL, database provider/type, storage provider/folder, and auth provider/status.
-+- Reused existing URL redaction so credentials are masked before the browser receives display values.
-+- Updated API and Playwright System Health tests.
-+
-+## Architecture Notes
-+
-+- PASS: Summary is read-only.
-+- PASS: No secrets are exposed.
-+- PASS: Current environment only.
-+- PASS: Browser renders API-owned configuration state only.
-+- PASS: No cross-environment checks were added.
-+
-+## Artifact
-+
-+- `tmp/PR_26175_CHARLIE_014-configuration-summary_delta.zip`
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_015-manual-health-actions-branch-validation.md b/docs_build/dev/reports/PR_26175_CHARLIE_015-manual-health-actions-branch-validation.md
-new file mode 100644
-index 000000000..32175f177
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_015-manual-health-actions-branch-validation.md
+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/roadmaps/MASTER_ROADMAP_FEATURES.md b/docs_build/dev/roadmaps/MASTER_ROADMAP_FEATURES.md
+index 71bfa6078..707b9242c 100644
+--- a/docs_build/dev/roadmaps/MASTER_ROADMAP_FEATURES.md
++++ b/docs_build/dev/roadmaps/MASTER_ROADMAP_FEATURES.md
+@@ -22,4 +22,36 @@ Track upcoming feature work at a high level without changing engine/tool contrac
+ ### Track C - Closeout
+ - [ ] validate all acceptance criteria
+ - [ ] finalize status updates
+-- [ ] archive supporting reports
+\ No newline at end of file
++- [ ] archive supporting reports
++
++## System Health v1 Closeout
++
++Status: complete through GitHub PR #158.
++
++### Completed Charlie 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
++
++These items are not authorized as new Team Charlie System Health feature PRs
++unless Owner creates a new phase.
+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_015 Branch Validation
-+
-+## Branch Rules
-+
-+- PASS: Continued on `pr/26175-CHARLIE-010-system-health-history-and-closeout`.
-+- PASS: Stacked on PR_26175_CHARLIE_014.
-+- PASS: No merge was performed.
-+- PASS: No rebase was performed.
-+- PASS: No new root branch was created.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_015-manual-health-actions-manual-validation-notes.md b/docs_build/dev/reports/PR_26175_CHARLIE_015-manual-health-actions-manual-validation-notes.md
-new file mode 100644
-index 000000000..019226334
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_015-manual-health-actions-manual-validation-notes.md
-@@ -0,0 +1,7 @@
-+# PR_26175_CHARLIE_015 Manual Validation Notes
-+
-+- Verified all five requested manual action controls are visible on `admin/system-health.html`.
-+- Verified Run Runtime Check posts to `/api/admin/system-health/action`.
-+- Verified manual action results are rendered in the action results table.
-+- Verified storage health action is server-side and current-environment scoped.
-+- Verified no peer environment health checks were introduced.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_015-manual-health-actions-requirement-checklist.md b/docs_build/dev/reports/PR_26175_CHARLIE_015-manual-health-actions-requirement-checklist.md
-new file mode 100644
-index 000000000..992ba2925
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_015-manual-health-actions-requirement-checklist.md
-@@ -0,0 +1,12 @@
-+# PR_26175_CHARLIE_015 Requirement Checklist
-+
-+- PASS: Added Refresh control.
-+- PASS: Added Run Runtime Check control.
-+- PASS: Added Run Database Check control.
-+- PASS: Added Run Storage Check control.
-+- PASS: Added Run Full Health Check control.
-+- PASS: Actions call API/service contracts.
-+- PASS: No browser-owned fake health success.
-+- PASS: Current environment only.
-+- PASS: Tests were updated.
-+- PASS: Required reports were generated.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_015-manual-health-actions-validation.md b/docs_build/dev/reports/PR_26175_CHARLIE_015-manual-health-actions-validation.md
-new file mode 100644
-index 000000000..7d7a5af14
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_015-manual-health-actions-validation.md
-@@ -0,0 +1,19 @@
-+# PR_26175_CHARLIE_015 Validation Report
-+
-+## Commands
-+
-+- PASS: `node --check src/dev-runtime/server/local-api-router.mjs`
-+- PASS: `node --check assets/theme-v2/js/admin-system-health.js`
-+- PASS: `node --check src/api/admin-system-health-api-client.js`
-+- PASS: `git diff --check`
-+ - Result: no whitespace errors; CRLF conversion warnings only.
-+- PASS: `node --test tests/dev-runtime/AdminHealthOperations.test.mjs`
-+ - Result: 4 passed.
-+- PASS: `npx playwright test tests/playwright/tools/AdminHealthOperationsPage.spec.mjs --workers=1 --reporter=line`
-+ - Result: 3 passed.
-+
-+## Validation Lane
-+
-+- Targeted System Health API/unit lane: PASS.
-+- Targeted System Health Playwright lane: PASS.
-+- Full samples smoke: not run; not required for this System Health-only slice.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_015-manual-health-actions.md b/docs_build/dev/reports/PR_26175_CHARLIE_015-manual-health-actions.md
-new file mode 100644
-index 000000000..467ed14a4
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_015-manual-health-actions.md
-@@ -0,0 +1,27 @@
-+# PR_26175_CHARLIE_015 Manual Health Actions
-+
-+## Scope
-+
-+Team: Charlie
-+
-+Purpose: Add manual current-environment health action controls to Admin System Health Phase 2.
-+
-+## Changes
-+
-+- Added `/api/admin/system-health/action` for Refresh, Run Runtime Check, Run Database Check, Run Storage Check, and Run Full Health Check.
-+- Added manual action buttons and an action result table to `admin/system-health.html`.
-+- Added client API support for manual health actions.
-+- Updated the controller so action results render only from server responses.
-+- Updated API and Playwright System Health tests.
-+
-+## Architecture Notes
-+
-+- PASS: Actions call API/service contracts.
-+- PASS: Browser does not fake successful health.
-+- PASS: Storage action runs bucket connectivity, list, upload, read, and delete through the current deployment API.
-+- PASS: Current environment only.
-+- PASS: No cross-environment checks were added.
-+
-+## Artifact
-+
-+- `tmp/PR_26175_CHARLIE_015-manual-health-actions_delta.zip`
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_016-scheduled-health-monitoring-branch-validation.md b/docs_build/dev/reports/PR_26175_CHARLIE_016-scheduled-health-monitoring-branch-validation.md
-new file mode 100644
-index 000000000..9ad64a553
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_016-scheduled-health-monitoring-branch-validation.md
-@@ -0,0 +1,9 @@
-+# PR_26175_CHARLIE_016 Branch Validation
-+
-+## Branch Rules
-+
-+- PASS: Continued on `pr/26175-CHARLIE-010-system-health-history-and-closeout`.
-+- PASS: Stacked on PR_26175_CHARLIE_015.
-+- PASS: No merge was performed.
-+- PASS: No rebase was performed.
-+- PASS: No new root branch was created.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_016-scheduled-health-monitoring-manual-validation-notes.md b/docs_build/dev/reports/PR_26175_CHARLIE_016-scheduled-health-monitoring-manual-validation-notes.md
-new file mode 100644
-index 000000000..010238f9a
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_016-scheduled-health-monitoring-manual-validation-notes.md
-@@ -0,0 +1,6 @@
-+# PR_26175_CHARLIE_016 Manual Validation Notes
-+
-+- Verified Scheduled Health Monitoring renders on `admin/system-health.html`.
-+- Verified Not Configured appears instead of fake scheduler success.
-+- Verified the table includes last run, next run, duration, recent result, and failures/warnings.
-+- Verified no scheduler side effects or cross-environment checks were introduced.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_016-scheduled-health-monitoring-requirement-checklist.md b/docs_build/dev/reports/PR_26175_CHARLIE_016-scheduled-health-monitoring-requirement-checklist.md
-new file mode 100644
-index 000000000..d099700d5
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_016-scheduled-health-monitoring-requirement-checklist.md
-@@ -0,0 +1,12 @@
-+# PR_26175_CHARLIE_016 Requirement Checklist
-+
-+- PASS: Added Scheduled Health Monitoring foundation.
-+- PASS: Shows last scheduled run.
-+- PASS: Shows next scheduled run if available.
-+- PASS: Shows duration.
-+- PASS: Shows recent result.
-+- PASS: Shows failures/warnings.
-+- PASS: Shows production-safe Not Configured state when scheduler is not implemented.
-+- PASS: Current environment only.
-+- PASS: Tests were updated.
-+- PASS: Required reports were generated.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_016-scheduled-health-monitoring-validation.md b/docs_build/dev/reports/PR_26175_CHARLIE_016-scheduled-health-monitoring-validation.md
-new file mode 100644
-index 000000000..2d660b368
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_016-scheduled-health-monitoring-validation.md
-@@ -0,0 +1,18 @@
-+# PR_26175_CHARLIE_016 Validation Report
-+
-+## Commands
-+
-+- PASS: `node --check src/dev-runtime/server/local-api-router.mjs`
-+- PASS: `node --check assets/theme-v2/js/admin-system-health.js`
-+- PASS: `git diff --check`
-+ - Result: no whitespace errors; CRLF conversion warnings only.
-+- PASS: `node --test tests/dev-runtime/AdminHealthOperations.test.mjs`
-+ - Result: 4 passed.
-+- PASS: `npx playwright test tests/playwright/tools/AdminHealthOperationsPage.spec.mjs --workers=1 --reporter=line`
-+ - Result: 3 passed.
-+
-+## Validation Lane
-+
-+- Targeted System Health API/unit lane: PASS.
-+- Targeted System Health Playwright lane: PASS.
-+- Full samples smoke: not run; not required for this System Health-only slice.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_016-scheduled-health-monitoring.md b/docs_build/dev/reports/PR_26175_CHARLIE_016-scheduled-health-monitoring.md
-new file mode 100644
-index 000000000..a07e997e2
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_016-scheduled-health-monitoring.md
-@@ -0,0 +1,26 @@
-+# PR_26175_CHARLIE_016 Scheduled Health Monitoring
-+
-+## Scope
-+
-+Team: Charlie
-+
-+Purpose: Add the Scheduled Health Monitoring foundation to Admin System Health Phase 2.
-+
-+## Changes
-+
-+- Added server-owned `scheduledMonitoring` to the Admin System Health status API.
-+- Added Scheduled Health Monitoring table for last scheduled run, next scheduled run, duration, recent result, and failures/warnings.
-+- Returned production-safe Not Configured values because no scheduler contract is implemented.
-+- Updated API and Playwright System Health tests.
-+
-+## Architecture Notes
-+
-+- PASS: Scheduler success is not faked.
-+- PASS: Not Configured state is explicit and safe.
-+- PASS: Current environment only.
-+- PASS: Browser renders API-owned state only.
-+- PASS: No cross-environment checks were added.
-+
-+## Artifact
-+
-+- `tmp/PR_26175_CHARLIE_016-scheduled-health-monitoring_delta.zip`
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_017-health-notifications-foundation-branch-validation.md b/docs_build/dev/reports/PR_26175_CHARLIE_017-health-notifications-foundation-branch-validation.md
-new file mode 100644
-index 000000000..23f700f3c
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_017-health-notifications-foundation-branch-validation.md
-@@ -0,0 +1,9 @@
-+# PR_26175_CHARLIE_017 Branch Validation
-+
-+## Branch Rules
-+
-+- PASS: Continued on `pr/26175-CHARLIE-010-system-health-history-and-closeout`.
-+- PASS: Stacked on PR_26175_CHARLIE_016.
-+- PASS: No merge was performed.
-+- PASS: No rebase was performed.
-+- PASS: No new root branch was created.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_017-health-notifications-foundation-manual-validation-notes.md b/docs_build/dev/reports/PR_26175_CHARLIE_017-health-notifications-foundation-manual-validation-notes.md
-new file mode 100644
-index 000000000..a3f0ef546
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_017-health-notifications-foundation-manual-validation-notes.md
-@@ -0,0 +1,6 @@
-+# PR_26175_CHARLIE_017 Manual Validation Notes
-+
-+- Verified Notifications & Alerts renders on `admin/system-health.html`.
-+- Verified Email alerts, Admin notifications, Webhook alerts, and Messages integration show Not Configured.
-+- Verified no send controls or delivery actions were added.
-+- Verified no peer environment health checks were introduced.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_017-health-notifications-foundation-requirement-checklist.md b/docs_build/dev/reports/PR_26175_CHARLIE_017-health-notifications-foundation-requirement-checklist.md
-new file mode 100644
-index 000000000..9455d7554
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_017-health-notifications-foundation-requirement-checklist.md
-@@ -0,0 +1,12 @@
-+# PR_26175_CHARLIE_017 Requirement Checklist
-+
-+- PASS: Added Email alerts status placeholder.
-+- PASS: Added Admin notification status placeholder.
-+- PASS: Added Webhook status placeholder.
-+- PASS: Added Messages integration placeholder because a messages service surface exists.
-+- PASS: Did not add actual sending behavior.
-+- PASS: Shows Not Configured safely.
-+- PASS: Added final Phase 2 closeout report.
-+- PASS: Current environment only.
-+- PASS: Tests were updated.
-+- PASS: Required reports were generated.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_017-health-notifications-foundation-validation.md b/docs_build/dev/reports/PR_26175_CHARLIE_017-health-notifications-foundation-validation.md
-new file mode 100644
-index 000000000..4d1bd2871
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_017-health-notifications-foundation-validation.md
-@@ -0,0 +1,18 @@
-+# PR_26175_CHARLIE_017 Validation Report
-+
-+## Commands
-+
-+- PASS: `node --check src/dev-runtime/server/local-api-router.mjs`
-+- PASS: `node --check assets/theme-v2/js/admin-system-health.js`
-+- PASS: `git diff --check`
-+ - Result: no whitespace errors; CRLF conversion warnings only.
-+- PASS: `node --test tests/dev-runtime/AdminHealthOperations.test.mjs`
-+ - Result: 4 passed.
-+- PASS: `npx playwright test tests/playwright/tools/AdminHealthOperationsPage.spec.mjs --workers=1 --reporter=line`
-+ - Result: 3 passed.
-+
-+## Validation Lane
-+
-+- Targeted System Health API/unit lane: PASS.
-+- Targeted System Health Playwright lane: PASS.
-+- Full samples smoke: not run; not required for this System Health-only slice.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_017-health-notifications-foundation.md b/docs_build/dev/reports/PR_26175_CHARLIE_017-health-notifications-foundation.md
-new file mode 100644
-index 000000000..128662d81
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_017-health-notifications-foundation.md
-@@ -0,0 +1,28 @@
-+# PR_26175_CHARLIE_017 Health Notifications Foundation
-+
-+## Scope
-+
-+Team: Charlie
-+
-+Purpose: Add Notifications & Alerts foundation placeholders to Admin System Health Phase 2.
-+
-+## Changes
-+
-+- Added server-owned `notificationsFoundation` to the Admin System Health status API.
-+- Added Notifications & Alerts table with Email alerts, Admin notifications, Webhook alerts, and Messages integration placeholders.
-+- Returned production-safe Not Configured values for every notification path.
-+- Added final Phase 2 closeout report.
-+- Updated API and Playwright System Health tests.
-+
-+## Architecture Notes
-+
-+- PASS: No email sending was added.
-+- PASS: No webhook sending was added.
-+- PASS: No admin notification delivery was added.
-+- PASS: Messages integration is placeholder-only.
-+- PASS: Current environment only.
-+- PASS: Browser renders API-owned state only.
-+
-+## Artifact
-+
-+- `tmp/PR_26175_CHARLIE_017-health-notifications-foundation_delta.zip`
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_018-health-api-contract-cleanup-branch-validation.md b/docs_build/dev/reports/PR_26175_CHARLIE_018-health-api-contract-cleanup-branch-validation.md
-new file mode 100644
-index 000000000..b10a284e8
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_018-health-api-contract-cleanup-branch-validation.md
-@@ -0,0 +1,6 @@
-+# PR_26175_CHARLIE_018 Branch Validation
-+
-+- PASS: Started from clean `pr/26175-CHARLIE-010-system-health-history-and-closeout`.
-+- PASS: Stacked on PR_26175_CHARLIE_017.
-+- PASS: No merge performed.
-+- PASS: No rebase performed.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_018-health-api-contract-cleanup-manual-validation-notes.md b/docs_build/dev/reports/PR_26175_CHARLIE_018-health-api-contract-cleanup-manual-validation-notes.md
-new file mode 100644
-index 000000000..a54b303eb
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_018-health-api-contract-cleanup-manual-validation-notes.md
-@@ -0,0 +1,6 @@
-+# PR_26175_CHARLIE_018 Manual Validation Notes
-+
-+- Verified Health API Contract table appears on System Health.
-+- Verified contract rows come from `/api/admin/system-health/status`.
-+- Verified Environment Map remains reference-only.
-+- Verified no response shape removals were made.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_018-health-api-contract-cleanup-requirement-checklist.md b/docs_build/dev/reports/PR_26175_CHARLIE_018-health-api-contract-cleanup-requirement-checklist.md
-new file mode 100644
-index 000000000..8ffb3f1c1
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_018-health-api-contract-cleanup-requirement-checklist.md
-@@ -0,0 +1,9 @@
-+# PR_26175_CHARLIE_018 Requirement Checklist
-+
-+- PASS: Cleaned up API contract visibility.
-+- PASS: Preserved current response fields.
-+- PASS: Added explicit current-deployment-only contract.
-+- PASS: Added explicit no-cross-environment-checks contract.
-+- PASS: Added endpoint list.
-+- PASS: Browser renders API-owned contract state.
-+- PASS: Required reports generated.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_018-health-api-contract-cleanup-validation.md b/docs_build/dev/reports/PR_26175_CHARLIE_018-health-api-contract-cleanup-validation.md
-new file mode 100644
-index 000000000..407a3065d
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_018-health-api-contract-cleanup-validation.md
-@@ -0,0 +1,12 @@
-+# PR_26175_CHARLIE_018 Validation Report
-+
-+## Commands
-+
-+- PASS: `node --check src/dev-runtime/server/local-api-router.mjs`
-+- PASS: `node --check assets/theme-v2/js/admin-system-health.js`
-+- PASS: `git diff --check`
-+ - Result: no whitespace errors; CRLF conversion warnings only.
-+- PASS: `node --test tests/dev-runtime/AdminHealthOperations.test.mjs`
-+ - Result: 4 passed.
-+- PASS: `npx playwright test tests/playwright/tools/AdminHealthOperationsPage.spec.mjs --workers=1 --reporter=line`
-+ - Result: 3 passed.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_018-health-api-contract-cleanup.md b/docs_build/dev/reports/PR_26175_CHARLIE_018-health-api-contract-cleanup.md
-new file mode 100644
-index 000000000..e513dee45
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_018-health-api-contract-cleanup.md
-@@ -0,0 +1,25 @@
-+# PR_26175_CHARLIE_018 Health API Contract Cleanup
-+
-+## Scope
-+
-+Team: Charlie
-+
-+Purpose: Add explicit Admin System Health API contract metadata and UI visibility.
-+
-+## Changes
-+
-+- Added server-owned `apiContract` to `/api/admin/system-health/status`.
-+- Added contract version, data boundary, current-deployment-only rule, reference-only Environment Map rule, secret handling rule, and endpoint registry.
-+- Added Health API Contract table to `admin/system-health.html`.
-+- Updated API and Playwright tests.
-+
-+## Validation
-+
-+- PASS: Targeted System Health API/unit tests.
-+- PASS: Targeted System Health Playwright tests.
-+- PASS: Syntax checks.
-+- PASS: `git diff --check`.
-+
-+## Artifact
-+
-+- `tmp/PR_26175_CHARLIE_018-health-api-contract-cleanup_delta.zip`
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_019-environment-capabilities-branch-validation.md b/docs_build/dev/reports/PR_26175_CHARLIE_019-environment-capabilities-branch-validation.md
-new file mode 100644
-index 000000000..519a012e3
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_019-environment-capabilities-branch-validation.md
-@@ -0,0 +1,6 @@
-+# PR_26175_CHARLIE_019 Branch Validation
-+
-+- PASS: Continued on `pr/26175-CHARLIE-010-system-health-history-and-closeout`.
-+- PASS: Stacked on PR_26175_CHARLIE_018.
++# 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.
-+- PASS: No rebase performed.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_019-environment-capabilities-manual-validation-notes.md b/docs_build/dev/reports/PR_26175_CHARLIE_019-environment-capabilities-manual-validation-notes.md
-new file mode 100644
-index 000000000..7e0d1b58a
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_019-environment-capabilities-manual-validation-notes.md
-@@ -0,0 +1,5 @@
-+# PR_26175_CHARLIE_019 Manual Validation Notes
-+
-+- Verified Environment Capabilities table renders after Environment Map.
-+- Verified the table reflects the current deployment only.
-+- Verified no `/uat`, `/prd`, or peer environment checks appear in current capability rows.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_019-environment-capabilities-requirement-checklist.md b/docs_build/dev/reports/PR_26175_CHARLIE_019-environment-capabilities-requirement-checklist.md
-new file mode 100644
-index 000000000..0109a4580
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_019-environment-capabilities-requirement-checklist.md
-@@ -0,0 +1,7 @@
-+# PR_26175_CHARLIE_019 Requirement Checklist
-+
-+- PASS: Added current environment capabilities.
-+- PASS: Did not add peer environment checks.
-+- PASS: Browser renders API-owned capability state.
-+- PASS: Not Configured placeholders do not fake success.
-+- PASS: Required reports generated.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_019-environment-capabilities-validation.md b/docs_build/dev/reports/PR_26175_CHARLIE_019-environment-capabilities-validation.md
+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..5d523af39
+index 000000000..7b1207b57
--- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_019-environment-capabilities-validation.md
-@@ -0,0 +1,12 @@
-+# PR_26175_CHARLIE_019 Validation Report
++++ 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
+
-+## Commands
-+
-+- PASS: `node --check src/dev-runtime/server/local-api-router.mjs`
-+- PASS: `node --check assets/theme-v2/js/admin-system-health.js`
-+- PASS: `git diff --check`
-+ - Result: no whitespace errors; CRLF conversion warnings only.
-+- PASS: `node --test tests/dev-runtime/AdminHealthOperations.test.mjs`
-+ - Result: 4 passed.
-+- PASS: `npx playwright test tests/playwright/tools/AdminHealthOperationsPage.spec.mjs --workers=1 --reporter=line`
-+ - Result: 3 passed.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_019-environment-capabilities.md b/docs_build/dev/reports/PR_26175_CHARLIE_019-environment-capabilities.md
++- 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..a5a68d926
+index 000000000..1b09d9147
--- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_019-environment-capabilities.md
-@@ -0,0 +1,25 @@
-+# PR_26175_CHARLIE_019 Environment Capabilities
-+
-+## Scope
-+
-+Team: Charlie
-+
-+Purpose: Add current-environment capability summary to Admin System Health.
-+
-+## Changes
-+
-+- Added server-owned `environmentCapabilities` to the System Health status API.
-+- Added Environment Capabilities table to the System Health page.
-+- Covered Hosting, API, Database, Storage, Authentication, Scheduled Monitoring, and Notifications.
-+- Updated API and Playwright tests.
-+
-+## Validation
-+
-+- PASS: Targeted System Health API/unit tests.
-+- PASS: Targeted System Health Playwright tests.
-+- PASS: Syntax checks.
-+- PASS: `git diff --check`.
-+
-+## Artifact
-+
-+- `tmp/PR_26175_CHARLIE_019-environment-capabilities_delta.zip`
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_020-admin-api-registry-branch-validation.md b/docs_build/dev/reports/PR_26175_CHARLIE_020-admin-api-registry-branch-validation.md
-new file mode 100644
-index 000000000..d79bac325
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_020-admin-api-registry-branch-validation.md
-@@ -0,0 +1,6 @@
-+# PR_26175_CHARLIE_020 Branch Validation
-+
-+- PASS: Continued on `pr/26175-CHARLIE-010-system-health-history-and-closeout`.
-+- PASS: Stacked on PR_26175_CHARLIE_019.
-+- PASS: No merge performed.
-+- PASS: No rebase performed.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_020-admin-api-registry-manual-validation-notes.md b/docs_build/dev/reports/PR_26175_CHARLIE_020-admin-api-registry-manual-validation-notes.md
-new file mode 100644
-index 000000000..5c9360e50
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_020-admin-api-registry-manual-validation-notes.md
-@@ -0,0 +1,5 @@
-+# PR_26175_CHARLIE_020 Manual Validation Notes
-+
-+- Verified Admin API Registry table renders on System Health.
-+- Verified System Health, Infrastructure, Operations, and Admin navigation routes are listed.
-+- Verified no additional route probes were introduced.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_020-admin-api-registry-requirement-checklist.md b/docs_build/dev/reports/PR_26175_CHARLIE_020-admin-api-registry-requirement-checklist.md
-new file mode 100644
-index 000000000..2aef80253
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_020-admin-api-registry-requirement-checklist.md
-@@ -0,0 +1,7 @@
-+# PR_26175_CHARLIE_020 Requirement Checklist
-+
-+- PASS: Added Admin API Registry.
-+- PASS: Registry is read-only.
-+- PASS: Registry is server-owned.
-+- PASS: Browser renders API-owned registry state.
-+- PASS: Required reports generated.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_020-admin-api-registry-validation.md b/docs_build/dev/reports/PR_26175_CHARLIE_020-admin-api-registry-validation.md
-new file mode 100644
-index 000000000..6f789bfb3
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_020-admin-api-registry-validation.md
-@@ -0,0 +1,12 @@
-+# PR_26175_CHARLIE_020 Validation Report
-+
-+## Commands
-+
-+- PASS: `node --check src/dev-runtime/server/local-api-router.mjs`
-+- PASS: `node --check assets/theme-v2/js/admin-system-health.js`
-+- PASS: `git diff --check`
-+ - Result: no whitespace errors; CRLF conversion warnings only.
-+- PASS: `node --test tests/dev-runtime/AdminHealthOperations.test.mjs`
-+ - Result: 4 passed.
-+- PASS: `npx playwright test tests/playwright/tools/AdminHealthOperationsPage.spec.mjs --workers=1 --reporter=line`
-+ - Result: 3 passed.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_020-admin-api-registry.md b/docs_build/dev/reports/PR_26175_CHARLIE_020-admin-api-registry.md
-new file mode 100644
-index 000000000..a573c14f4
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_020-admin-api-registry.md
-@@ -0,0 +1,25 @@
-+# PR_26175_CHARLIE_020 Admin API Registry
-+
-+## Scope
-+
-+Team: Charlie
-+
-+Purpose: Add a read-only Admin API Registry to System Health.
-+
-+## Changes
-+
-+- Added server-owned `adminApiRegistry` to the System Health status API.
-+- Added Admin API Registry table to `admin/system-health.html`.
-+- Listed System Health, Infrastructure, Operations, and Admin navigation routes used by the admin health surface.
-+- Updated API and Playwright tests.
-+
-+## Validation
-+
-+- PASS: Targeted System Health API/unit tests.
-+- PASS: Targeted System Health Playwright tests.
-+- PASS: Syntax checks.
-+- PASS: `git diff --check`.
-+
-+## Artifact
-+
-+- `tmp/PR_26175_CHARLIE_020-admin-api-registry_delta.zip`
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_021-runtime-feature-flags-branch-validation.md b/docs_build/dev/reports/PR_26175_CHARLIE_021-runtime-feature-flags-branch-validation.md
-new file mode 100644
-index 000000000..dda6a5907
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_021-runtime-feature-flags-branch-validation.md
-@@ -0,0 +1,6 @@
-+# PR_26175_CHARLIE_021 Branch Validation
-+
-+- PASS: Continued on `pr/26175-CHARLIE-010-system-health-history-and-closeout`.
-+- PASS: Stacked on PR_26175_CHARLIE_020.
-+- PASS: No merge performed.
-+- PASS: No rebase performed.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_021-runtime-feature-flags-manual-validation-notes.md b/docs_build/dev/reports/PR_26175_CHARLIE_021-runtime-feature-flags-manual-validation-notes.md
-new file mode 100644
-index 000000000..e0db010b0
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_021-runtime-feature-flags-manual-validation-notes.md
-@@ -0,0 +1,5 @@
-+# PR_26175_CHARLIE_021 Manual Validation Notes
-+
-+- Verified Runtime Feature Flags table renders on System Health.
-+- Verified completed System Health flags show Enabled.
-+- Verified scheduled monitoring and notifications remain Not Configured.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_021-runtime-feature-flags-requirement-checklist.md b/docs_build/dev/reports/PR_26175_CHARLIE_021-runtime-feature-flags-requirement-checklist.md
-new file mode 100644
-index 000000000..51a7c1be6
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_021-runtime-feature-flags-requirement-checklist.md
-@@ -0,0 +1,7 @@
-+# PR_26175_CHARLIE_021 Requirement Checklist
-+
-+- PASS: Added runtime feature flags.
-+- PASS: Flags are read-only.
-+- PASS: Flags are server-owned.
-+- PASS: Not Configured placeholders do not fake enabled behavior.
-+- PASS: Required reports generated.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_021-runtime-feature-flags-validation.md b/docs_build/dev/reports/PR_26175_CHARLIE_021-runtime-feature-flags-validation.md
-new file mode 100644
-index 000000000..4cdbaaedd
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_021-runtime-feature-flags-validation.md
-@@ -0,0 +1,12 @@
-+# PR_26175_CHARLIE_021 Validation Report
-+
-+## Commands
-+
-+- PASS: `node --check src/dev-runtime/server/local-api-router.mjs`
-+- PASS: `node --check assets/theme-v2/js/admin-system-health.js`
-+- PASS: `git diff --check`
-+ - Result: no whitespace errors; CRLF conversion warnings only.
-+- PASS: `node --test tests/dev-runtime/AdminHealthOperations.test.mjs`
-+ - Result: 4 passed.
-+- PASS: `npx playwright test tests/playwright/tools/AdminHealthOperationsPage.spec.mjs --workers=1 --reporter=line`
-+ - Result: 3 passed.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_021-runtime-feature-flags.md b/docs_build/dev/reports/PR_26175_CHARLIE_021-runtime-feature-flags.md
-new file mode 100644
-index 000000000..9f8607a0c
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_021-runtime-feature-flags.md
-@@ -0,0 +1,25 @@
-+# PR_26175_CHARLIE_021 Runtime Feature Flags
-+
-+## Scope
-+
-+Team: Charlie
-+
-+Purpose: Add read-only runtime feature flags to Admin System Health.
-+
-+## Changes
-+
-+- Added server-owned `runtimeFeatureFlags` to the System Health status API.
-+- Added Runtime Feature Flags table to the System Health page.
-+- Reported completed System Health features as Enabled and placeholders as Not Configured.
-+- Updated API and Playwright tests.
-+
-+## Validation
-+
-+- PASS: Targeted System Health API/unit tests.
-+- PASS: Targeted System Health Playwright tests.
-+- PASS: Syntax checks.
-+- PASS: `git diff --check`.
-+
-+## Artifact
-+
-+- `tmp/PR_26175_CHARLIE_021-runtime-feature-flags_delta.zip`
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_022-admin-health-test-suite-branch-validation.md b/docs_build/dev/reports/PR_26175_CHARLIE_022-admin-health-test-suite-branch-validation.md
-new file mode 100644
-index 000000000..4694cef86
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_022-admin-health-test-suite-branch-validation.md
-@@ -0,0 +1,6 @@
-+# PR_26175_CHARLIE_022 Branch Validation
-+
-+- PASS: Continued on `pr/26175-CHARLIE-010-system-health-history-and-closeout`.
-+- PASS: Stacked on PR_26175_CHARLIE_021.
-+- PASS: No merge performed.
-+- PASS: No rebase performed.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_022-admin-health-test-suite-manual-validation-notes.md b/docs_build/dev/reports/PR_26175_CHARLIE_022-admin-health-test-suite-manual-validation-notes.md
-new file mode 100644
-index 000000000..0799952e8
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_022-admin-health-test-suite-manual-validation-notes.md
-@@ -0,0 +1,5 @@
-+# PR_26175_CHARLIE_022 Manual Validation Notes
-+
-+- Verified new tests live under canonical `tests/api/admin-system-health/`.
-+- Verified tests do not require peer environment services.
-+- Verified tests do not expose secrets.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_022-admin-health-test-suite-requirement-checklist.md b/docs_build/dev/reports/PR_26175_CHARLIE_022-admin-health-test-suite-requirement-checklist.md
-new file mode 100644
-index 000000000..08f86ae5a
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_022-admin-health-test-suite-requirement-checklist.md
-@@ -0,0 +1,7 @@
-+# PR_26175_CHARLIE_022 Requirement Checklist
-+
-+- PASS: Added focused Admin Health test suite.
-+- PASS: Test suite covers current-environment-only System Health contract.
-+- PASS: Test suite covers server-owned completion sections.
-+- PASS: Test suite covers unknown action rejection.
-+- PASS: Required reports generated.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_022-admin-health-test-suite-validation.md b/docs_build/dev/reports/PR_26175_CHARLIE_022-admin-health-test-suite-validation.md
-new file mode 100644
-index 000000000..6d1d940ec
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_022-admin-health-test-suite-validation.md
-@@ -0,0 +1,12 @@
-+# PR_26175_CHARLIE_022 Validation Report
-+
-+## Commands
-+
-+- PASS: `node --check tests/api/admin-system-health/contract.test.mjs`
-+- PASS: `git diff --check`
-+- PASS: `node --test tests/api/admin-system-health/contract.test.mjs`
-+ - Result: 2 passed.
-+- PASS: `node --test tests/dev-runtime/AdminHealthOperations.test.mjs`
-+ - Result: 4 passed.
-+- PASS: `npx playwright test tests/playwright/tools/AdminHealthOperationsPage.spec.mjs --workers=1 --reporter=line`
-+ - Result: 3 passed.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_022-admin-health-test-suite.md b/docs_build/dev/reports/PR_26175_CHARLIE_022-admin-health-test-suite.md
-new file mode 100644
-index 000000000..0a7e88311
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_022-admin-health-test-suite.md
++++ b/docs_build/dev/reports/PR_26175_CHARLIE_025-system-health-backlog-closeout-requirement-checklist.md
@@ -0,0 +1,23 @@
-+# PR_26175_CHARLIE_022 Admin Health Test Suite
-+
-+## Scope
-+
-+Team: Charlie
-+
-+Purpose: Add focused Admin System Health completion contract tests.
-+
-+## Changes
-+
-+- Added `tests/api/admin-system-health/contract.test.mjs`.
-+- Covered current-environment-only contract, server-owned completion sections, secret masking, and unknown manual action rejection.
-+
-+## Validation
-+
-+- PASS: New Admin System Health API contract suite.
-+- PASS: Existing targeted System Health API/unit tests.
-+- PASS: Targeted System Health Playwright tests.
-+- PASS: `git diff --check`.
-+
-+## Artifact
-+
-+- `tmp/PR_26175_CHARLIE_022-admin-health-test-suite_delta.zip`
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_023-system-health-documentation-closeout-branch-validation.md b/docs_build/dev/reports/PR_26175_CHARLIE_023-system-health-documentation-closeout-branch-validation.md
-new file mode 100644
-index 000000000..a65cc8779
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_023-system-health-documentation-closeout-branch-validation.md
-@@ -0,0 +1,7 @@
-+# PR_26175_CHARLIE_023 Branch Validation
-+
-+- PASS: Continued on `pr/26175-CHARLIE-010-system-health-history-and-closeout`.
-+- PASS: Stacked on PR_26175_CHARLIE_022.
-+- PASS: No merge performed.
-+- PASS: No rebase performed.
-+- PASS: Branch ready to push and update draft PR #158.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_023-system-health-documentation-closeout-manual-validation-notes.md b/docs_build/dev/reports/PR_26175_CHARLIE_023-system-health-documentation-closeout-manual-validation-notes.md
-new file mode 100644
-index 000000000..5db2a7208
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_023-system-health-documentation-closeout-manual-validation-notes.md
-@@ -0,0 +1,5 @@
-+# PR_26175_CHARLIE_023 Manual Validation Notes
-+
-+- Verified completion reports exist for PRs 018 through 023.
-+- Verified final validation lane includes the new Admin System Health contract suite.
-+- Verified closeout records no merge requested.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_023-system-health-documentation-closeout-requirement-checklist.md b/docs_build/dev/reports/PR_26175_CHARLIE_023-system-health-documentation-closeout-requirement-checklist.md
-new file mode 100644
-index 000000000..4bec1225f
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_023-system-health-documentation-closeout-requirement-checklist.md
-@@ -0,0 +1,7 @@
-+# PR_26175_CHARLIE_023 Requirement Checklist
-+
-+- PASS: Added documentation closeout.
-+- PASS: Included final validation evidence.
-+- PASS: Listed all completion ZIP artifacts.
-+- PASS: Preserved no-merge requirement.
-+- PASS: Required reports generated.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_023-system-health-documentation-closeout-validation.md b/docs_build/dev/reports/PR_26175_CHARLIE_023-system-health-documentation-closeout-validation.md
-new file mode 100644
-index 000000000..20b448550
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_023-system-health-documentation-closeout-validation.md
-@@ -0,0 +1,14 @@
-+# PR_26175_CHARLIE_023 Validation Report
-+
-+## Commands
-+
-+- PASS: `node --test tests/api/admin-system-health/contract.test.mjs`
-+ - Result: 2 passed.
-+- PASS: `node --test tests/dev-runtime/AdminHealthOperations.test.mjs`
-+ - Result: 4 passed.
-+- PASS: `npx playwright test tests/playwright/tools/AdminHealthOperationsPage.spec.mjs --workers=1 --reporter=line`
-+ - Result: 3 passed.
-+
-+## Notes
-+
-+- Full samples smoke was not run; not required for this System Health completion scope.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_023-system-health-documentation-closeout.md b/docs_build/dev/reports/PR_26175_CHARLIE_023-system-health-documentation-closeout.md
-new file mode 100644
-index 000000000..d18a17a9d
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_023-system-health-documentation-closeout.md
-@@ -0,0 +1,43 @@
-+# PR_26175_CHARLIE_023 System Health Documentation Closeout
-+
-+## Scope
-+
-+Team: Charlie
-+
-+Purpose: Close out System Health completion PRs 018 through 023 with final documentation and validation evidence.
-+
-+## Completed Commits
-+
-+- PASS: PR_26175_CHARLIE_018-health-api-contract-cleanup
-+- PASS: PR_26175_CHARLIE_019-environment-capabilities
-+- PASS: PR_26175_CHARLIE_020-admin-api-registry
-+- PASS: PR_26175_CHARLIE_021-runtime-feature-flags
-+- PASS: PR_26175_CHARLIE_022-admin-health-test-suite
-+- PASS: PR_26175_CHARLIE_023-system-health-documentation-closeout
-+
-+## Final Architecture State
-+
-+- PASS: System Health remains current-deployment only.
-+- PASS: Environment Map remains reference-only.
-+- PASS: Browser UI renders API-owned health and governance state.
-+- PASS: Manual health actions call API contracts.
-+- PASS: Scheduled monitoring and notification placeholders remain Not Configured.
-+- PASS: Admin API Registry and Health API Contract are visible in System Health.
-+
-+## Final Validation
-+
-+- PASS: `node --test tests/api/admin-system-health/contract.test.mjs`
-+ - Result: 2 passed.
-+- PASS: `node --test tests/dev-runtime/AdminHealthOperations.test.mjs`
-+ - Result: 4 passed.
-+- PASS: `npx playwright test tests/playwright/tools/AdminHealthOperationsPage.spec.mjs --workers=1 --reporter=line`
-+ - Result: 3 passed.
-+
-+## ZIP Artifacts
-+
-+- `tmp/PR_26175_CHARLIE_018-health-api-contract-cleanup_delta.zip`
-+- `tmp/PR_26175_CHARLIE_019-environment-capabilities_delta.zip`
-+- `tmp/PR_26175_CHARLIE_020-admin-api-registry_delta.zip`
-+- `tmp/PR_26175_CHARLIE_021-runtime-feature-flags_delta.zip`
-+- `tmp/PR_26175_CHARLIE_022-admin-health-test-suite_delta.zip`
-+- `tmp/PR_26175_CHARLIE_023-system-health-documentation-closeout_delta.zip`
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_024-system-health-operational-docs-branch-validation.md b/docs_build/dev/reports/PR_26175_CHARLIE_024-system-health-operational-docs-branch-validation.md
-new file mode 100644
-index 000000000..42f90b418
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_024-system-health-operational-docs-branch-validation.md
-@@ -0,0 +1,7 @@
-+# PR_26175_CHARLIE_024 Branch Validation
-+
-+- PASS: Continued from `pr/26175-CHARLIE-010-system-health-history-and-closeout`.
-+- PASS: Start gate worktree was clean.
-+- PASS: PR purpose is singular: System Health v1 operational documentation.
-+- PASS: Runtime behavior unchanged.
-+- PASS: No merge performed.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_024-system-health-operational-docs-manual-validation-notes.md b/docs_build/dev/reports/PR_26175_CHARLIE_024-system-health-operational-docs-manual-validation-notes.md
-new file mode 100644
-index 000000000..c0c41d301
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_024-system-health-operational-docs-manual-validation-notes.md
-@@ -0,0 +1,13 @@
-+# PR_26175_CHARLIE_024 Manual Validation Notes
-+
-+- Verified the new guide documents the current-environment-only System Health
-+ architecture.
-+- Verified the Environment Map is documented as reference-only.
-+- Verified the approved Local, DEV, IST, UAT, and PRD model is included.
-+- Verified the shared R2 folder model includes `/local`, `/dev`, `/ist`,
-+ `/uat`, and `/prd`.
-+- Verified manual health actions are documented as API-backed operations.
-+- Verified Scheduled Health Monitoring and Notifications & Alerts are documented
-+ as production-safe Not Configured states when service contracts are absent.
-+- Verified troubleshooting and manual validation guidance is present.
-+- Verified no runtime files were modified.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_024-system-health-operational-docs-requirement-checklist.md b/docs_build/dev/reports/PR_26175_CHARLIE_024-system-health-operational-docs-requirement-checklist.md
-new file mode 100644
-index 000000000..42894166b
---- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_024-system-health-operational-docs-requirement-checklist.md
-@@ -0,0 +1,22 @@
-+# PR_26175_CHARLIE_024 Requirement Checklist
++# PR_26175_CHARLIE_025 Requirement Checklist
+
+| Requirement | Status | Evidence |
+| --- | --- | --- |
-+| Continue from current Charlie System Health branch | PASS | Branch `pr/26175-CHARLIE-010-system-health-history-and-closeout`. |
-+| Hard stop if worktree is not clean | PASS | Start gate was clean. |
-+| Add durable operational docs under `docs_build` | PASS | Added `docs_build/operations/system-health-v1-operational-guide.md`. |
-+| Document System Health architecture | PASS | Architecture section added. |
-+| Document current-environment-only rule | PASS | Architecture and guardrails sections added. |
-+| Document Environment Map reference-only rule | PASS | Architecture and validation sections added. |
-+| Document Local/DEV/IST/UAT/PRD model | PASS | Environment Model table added. |
-+| Document shared R2 folder model | PASS | Shared R2 Folder Model section added. |
-+| Document API contract summary | PASS | API Contract Summary section added. |
-+| Document manual health actions | PASS | Manual Health Actions section added. |
-+| Document scheduled monitoring Not Configured behavior | PASS | Scheduled Monitoring section added. |
-+| Document notifications Not Configured behavior | PASS | Notifications And Alerts section added. |
-+| Document troubleshooting guide | PASS | Troubleshooting Guide section added. |
-+| Document manual validation guide | PASS | Manual Validation Guide section added. |
-+| Do not change runtime behavior | PASS | Documentation-only changes. |
-+| Create reports and ZIP | PASS | Reports created; ZIP path reserved under `tmp/`. |
-+| Push branch and update PR #158 | PASS | Completed by this BUILD after commit and push. |
++| 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_024-system-health-operational-docs-validation.md b/docs_build/dev/reports/PR_26175_CHARLIE_024-system-health-operational-docs-validation.md
+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..783a99438
+index 000000000..fdb23f0f5
--- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_024-system-health-operational-docs-validation.md
-@@ -0,0 +1,14 @@
-+# PR_26175_CHARLIE_024 Validation
++++ 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: Documentation scope confirmed; no runtime behavior changes required.
-+- PASS: `git diff --check`
-+- PASS: Required durable operational documentation added under `docs_build`.
-+- PASS: Required report artifacts generated under `docs_build/dev/reports`.
++- 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 unit and Playwright tests were not run for this PR because the change is
-+documentation-only and does not modify application, API, test, or configuration
-+behavior.
-diff --git a/docs_build/dev/reports/PR_26175_CHARLIE_024-system-health-operational-docs.md b/docs_build/dev/reports/PR_26175_CHARLIE_024-system-health-operational-docs.md
++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..2cccce8d6
+index 000000000..42eb74b7e
--- /dev/null
-+++ b/docs_build/dev/reports/PR_26175_CHARLIE_024-system-health-operational-docs.md
-@@ -0,0 +1,38 @@
-+# PR_26175_CHARLIE_024 System Health Operational Docs
++++ 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: Add durable System Health v1 operational documentation under
-+`docs_build` without changing runtime behavior.
++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
+
-+- Added `docs_build/operations/system-health-v1-operational-guide.md`.
-+- Documented the current-environment-only rule.
-+- Documented the reference-only Environment Map rule.
-+- Documented Local, DEV, IST, UAT, and PRD environment models.
-+- Documented the shared Cloudflare R2 folder model.
-+- Documented the Admin System Health API contract summary.
-+- Documented manual health actions.
-+- Documented production-safe Not Configured behavior for scheduled monitoring
-+ and notifications.
-+- Added troubleshooting and manual validation guides.
-+
-+## Runtime Behavior
-+
-+- PASS: No runtime files changed.
-+- PASS: Documentation-only scope.
-+- PASS: No API, UI, service, test, or configuration behavior changed.
-+
-+## Artifacts
-+
-+- `docs_build/dev/reports/codex_review.diff`
-+- `docs_build/dev/reports/codex_changed_files.txt`
-+- `docs_build/dev/reports/PR_26175_CHARLIE_024-system-health-operational-docs.md`
-+- `docs_build/dev/reports/PR_26175_CHARLIE_024-system-health-operational-docs-validation.md`
-+- `docs_build/dev/reports/PR_26175_CHARLIE_024-system-health-operational-docs-branch-validation.md`
-+- `docs_build/dev/reports/PR_26175_CHARLIE_024-system-health-operational-docs-requirement-checklist.md`
-+- `docs_build/dev/reports/PR_26175_CHARLIE_024-system-health-operational-docs-manual-validation-notes.md`
-+- `tmp/PR_26175_CHARLIE_024-system-health-operational-docs_delta.zip`
-diff --git a/docs_build/dev/reports/codex_changed_files.txt b/docs_build/dev/reports/codex_changed_files.txt
-index 5efcd7443..274329a5e 100644
---- a/docs_build/dev/reports/codex_changed_files.txt
-+++ b/docs_build/dev/reports/codex_changed_files.txt
-@@ -1,21 +1,78 @@
- admin/system-health.html
- assets/theme-v2/js/admin-system-health.js
--docs_build/dev/reports/PR_26175_CHARLIE_009-system-health-current-r2-health.md
--docs_build/dev/reports/PR_26175_CHARLIE_010-system-health-history-and-closeout.md
--docs_build/dev/reports/PR_26175_CHARLIE_011-admin-submenu-alphabetical-order-branch-validation.md
--docs_build/dev/reports/PR_26175_CHARLIE_011-admin-submenu-alphabetical-order-manual-validation-notes.md
--docs_build/dev/reports/PR_26175_CHARLIE_011-admin-submenu-alphabetical-order-requirement-checklist.md
--docs_build/dev/reports/PR_26175_CHARLIE_011-admin-submenu-alphabetical-order-validation.md
--docs_build/dev/reports/PR_26175_CHARLIE_011-admin-submenu-alphabetical-order.md
-+docs_build/dev/reports/PR_26175_CHARLIE_012-017-system-health-phase-2-closeout.md
-+docs_build/dev/reports/PR_26175_CHARLIE_012-runtime-health-branch-validation.md
-+docs_build/dev/reports/PR_26175_CHARLIE_012-runtime-health-manual-validation-notes.md
-+docs_build/dev/reports/PR_26175_CHARLIE_012-runtime-health-requirement-checklist.md
-+docs_build/dev/reports/PR_26175_CHARLIE_012-runtime-health-validation.md
-+docs_build/dev/reports/PR_26175_CHARLIE_012-runtime-health.md
-+docs_build/dev/reports/PR_26175_CHARLIE_013-service-health-dashboard-branch-validation.md
-+docs_build/dev/reports/PR_26175_CHARLIE_013-service-health-dashboard-manual-validation-notes.md
-+docs_build/dev/reports/PR_26175_CHARLIE_013-service-health-dashboard-requirement-checklist.md
-+docs_build/dev/reports/PR_26175_CHARLIE_013-service-health-dashboard-validation.md
-+docs_build/dev/reports/PR_26175_CHARLIE_013-service-health-dashboard.md
-+docs_build/dev/reports/PR_26175_CHARLIE_014-configuration-summary-branch-validation.md
-+docs_build/dev/reports/PR_26175_CHARLIE_014-configuration-summary-manual-validation-notes.md
-+docs_build/dev/reports/PR_26175_CHARLIE_014-configuration-summary-requirement-checklist.md
-+docs_build/dev/reports/PR_26175_CHARLIE_014-configuration-summary-validation.md
-+docs_build/dev/reports/PR_26175_CHARLIE_014-configuration-summary.md
-+docs_build/dev/reports/PR_26175_CHARLIE_015-manual-health-actions-branch-validation.md
-+docs_build/dev/reports/PR_26175_CHARLIE_015-manual-health-actions-manual-validation-notes.md
-+docs_build/dev/reports/PR_26175_CHARLIE_015-manual-health-actions-requirement-checklist.md
-+docs_build/dev/reports/PR_26175_CHARLIE_015-manual-health-actions-validation.md
-+docs_build/dev/reports/PR_26175_CHARLIE_015-manual-health-actions.md
-+docs_build/dev/reports/PR_26175_CHARLIE_016-scheduled-health-monitoring-branch-validation.md
-+docs_build/dev/reports/PR_26175_CHARLIE_016-scheduled-health-monitoring-manual-validation-notes.md
-+docs_build/dev/reports/PR_26175_CHARLIE_016-scheduled-health-monitoring-requirement-checklist.md
-+docs_build/dev/reports/PR_26175_CHARLIE_016-scheduled-health-monitoring-validation.md
-+docs_build/dev/reports/PR_26175_CHARLIE_016-scheduled-health-monitoring.md
-+docs_build/dev/reports/PR_26175_CHARLIE_017-health-notifications-foundation-branch-validation.md
-+docs_build/dev/reports/PR_26175_CHARLIE_017-health-notifications-foundation-manual-validation-notes.md
-+docs_build/dev/reports/PR_26175_CHARLIE_017-health-notifications-foundation-requirement-checklist.md
-+docs_build/dev/reports/PR_26175_CHARLIE_017-health-notifications-foundation-validation.md
-+docs_build/dev/reports/PR_26175_CHARLIE_017-health-notifications-foundation.md
-+docs_build/dev/reports/PR_26175_CHARLIE_018-health-api-contract-cleanup-branch-validation.md
-+docs_build/dev/reports/PR_26175_CHARLIE_018-health-api-contract-cleanup-manual-validation-notes.md
-+docs_build/dev/reports/PR_26175_CHARLIE_018-health-api-contract-cleanup-requirement-checklist.md
-+docs_build/dev/reports/PR_26175_CHARLIE_018-health-api-contract-cleanup-validation.md
-+docs_build/dev/reports/PR_26175_CHARLIE_018-health-api-contract-cleanup.md
-+docs_build/dev/reports/PR_26175_CHARLIE_019-environment-capabilities-branch-validation.md
-+docs_build/dev/reports/PR_26175_CHARLIE_019-environment-capabilities-manual-validation-notes.md
-+docs_build/dev/reports/PR_26175_CHARLIE_019-environment-capabilities-requirement-checklist.md
-+docs_build/dev/reports/PR_26175_CHARLIE_019-environment-capabilities-validation.md
-+docs_build/dev/reports/PR_26175_CHARLIE_019-environment-capabilities.md
-+docs_build/dev/reports/PR_26175_CHARLIE_020-admin-api-registry-branch-validation.md
-+docs_build/dev/reports/PR_26175_CHARLIE_020-admin-api-registry-manual-validation-notes.md
-+docs_build/dev/reports/PR_26175_CHARLIE_020-admin-api-registry-requirement-checklist.md
-+docs_build/dev/reports/PR_26175_CHARLIE_020-admin-api-registry-validation.md
-+docs_build/dev/reports/PR_26175_CHARLIE_020-admin-api-registry.md
-+docs_build/dev/reports/PR_26175_CHARLIE_021-runtime-feature-flags-branch-validation.md
-+docs_build/dev/reports/PR_26175_CHARLIE_021-runtime-feature-flags-manual-validation-notes.md
-+docs_build/dev/reports/PR_26175_CHARLIE_021-runtime-feature-flags-requirement-checklist.md
-+docs_build/dev/reports/PR_26175_CHARLIE_021-runtime-feature-flags-validation.md
-+docs_build/dev/reports/PR_26175_CHARLIE_021-runtime-feature-flags.md
-+docs_build/dev/reports/PR_26175_CHARLIE_022-admin-health-test-suite-branch-validation.md
-+docs_build/dev/reports/PR_26175_CHARLIE_022-admin-health-test-suite-manual-validation-notes.md
-+docs_build/dev/reports/PR_26175_CHARLIE_022-admin-health-test-suite-requirement-checklist.md
-+docs_build/dev/reports/PR_26175_CHARLIE_022-admin-health-test-suite-validation.md
-+docs_build/dev/reports/PR_26175_CHARLIE_022-admin-health-test-suite.md
-+docs_build/dev/reports/PR_26175_CHARLIE_023-system-health-documentation-closeout-branch-validation.md
-+docs_build/dev/reports/PR_26175_CHARLIE_023-system-health-documentation-closeout-manual-validation-notes.md
-+docs_build/dev/reports/PR_26175_CHARLIE_023-system-health-documentation-closeout-requirement-checklist.md
-+docs_build/dev/reports/PR_26175_CHARLIE_023-system-health-documentation-closeout-validation.md
-+docs_build/dev/reports/PR_26175_CHARLIE_023-system-health-documentation-closeout.md
-+docs_build/dev/reports/PR_26175_CHARLIE_024-system-health-operational-docs-branch-validation.md
-+docs_build/dev/reports/PR_26175_CHARLIE_024-system-health-operational-docs-manual-validation-notes.md
-+docs_build/dev/reports/PR_26175_CHARLIE_024-system-health-operational-docs-requirement-checklist.md
-+docs_build/dev/reports/PR_26175_CHARLIE_024-system-health-operational-docs-validation.md
-+docs_build/dev/reports/PR_26175_CHARLIE_024-system-health-operational-docs.md
- docs_build/dev/reports/codex_changed_files.txt
- docs_build/dev/reports/codex_review.diff
- docs_build/dev/reports/coverage_changed_js_guardrail.txt
- docs_build/dev/reports/playwright_v8_coverage_report.txt
--src/api/admin-owner-navigation.js
-+docs_build/operations/system-health-v1-operational-guide.md
-+src/api/admin-system-health-api-client.js
- src/dev-runtime/server/local-api-router.mjs
-+tests/api/admin-system-health/contract.test.mjs
- tests/dev-runtime/AdminHealthOperations.test.mjs
--tests/dev-runtime/ApiMenuPathCleanup.test.mjs
--tests/dev-runtime/ArchitectureCleanupApiNavInvitations.test.mjs
- tests/playwright/tools/AdminHealthOperationsPage.spec.mjs
--tests/playwright/tools/AdminInvitationsNavPage.spec.mjs
--tests/playwright/tools/AdminOwnerNavigationBoundary.spec.mjs
-diff --git a/docs_build/dev/reports/coverage_changed_js_guardrail.txt b/docs_build/dev/reports/coverage_changed_js_guardrail.txt
-index 8df1af057..7b1c51f19 100644
---- a/docs_build/dev/reports/coverage_changed_js_guardrail.txt
-+++ b/docs_build/dev/reports/coverage_changed_js_guardrail.txt
-@@ -6,10 +6,7 @@ Missing changed runtime JS files are WARN, not FAIL.
- Source: Playwright/Chromium built-in V8 coverage from the active Playwright run.
-
- Changed runtime JS files considered:
--(0%) assets/theme-v2/js/admin-system-health.js - WARNING: changed runtime JS file was not collected by Playwright V8 coverage; advisory only
--(0%) src/dev-runtime/server/local-api-router.mjs - WARNING: changed runtime JS file was not collected by Playwright V8 coverage; advisory only
--(100%) src/api/admin-owner-navigation.js - executed lines 42/42; executed functions 5/5
-+(100%) none changed - no changed runtime JS files
-
- Guardrail warnings:
--(0%) assets/theme-v2/js/admin-system-health.js - WARNING: changed runtime JS file missing from coverage; advisory only
--(0%) src/dev-runtime/server/local-api-router.mjs - WARNING: changed runtime JS file missing from coverage; advisory only
-+(100%) none changed - no changed runtime JS files
-diff --git a/docs_build/dev/reports/playwright_v8_coverage_report.txt b/docs_build/dev/reports/playwright_v8_coverage_report.txt
-index be704e176..da6deaaa0 100644
---- a/docs_build/dev/reports/playwright_v8_coverage_report.txt
-+++ b/docs_build/dev/reports/playwright_v8_coverage_report.txt
-@@ -12,41 +12,27 @@ Note: entry percentages use function coverage when available, otherwise line cov
- Note: coverage entries are aggregated across every page/tool where coverageReporter.start(page) and coverageReporter.stop(page) ran.
-
- Exercised tool entry points detected:
--(35%) Toolbox Index - exercised 1 runtime JS files
-+(46%) Toolbox Index - exercised 1 runtime JS files
- (0%) Tool Template V2 - not exercised by this Playwright run
--(70%) Theme V2 Shared JS - exercised 5 runtime JS files
-+(78%) Theme V2 Shared JS - exercised 4 runtime JS files
-
- Changed runtime JS files covered:
--(0%) assets/theme-v2/js/admin-system-health.js - WARNING: changed runtime JS file was not collected by Playwright V8 coverage; advisory only
--(0%) src/dev-runtime/server/local-api-router.mjs - WARNING: changed runtime JS file was not collected by Playwright V8 coverage; advisory only
--(100%) src/api/admin-owner-navigation.js - executed lines 42/42; executed functions 5/5
-+(100%) none changed - no changed runtime JS files
-
- Files with executed line/function counts where available:
--(35%) toolbox/tool-registry-api-client.js - executed lines 155/155; executed functions 9/26
- (36%) src/api/server-api-client.js - executed lines 167/167; executed functions 5/14
--(40%) src/api/admin-invitations-api-client.js - executed lines 40/40; executed functions 2/5
--(50%) assets/js/shared/status.js - executed lines 37/37; executed functions 3/6
--(53%) assets/theme-v2/js/admin-invitations.js - executed lines 156/156; executed functions 9/17
--(59%) assets/theme-v2/js/owner-memberships.js - executed lines 248/248; executed functions 16/27
-+(46%) toolbox/tool-registry-api-client.js - executed lines 155/155; executed functions 12/26
- (64%) assets/theme-v2/js/tool-display-mode.js - executed lines 204/204; executed functions 9/14
--(67%) src/api/owner-memberships-api-client.js - executed lines 19/19; executed functions 2/3
--(71%) src/api/public-config-client.js - executed lines 209/209; executed functions 20/28
-+(65%) src/api/public-config-client.js - executed lines 209/209; executed functions 17/26
- (74%) assets/theme-v2/js/gamefoundry-partials.js - executed lines 1001/1001; executed functions 69/93
--(89%) src/dev-runtime/admin/admin-notes-viewer.js - executed lines 533/533; executed functions 49/55
--(100%) assets/theme-v2/js/admin-owner-navigation.js - executed lines 58/58; executed functions 11/11
--(100%) src/api/admin-owner-navigation.js - executed lines 42/42; executed functions 5/5
-+(80%) src/api/admin-owner-navigation.js - executed lines 42/42; executed functions 4/5
-+(82%) assets/theme-v2/js/admin-system-health.js - executed lines 808/808; executed functions 68/83
-+(83%) assets/js/shared/status.js - executed lines 37/37; executed functions 5/6
-+(91%) assets/theme-v2/js/admin-owner-navigation.js - executed lines 58/58; executed functions 10/11
-+(100%) src/api/admin-system-health-api-client.js - executed lines 28/28; executed functions 4/4
-
- Uncovered or low-coverage changed JS files:
--(0%) assets/theme-v2/js/admin-system-health.js - WARNING: uncovered changed runtime JS file; advisory only
--(0%) src/dev-runtime/server/local-api-router.mjs - WARNING: uncovered changed runtime JS file; advisory only
-+(100%) none changed - no changed runtime JS files
-
- Changed JS files considered:
--(0%) assets/theme-v2/js/admin-system-health.js - changed JS file not collected as browser runtime coverage
--(0%) src/dev-runtime/server/local-api-router.mjs - changed JS file not collected as browser runtime coverage
--(0%) tests/dev-runtime/AdminHealthOperations.test.mjs - changed JS file not collected as browser runtime coverage
--(0%) tests/dev-runtime/ApiMenuPathCleanup.test.mjs - changed JS file not collected as browser runtime coverage
--(0%) tests/dev-runtime/ArchitectureCleanupApiNavInvitations.test.mjs - changed JS file not collected as browser runtime coverage
--(0%) tests/playwright/tools/AdminHealthOperationsPage.spec.mjs - changed JS file not collected as browser runtime coverage
--(0%) tests/playwright/tools/AdminInvitationsNavPage.spec.mjs - changed JS file not collected as browser runtime coverage
--(0%) tests/playwright/tools/AdminOwnerNavigationBoundary.spec.mjs - changed JS file not collected as browser runtime coverage
--(100%) src/api/admin-owner-navigation.js - changed JS file with browser V8 coverage
-+(0%) tests/api/admin-system-health/contract.test.mjs - changed JS file not collected as browser runtime coverage
-diff --git a/docs_build/operations/system-health-v1-operational-guide.md b/docs_build/operations/system-health-v1-operational-guide.md
-new file mode 100644
-index 000000000..afe83ac09
---- /dev/null
-+++ b/docs_build/operations/system-health-v1-operational-guide.md
-@@ -0,0 +1,240 @@
-+# System Health v1 Operational Guide
-+
-+## Purpose
-+
-+System Health v1 is the Team Charlie admin surface for confirming the health of
-+the currently deployed Game Foundry Studio environment. It is an operational
-+read model: the browser renders server-owned status returned by the Admin System
-+Health API, and operators use manual actions to ask the API to run specific
-+checks.
-+
-+This guide is the durable operator reference for System Health v1. It describes
-+the approved environment model, storage model, API contract, manual actions,
-+safe placeholder behavior, troubleshooting steps, and manual validation path.
-+
-+## Architecture
-+
-+System Health is one page per deployed environment. A deployment actively checks
-+only itself.
-+
-+The page may display a static Environment Map for operator reference, but the
-+Environment Map must not trigger active peer-environment checks. For example,
-+the UAT deployment may show Local, DEV, IST, UAT, and PRD in the reference map,
-+but it must only check UAT infrastructure.
-+
-+The browser does not own infrastructure health state. It loads and renders the
-+server-owned API payload from `/api/admin/system-health/status` and submits
-+manual health actions to Admin System Health API endpoints. Browser-side
-+fallback rows may show safe pending or unavailable states while loading, but a
-+successful health result must come from the API/service contract.
-+
-+## Environment Model
-+
-+| Environment | Hosting model | Database model | Storage folder |
-+| --- | --- | --- | --- |
-+| Local | VS Code + Local API | Local Docker PostgreSQL | `/local` |
-+| DEV | Local Docker | Local Docker PostgreSQL | `/dev` |
-+| IST | Local Docker | Local Docker PostgreSQL | `/ist` |
-+| UAT | Cloudflare | Supabase PostgreSQL | `/uat` |
-+| PRD | Cloudflare | Supabase PostgreSQL | `/prd` |
-+
-+The Environment Identity section displays the current deployment only:
-+
-+- environment name
-+- hosting model
-+- site URL
-+- API URL
-+- database model
-+- storage folder
-+- last health check
-+
-+The Environment Map is reference-only and lists all approved environments.
-+
-+## Shared R2 Folder Model
-+
-+GFS uses one shared Cloudflare R2 bucket with environment-scoped folders:
-+
-+- `/local`
-+- `/dev`
-+- `/ist`
-+- `/uat`
-+- `/prd`
++- 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.
+
-+Storage Health must use the folder for the current environment only. The active
-+diagnostic operations are:
++## Future Enhancements Boundary
+
-+- bucket connectivity
-+- list
-+- upload
-+- read
-+- delete
++The following items are future enhancements only unless Owner creates a new
++phase:
+
-+Do not run storage diagnostics against another environment folder from the
-+current deployment.
++- scheduler execution engine
++- outbound notifications
++- external alert delivery
++- provider telemetry
++- charts and metrics
++- log viewer
++- operational automation
++- observability integrations
+
-+## API Contract Summary
-+
-+Contract version: `2026-06-24.system-health.v1`
-+
-+| Method | Path | Purpose |
-+| --- | --- | --- |
-+| GET | `/api/admin/system-health/status` | Read current deployment System Health status. |
-+| POST | `/api/admin/system-health/action` | Run current deployment manual health actions. |
-+| POST | `/api/admin/system-health/storage-connectivity-action` | Run current deployment R2 folder diagnostics. |
-+
-+The status API owns the System Health data boundary. It reports:
-+
-+- current environment identity
-+- reference Environment Map
-+- environment capabilities
-+- Health API Contract
-+- Admin API Registry
-+- runtime feature flags
-+- runtime health
-+- service health
-+- configuration summary
-+- database health
-+- storage health
-+- scheduled monitoring foundation
-+- notifications foundation
-+- health check history
-+
-+The contract must not expose secrets. Configuration values that could contain
-+credentials, tokens, keys, or connection strings must be omitted or masked by
-+the server before reaching the browser.
-+
-+## Manual Health Actions
-+
-+Manual health action controls submit API requests. They do not create browser
-+owned successful health results.
-+
-+Supported controls:
-+
-+- Refresh
-+- Run Runtime Check
-+- Run Database Check
-+- Run Storage Check
-+- Run Full Health Check
-+
-+Each manual action is scoped to the current deployment. A Run Storage Check must
-+use the current environment folder, and a Run Database Check must use the
-+current environment database model.
-+
-+## Scheduled Monitoring
-+
-+Scheduled Health Monitoring is production-safe when the scheduler is not
-+implemented or not configured. In that state, System Health shows Not Configured
-+or pending rows for:
-+
-+- last scheduled run
-+- next scheduled run
-+- duration
-+- recent result
-+- failures/warnings
-+
-+This state is intentional and must not be treated as a hidden success. Operators
-+should treat it as a clear statement that automatic scheduled checks are not
-+active for the deployment.
-+
-+## Notifications And Alerts
-+
-+Notifications and alerts are production-safe when no sending contract is
-+configured. In that state, System Health shows Not Configured or pending rows
-+for:
-+
-+- email alerts
-+- admin notifications
-+- webhook alerts
-+- messages integration, when present
-+
-+System Health v1 must not send email, admin notifications, webhooks, or messages
-+unless an approved service contract exists.
-+
-+## Troubleshooting Guide
-+
-+### Page Does Not Load Status
-+
-+1. Confirm the current deployment serves `admin/system-health.html`.
-+2. Confirm the API route `GET /api/admin/system-health/status` is reachable.
-+3. Check the browser console for network failures.
-+4. Check the Local API or deployment logs for route errors.
-+5. Confirm any admin authorization requirement for the deployment is satisfied.
-+
-+### Environment Identity Looks Wrong
-+
-+1. Confirm the deployment environment variables identify the intended
-+ environment.
-+2. Confirm the storage folder maps to the intended environment.
-+3. Restart the API after changing environment variables.
-+4. Reopen System Health and verify only the current deployment identity changed.
-+5. Do not use the Environment Map as proof of active environment selection; it
-+ is reference-only.
-+
-+### Database Health Fails
-+
-+1. For Local, DEV, and IST, confirm Local Docker PostgreSQL is running.
-+2. For UAT and PRD, confirm Supabase PostgreSQL configuration is present
-+ server-side.
-+3. Run the manual Database Check.
-+4. Review response time, connectivity, version, and last checked values.
-+5. Check server logs for connection errors without exposing credentials.
-+
-+### Storage Health Fails
-+
-+1. Confirm Cloudflare R2 bucket configuration is present server-side.
-+2. Confirm the storage folder matches the current environment.
-+3. Run the manual Storage Check.
-+4. Review bucket connectivity, list, upload, read, and delete results.
-+5. If upload or delete fails, confirm the deployment credentials allow test
-+ object writes and cleanup in the current environment folder.
-+
-+### Runtime Health Fails
-+
-+1. Confirm the API process is running.
-+2. Confirm runtime version, API version, Node version, server start time, and
-+ uptime fields are returned when available.
-+3. Run the manual Runtime Check.
-+4. Review deployment logs for startup or route errors.
-+
-+### Scheduled Or Notification Sections Show Not Configured
-+
-+This is expected until approved scheduler or notification service contracts are
-+implemented. Do not patch the browser to display a healthy state. Add or update
-+the server-side service contract first, then update System Health to render the
-+server-owned result.
-+
-+## Manual Validation Guide
-+
-+Use this checklist after System Health v1 changes or deployment configuration
-+changes:
-+
-+1. Open the System Health page for the deployment being validated.
-+2. Confirm Environment Identity shows the current deployment only.
-+3. Confirm Environment Map lists Local, DEV, IST, UAT, and PRD as reference
-+ entries only.
-+4. Confirm no network call attempts to health-check another environment.
-+5. Confirm Configuration Summary contains no secrets.
-+6. Confirm Database Health matches the current environment database model.
-+7. Confirm Storage Health uses the current environment R2 folder.
-+8. Run Refresh.
-+9. Run Runtime Check.
-+10. Run Database Check.
-+11. Run Storage Check.
-+12. Run Full Health Check.
-+13. Confirm action results come from API responses.
-+14. Confirm Scheduled Health Monitoring shows Not Configured when no scheduler
-+ contract exists.
-+15. Confirm Notifications & Alerts shows Not Configured when no notification
-+ contract exists.
-+16. Review Health Check History for recent checks, warnings, and failures for
-+ the current environment only.
-+
-+## Operator Guardrails
-+
-+- Do not add cross-environment health checks.
-+- Do not let the browser invent healthy infrastructure state.
-+- Do not expose credentials or raw connection strings.
-+- Do not change environment folder mappings without updating this guide,
-+ Project Instructions, and the System Health API contract tests.
-+- Do not treat Not Configured placeholders as failures when the underlying
-+ scheduler or notification service contract is intentionally absent.
-diff --git a/src/api/admin-system-health-api-client.js b/src/api/admin-system-health-api-client.js
-index dcac596fd..9b166d097 100644
---- a/src/api/admin-system-health-api-client.js
-+++ b/src/api/admin-system-health-api-client.js
-@@ -19,3 +19,13 @@ export function runAdminSystemHealthStorageConnectivityAction(actionId) {
- "Admin System Health storage connectivity action",
- );
- }
-+
-+export function runAdminSystemHealthAction(actionId) {
-+ return requireServerApiData(
-+ safeRequestServerApi("/admin/system-health/action", {
-+ body: { actionId },
-+ method: "POST",
-+ }),
-+ "Admin System Health action",
-+ );
-+}
-diff --git a/src/dev-runtime/server/local-api-router.mjs b/src/dev-runtime/server/local-api-router.mjs
-index 194ba4622..993e14a59 100644
---- a/src/dev-runtime/server/local-api-router.mjs
-+++ b/src/dev-runtime/server/local-api-router.mjs
-@@ -321,6 +321,8 @@ const LOCAL_API_STARTUP_DEFAULT_PORT_BY_PROTOCOL = Object.freeze({
- "http:": "80",
- "https:": "443",
- });
-+const LOCAL_API_PROCESS_STARTED_AT = new Date().toISOString();
-+const SYSTEM_HEALTH_API_CONTRACT_VERSION = "2026-06-24.system-health.v1";
- const SYSTEM_HEALTH_USAGE_NOT_AVAILABLE = "NOT AVAILABLE";
- const SYSTEM_HEALTH_USAGE_CONTRACTS = Object.freeze({
- GAMEFOUNDRY_DB_CONNECTION_LIMIT: Object.freeze({
-@@ -347,6 +349,35 @@ const STORAGE_CONNECTIVITY_ACTIONS = Object.freeze([
- Object.freeze({ id: "storage-read-test-object", label: "Read test object", operation: "read" }),
- Object.freeze({ id: "storage-delete-test-object", label: "Delete test object", operation: "delete" }),
- ]);
-+const SYSTEM_HEALTH_STORAGE_ACTION_IDS = Object.freeze([
-+ "storage-bucket-connectivity",
-+ "storage-list",
-+ "storage-upload-test-object",
-+ "storage-read-test-object",
-+ "storage-delete-test-object",
-+]);
-+const SYSTEM_HEALTH_MANUAL_ACTION_LABELS = Object.freeze({
-+ "database-check": "Run Database Check",
-+ "full-health-check": "Run Full Health Check",
-+ refresh: "Refresh",
-+ "runtime-check": "Run Runtime Check",
-+ "storage-check": "Run Storage Check",
-+});
-+const SYSTEM_HEALTH_API_ENDPOINTS = Object.freeze([
-+ Object.freeze({ method: "GET", path: "/api/admin/system-health/status", purpose: "Read current deployment System Health status." }),
-+ Object.freeze({ method: "POST", path: "/api/admin/system-health/action", purpose: "Run current deployment manual health actions." }),
-+ Object.freeze({ method: "POST", path: "/api/admin/system-health/storage-connectivity-action", purpose: "Run current deployment R2 folder diagnostics." }),
-+]);
-+const ADMIN_API_REGISTRY_ENTRIES = Object.freeze([
-+ Object.freeze({ method: "GET", owner: "Team Charlie", path: "/api/admin/system-health/status", purpose: "System Health status contract" }),
-+ Object.freeze({ method: "POST", owner: "Team Charlie", path: "/api/admin/system-health/action", purpose: "System Health manual actions" }),
-+ Object.freeze({ method: "POST", owner: "Team Charlie", path: "/api/admin/system-health/storage-connectivity-action", purpose: "System Health R2 diagnostics" }),
-+ Object.freeze({ method: "GET", owner: "Team Charlie", path: "/api/admin/infrastructure/storage-path-status", purpose: "Infrastructure storage path status" }),
-+ Object.freeze({ method: "POST", owner: "Team Charlie", path: "/api/admin/infrastructure/storage-connectivity-action", purpose: "Infrastructure R2 diagnostics" }),
-+ Object.freeze({ method: "GET", owner: "Team Charlie", path: "/api/admin/operations/status", purpose: "Admin Operations status" }),
-+ Object.freeze({ method: "POST", owner: "Team Charlie", path: "/api/admin/operations/action", purpose: "Admin Operations actions" }),
-+ Object.freeze({ method: "GET", owner: "Shared Admin Navigation", path: "/api/navigation/admin-menu", purpose: "Admin navigation menu contract" }),
-+]);
- const STORAGE_CONNECTIVITY_TEST_OBJECT_CONTENT = "Game Foundry Studio storage connectivity test object.\n";
- const STORAGE_CONNECTIVITY_TEST_OBJECT_RELATIVE_PATH = "connectivity/storage-connectivity-test.txt";
- const SYSTEM_HEALTH_ENVIRONMENT_MODELS = Object.freeze([
-@@ -993,6 +1024,94 @@ function systemHealthSummary(rows) {
- };
- }
-
-+function systemHealthApiContract(checkedAt = new Date().toISOString()) {
-+ const endpointValue = SYSTEM_HEALTH_API_ENDPOINTS
-+ .map((endpoint) => `${endpoint.method} ${endpoint.path}`)
-+ .join("; ");
-+ const rows = [
-+ {
-+ field: "Contract version",
-+ status: "PASS",
-+ value: SYSTEM_HEALTH_API_CONTRACT_VERSION,
-+ },
-+ {
-+ field: "Data boundary",
-+ status: "PASS",
-+ value: SERVER_DATA_BOUNDARY_RULE,
-+ },
-+ {
-+ field: "Deployment scope",
-+ status: "PASS",
-+ value: "Current deployment only",
-+ },
-+ {
-+ field: "Environment Map",
-+ status: "PASS",
-+ value: "Reference only; no peer environment checks",
-+ },
-+ {
-+ field: "Secret handling",
-+ status: "PASS",
-+ value: "No secret editing; secret values hidden",
-+ },
-+ {
-+ field: "Endpoints",
-+ status: "PASS",
-+ value: endpointValue,
-+ },
-+ ];
-+ return {
-+ contractVersion: SYSTEM_HEALTH_API_CONTRACT_VERSION,
-+ currentDeploymentOnly: true,
-+ endpointCount: SYSTEM_HEALTH_API_ENDPOINTS.length,
-+ endpoints: SYSTEM_HEALTH_API_ENDPOINTS.map((endpoint) => ({ ...endpoint })),
-+ lastChecked: checkedAt,
-+ message: "Admin System Health API contract is current-deployment only and server-owned.",
-+ noCrossEnvironmentChecks: true,
-+ referenceEnvironmentMapOnly: true,
-+ rows,
-+ secretEditingAllowed: false,
-+ secretsExposed: false,
-+ status: "PASS",
-+ };
-+}
-+
-+function systemHealthAdminApiRegistry(checkedAt = new Date().toISOString()) {
-+ const rows = ADMIN_API_REGISTRY_ENTRIES.map((entry) => ({
-+ ...entry,
-+ status: "PASS",
-+ }));
-+ return {
-+ lastChecked: checkedAt,
-+ message: "Admin API Registry lists server routes used by Admin System Health and adjacent Charlie-owned admin operations.",
-+ routeCount: rows.length,
-+ rows,
-+ secretEditingAllowed: false,
-+ secretsExposed: false,
-+ status: "PASS",
-+ };
-+}
-+
-+function systemHealthRuntimeFeatureFlags(checkedAt = new Date().toISOString()) {
-+ const rows = [
-+ { flag: "system-health.api-contract", status: "PASS", value: "Enabled" },
-+ { flag: "system-health.environment-capabilities", status: "PASS", value: "Enabled" },
-+ { flag: "system-health.admin-api-registry", status: "PASS", value: "Enabled" },
-+ { flag: "system-health.runtime-health", status: "PASS", value: "Enabled" },
-+ { flag: "system-health.manual-actions", status: "PASS", value: "Enabled" },
-+ { flag: "system-health.scheduled-monitoring", status: "PENDING", value: "Not Configured" },
-+ { flag: "system-health.notifications", status: "PENDING", value: "Not Configured" },
-+ ];
-+ return {
-+ lastChecked: checkedAt,
-+ message: "Runtime Feature Flags are read-only server-reported System Health capability flags.",
-+ rows,
-+ secretEditingAllowed: false,
-+ secretsExposed: false,
-+ status: overallHealthStatus(rows.map((row) => ({ status: row.status }))),
-+ };
-+}
-+
- function isSecretLikeRuntimeEnvKey(key) {
- const upperKey = String(key || "").toUpperCase();
- return RUNTIME_ENV_SECRET_MARKERS.some((marker) => upperKey.includes(marker));
-@@ -1028,6 +1147,328 @@ function systemHealthRuntimeEnvironment(env = process.env) {
- };
- }
-
-+let cachedProjectVersion = null;
-+
-+function projectVersion() {
-+ if (cachedProjectVersion !== null) {
-+ return cachedProjectVersion;
-+ }
-+ try {
-+ const packageJson = JSON.parse(readFileSync(path.join(process.cwd(), "package.json"), "utf8"));
-+ cachedProjectVersion = String(packageJson.version || "").trim();
-+ } catch {
-+ cachedProjectVersion = "";
-+ }
-+ return cachedProjectVersion;
-+}
-+
-+function systemHealthRuntimeHealth(environmentIdentity = {}, checkedAt = new Date().toISOString()) {
-+ const version = projectVersion();
-+ const nodeVersion = String(process.version || "").trim();
-+ const uptimeSeconds = Math.max(0, Math.floor(process.uptime()));
-+ return {
-+ apiVersion: version,
-+ appVersion: version,
-+ environmentName: environmentIdentity.name || "Unknown",
-+ lastChecked: checkedAt,
-+ message: "Runtime health is reported by the current deployment Local API only.",
-+ nodeVersion,
-+ secretEditingAllowed: false,
-+ secretsExposed: false,
-+ serverStartTime: LOCAL_API_PROCESS_STARTED_AT,
-+ status: "PASS",
-+ uptimeSeconds,
-+ };
-+}
-+
-+function systemHealthServiceDisplayStatus(status, configured = true) {
-+ if (configured === false) {
-+ return { healthStatus: "PENDING", status: "Not Configured" };
-+ }
-+ const normalized = normalizeHealthStatus(status);
-+ if (normalized === "PASS") {
-+ return { healthStatus: "PASS", status: "Healthy" };
-+ }
-+ if (normalized === "FAIL") {
-+ return { healthStatus: "FAIL", status: "Failed" };
-+ }
-+ return { healthStatus: "WARN", status: "Warning" };
-+}
-+
-+function systemHealthServiceCard({ configured = true, id, label, lastChecked, status = "WARN", summary }) {
-+ const displayStatus = systemHealthServiceDisplayStatus(status, configured);
-+ return {
-+ configured,
-+ healthStatus: displayStatus.healthStatus,
-+ id,
-+ label,
-+ lastChecked,
-+ status: displayStatus.status,
-+ summary: String(summary || "Service health status unavailable."),
-+ };
-+}
-+
-+function systemHealthServiceHealth({
-+ authStatus = {},
-+ checkedAt,
-+ databaseStatus = {},
-+ runtimeHealth = {},
-+ session = {},
-+ storageStatus = {},
-+}) {
-+ const databaseConfigured = databaseStatus.configured !== false && databaseStatus.connectivity !== "not configured";
-+ const storageConfigured = storageStatus.configured === true;
-+ const authConfigured = authStatus.configured === true || authStatus.ready === true;
-+ const services = [
-+ systemHealthServiceCard({
-+ id: "runtime",
-+ label: "Runtime",
-+ lastChecked: runtimeHealth.lastChecked || checkedAt,
-+ status: runtimeHealth.status || "WARN",
-+ summary: runtimeHealth.message || "Runtime health status unavailable.",
-+ }),
-+ systemHealthServiceCard({
-+ id: "api",
-+ label: "API",
-+ lastChecked: checkedAt,
-+ status: session.authenticated && session.isAdmin ? "PASS" : "FAIL",
-+ summary: session.authenticated && session.isAdmin
-+ ? "Current deployment API responded to the Admin System Health request."
-+ : "Admin System Health API requires an authenticated Admin session.",
-+ }),
-+ systemHealthServiceCard({
-+ configured: databaseConfigured,
-+ id: "database",
-+ label: "Database",
-+ lastChecked: databaseStatus.lastChecked || checkedAt,
-+ status: databaseStatus.connectivityStatus || databaseStatus.status || "WARN",
-+ summary: databaseStatus.message || `${databaseStatus.databaseType || "PostgreSQL"} status unavailable.`,
-+ }),
-+ systemHealthServiceCard({
-+ configured: storageConfigured,
-+ id: "storage",
-+ label: "Storage",
-+ lastChecked: storageStatus.lastChecked || checkedAt,
-+ status: storageStatus.status || "WARN",
-+ summary: storageStatus.message || "Cloudflare R2 storage status unavailable.",
-+ }),
-+ systemHealthServiceCard({
-+ configured: authConfigured,
-+ id: "authentication",
-+ label: "Authentication",
-+ lastChecked: checkedAt,
-+ status: authStatus.ready === true ? "PASS" : "WARN",
-+ summary: authStatus.operatorDiagnostic || authStatus.message || "Authentication provider status unavailable.",
-+ }),
-+ systemHealthServiceCard({
-+ configured: false,
-+ id: "email",
-+ label: "Email",
-+ lastChecked: checkedAt,
-+ status: "PENDING",
-+ summary: "Email health contract is not configured for this deployment.",
-+ }),
-+ systemHealthServiceCard({
-+ configured: false,
-+ id: "background-jobs",
-+ label: "Background Jobs",
-+ lastChecked: checkedAt,
-+ status: "PENDING",
-+ summary: "Background job health contract is not configured for this deployment.",
-+ }),
-+ ];
-+ return {
-+ lastChecked: checkedAt,
-+ message: "Service Health summarizes current-deployment service contracts only.",
-+ secretEditingAllowed: false,
-+ secretsExposed: false,
-+ services,
-+ status: overallHealthStatus(services.map((service) => ({ status: service.healthStatus }))),
-+ };
-+}
-+
-+function systemHealthConfigurationSummary({
-+ authStatus = {},
-+ checkedAt,
-+ databaseStatus = {},
-+ environmentIdentity = {},
-+ storageStatus = {},
-+}) {
-+ const authConfigured = authStatus.configured === true || authStatus.ready === true;
-+ const rows = [
-+ {
-+ field: "Current environment",
-+ status: environmentIdentity.status || "WARN",
-+ value: environmentIdentity.name || "Unknown",
-+ },
-+ {
-+ field: "Hosting model",
-+ status: environmentIdentity.hostingModel ? "PASS" : "WARN",
-+ value: environmentIdentity.hostingModel || "not configured",
-+ },
-+ {
-+ field: "Site URL",
-+ status: environmentIdentity.siteUrlStatus || "WARN",
-+ value: environmentIdentity.siteUrl || "not configured",
-+ },
-+ {
-+ field: "API URL",
-+ status: environmentIdentity.apiUrlStatus || "WARN",
-+ value: environmentIdentity.apiUrl || "not configured",
-+ },
-+ {
-+ field: "Database provider/type",
-+ status: databaseStatus.databaseType || environmentIdentity.databaseModel ? "PASS" : "WARN",
-+ value: databaseStatus.databaseType || environmentIdentity.databaseModel || "PostgreSQL",
-+ },
-+ {
-+ field: "Storage provider/folder",
-+ status: storageStatus.environmentFolderStatus || environmentIdentity.storageFolderStatus || "WARN",
-+ value: `Cloudflare R2 ${storageStatus.environmentFolder || environmentIdentity.storageFolder || "not configured"}`,
-+ },
-+ {
-+ field: "Auth provider/status",
-+ status: authConfigured ? "PASS" : "PENDING",
-+ value: `${authStatus.providerId || SUPABASE_AUTH_PROVIDER_ID} ${authConfigured ? "ready" : "not configured"}`,
-+ },
-+ ];
-+ return {
-+ lastChecked: checkedAt,
-+ message: "Configuration Summary is read-only and contains no secret values.",
-+ rows,
-+ secretEditingAllowed: false,
-+ secretsExposed: false,
-+ status: overallHealthStatus(rows),
-+ };
-+}
-+
-+function systemHealthEnvironmentCapabilities({
-+ authStatus = {},
-+ checkedAt,
-+ databaseStatus = {},
-+ environmentIdentity = {},
-+ storageStatus = {},
-+}) {
-+ const rows = [
-+ {
-+ capability: "Hosting",
-+ status: environmentIdentity.hostingModel ? "PASS" : "WARN",
-+ value: environmentIdentity.hostingModel || "not configured",
-+ },
-+ {
-+ capability: "API",
-+ status: environmentIdentity.apiUrlStatus || "WARN",
-+ value: environmentIdentity.apiUrl || "not configured",
-+ },
-+ {
-+ capability: "Database",
-+ status: databaseStatus.connectivityStatus || databaseStatus.status || "WARN",
-+ value: databaseStatus.databaseType || environmentIdentity.databaseModel || "PostgreSQL",
-+ },
-+ {
-+ capability: "Storage",
-+ status: storageStatus.environmentFolderStatus || environmentIdentity.storageFolderStatus || "WARN",
-+ value: `Cloudflare R2 ${storageStatus.environmentFolder || environmentIdentity.storageFolder || "not configured"}`,
-+ },
-+ {
-+ capability: "Authentication",
-+ status: authStatus.ready === true ? "PASS" : "PENDING",
-+ value: authStatus.ready === true ? "Configured" : "Not Configured",
-+ },
-+ {
-+ capability: "Scheduled Monitoring",
-+ status: "PENDING",
-+ value: "Not Configured",
-+ },
-+ {
-+ capability: "Notifications",
-+ status: "PENDING",
-+ value: "Not Configured",
-+ },
-+ ];
-+ return {
-+ currentEnvironment: environmentIdentity.name || "Unknown",
-+ lastChecked: checkedAt,
-+ message: "Environment Capabilities describes the current deployment only.",
-+ peerEnvironmentChecks: false,
-+ rows,
-+ secretEditingAllowed: false,
-+ secretsExposed: false,
-+ status: overallHealthStatus(rows.map((row) => ({ status: row.status }))),
-+ };
-+}
-+
-+function systemHealthScheduledMonitoring(checkedAt = new Date().toISOString()) {
-+ const rows = [
-+ {
-+ field: "Last scheduled run",
-+ status: "PENDING",
-+ value: "Not Configured",
-+ },
-+ {
-+ field: "Next scheduled run",
-+ status: "PENDING",
-+ value: "Not Configured",
-+ },
-+ {
-+ field: "Duration",
-+ status: "PENDING",
-+ value: "Not Configured",
-+ },
-+ {
-+ field: "Recent result",
-+ status: "PENDING",
-+ value: "Not Configured",
-+ },
-+ {
-+ field: "Failures/warnings",
-+ status: "PENDING",
-+ value: "Scheduler contract is not configured.",
-+ },
-+ ];
-+ return {
-+ lastChecked: checkedAt,
-+ message: "Scheduled Health Monitoring is not configured for this deployment.",
-+ rows,
-+ secretEditingAllowed: false,
-+ secretsExposed: false,
-+ status: "PENDING",
-+ };
-+}
-+
-+function systemHealthNotificationsFoundation(checkedAt = new Date().toISOString()) {
-+ const rows = [
-+ {
-+ field: "Email alerts",
-+ status: "PENDING",
-+ value: "Not Configured",
-+ },
-+ {
-+ field: "Admin notifications",
-+ status: "PENDING",
-+ value: "Not Configured",
-+ },
-+ {
-+ field: "Webhook alerts",
-+ status: "PENDING",
-+ value: "Not Configured",
-+ },
-+ {
-+ field: "Messages integration",
-+ status: "PENDING",
-+ value: "Not Configured",
-+ },
-+ ];
-+ return {
-+ lastChecked: checkedAt,
-+ message: "Notifications and alerts are placeholders only; no alert sending contract is configured for this deployment.",
-+ rows,
-+ secretEditingAllowed: false,
-+ secretsExposed: false,
-+ status: "PENDING",
-+ };
-+}
-+
- function systemHealthHistoryRow({ checkedAt, environmentName, area, result, summary, kind = "recent check" }) {
- return {
- area,
-@@ -1043,6 +1484,7 @@ function systemHealthCheckHistory({
- checkedAt,
- databaseStatus = {},
- environmentIdentity = {},
-+ runtimeHealth = {},
- runtimeEnvironment = {},
- storageStatus = {},
- }) {
-@@ -1076,8 +1518,8 @@ function systemHealthCheckHistory({
- area: "Runtime Health",
- checkedAt,
- environmentName,
-- result: runtimeEnvironment.status,
-- summary: runtimeEnvironment.message || "Runtime environment health unavailable.",
-+ result: runtimeHealth.status || runtimeEnvironment.status,
-+ summary: runtimeHealth.message || runtimeEnvironment.message || "Runtime health unavailable.",
- }),
- ];
- const issueRows = recentChecks
-@@ -3886,10 +4328,85 @@ LIMIT 1;
- return this.runStorageConnectivityAction(String(body.actionId || "").trim(), { scope: "environment-folder" });
- }
-
-+ async adminSystemHealthStorageHealthCheck() {
-+ const results = [];
-+ for (const actionId of SYSTEM_HEALTH_STORAGE_ACTION_IDS) {
-+ results.push(await this.runStorageConnectivityAction(actionId, { scope: "environment-folder" }));
-+ }
-+ return {
-+ actionId: "storage-check",
-+ checkedAt: new Date().toISOString(),
-+ label: SYSTEM_HEALTH_MANUAL_ACTION_LABELS["storage-check"],
-+ message: "Storage health check executed bucket connectivity, list, upload, read, and delete through the current deployment API.",
-+ secretEditingAllowed: false,
-+ secretsExposed: false,
-+ status: overallHealthStatus(results.map((result) => ({ status: result.status }))),
-+ storageDiagnostics: results,
-+ storageStatus: this.ownerStorageStatus(),
-+ };
-+ }
-+
-+ async adminSystemHealthAction(body = {}) {
-+ const session = await this.requireAdminSession();
-+ const actionId = String(body.actionId || "").trim();
-+ const label = SYSTEM_HEALTH_MANUAL_ACTION_LABELS[actionId];
-+ if (!label) {
-+ throw httpError(`Unknown Admin System Health action: ${actionId || "missing actionId"}.`, 400);
-+ }
-+ const checkedAt = new Date().toISOString();
-+ const environmentIdentity = systemHealthEnvironmentIdentity(process.env, checkedAt);
-+ if (actionId === "refresh" || actionId === "full-health-check") {
-+ const statusSnapshot = await this.adminSystemHealthStatus();
-+ return {
-+ actionId,
-+ checkedAt,
-+ label,
-+ message: `${label} completed through the current deployment Admin System Health API.`,
-+ secretEditingAllowed: false,
-+ secretsExposed: false,
-+ status: statusSnapshot.status,
-+ statusSnapshot,
-+ };
-+ }
-+ if (actionId === "runtime-check") {
-+ const runtimeHealth = systemHealthRuntimeHealth(environmentIdentity, checkedAt);
-+ return {
-+ actionId,
-+ checkedAt,
-+ label,
-+ message: "Runtime health check completed through the current deployment API.",
-+ runtimeHealth,
-+ secretEditingAllowed: false,
-+ secretsExposed: false,
-+ status: runtimeHealth.status,
-+ };
-+ }
-+ if (actionId === "database-check") {
-+ const databaseStatus = await this.ownerDatabaseStatus(environmentIdentity);
-+ return {
-+ actionId,
-+ checkedAt,
-+ databaseStatus,
-+ label,
-+ message: "Database health check completed through the current deployment API.",
-+ secretEditingAllowed: false,
-+ secretsExposed: false,
-+ status: databaseStatus.connectivityStatus || databaseStatus.status,
-+ };
-+ }
-+ if (session.isAdmin !== true) {
-+ throw httpError("Admin role required.", 403);
-+ }
-+ return this.adminSystemHealthStorageHealthCheck();
-+ }
-+
- async adminSystemHealthStatus() {
- const session = await this.requireAdminSession();
- const authStatus = this.authStatus();
- const checkedAt = new Date().toISOString();
-+ const apiContract = systemHealthApiContract(checkedAt);
-+ const adminApiRegistry = systemHealthAdminApiRegistry(checkedAt);
-+ const runtimeFeatureFlags = systemHealthRuntimeFeatureFlags(checkedAt);
- const environmentIdentity = systemHealthEnvironmentIdentity(process.env, checkedAt);
- const environmentMap = systemHealthEnvironmentMap();
- const databaseStatus = await this.ownerDatabaseStatus(environmentIdentity);
-@@ -3902,11 +4419,37 @@ LIMIT 1;
- const promotionFoundation = this.ownerPromotionFoundation();
- const r2Readiness = systemHealthR2Readiness(storageStatus);
- const runtimeEnvironment = systemHealthRuntimeEnvironment();
-+ const runtimeHealth = systemHealthRuntimeHealth(environmentIdentity, checkedAt);
-+ const serviceHealth = systemHealthServiceHealth({
-+ authStatus,
-+ checkedAt,
-+ databaseStatus,
-+ runtimeHealth,
-+ session,
-+ storageStatus,
-+ });
-+ const configurationSummary = systemHealthConfigurationSummary({
-+ authStatus,
-+ checkedAt,
-+ databaseStatus,
-+ environmentIdentity,
-+ storageStatus,
-+ });
-+ const environmentCapabilities = systemHealthEnvironmentCapabilities({
-+ authStatus,
-+ checkedAt,
-+ databaseStatus,
-+ environmentIdentity,
-+ storageStatus,
-+ });
-+ const scheduledMonitoring = systemHealthScheduledMonitoring(checkedAt);
-+ const notificationsFoundation = systemHealthNotificationsFoundation(checkedAt);
- const operationsHealth = adminOperationsHealth(this.standaloneTables);
- const healthCheckHistory = systemHealthCheckHistory({
- checkedAt,
- databaseStatus,
- environmentIdentity,
-+ runtimeHealth,
- runtimeEnvironment,
- storageStatus,
- });
-@@ -4033,16 +4576,25 @@ LIMIT 1;
- message: "Admin System Health loaded safe status only.",
- environmentIdentity,
- environmentMap,
-+ environmentCapabilities,
- healthCheckHistory,
-+ notificationsFoundation,
- operationsHealth,
- overview,
- pressureLabels: SYSTEM_HEALTH_LIMIT_PRESSURE_LABELS,
- connectionSummary: this.ownerConnectionSummary(),
- databaseStatus,
-+ adminApiRegistry,
-+ apiContract,
-+ configurationSummary,
- r2Readiness,
- secretEditingAllowed: false,
- secretsExposed: false,
- runtimeEnvironment,
-+ runtimeFeatureFlags,
-+ runtimeHealth,
-+ scheduledMonitoring,
-+ serviceHealth,
- storageStatus,
- summary: systemHealthSummary(overview),
- status: overallHealthStatus(overview),
-@@ -6056,6 +6608,12 @@ export function createLocalApiRouter({
- return true;
- }
-
-+ if (parts[1] === "admin" && parts[2] === "system-health" && request.method === "POST" && parts[3] === "action") {
-+ const body = await readRequestJson(request);
-+ ok(response, await dataSource.adminSystemHealthAction(body));
-+ return true;
-+ }
-+
- if (parts[1] === "admin" && parts[2] === "operations" && request.method === "GET" && parts[3] === "status") {
- ok(response, await dataSource.adminOperationsStatus());
- return true;
-diff --git a/tests/api/admin-system-health/contract.test.mjs b/tests/api/admin-system-health/contract.test.mjs
-new file mode 100644
-index 000000000..e9e366882
---- /dev/null
-+++ b/tests/api/admin-system-health/contract.test.mjs
-@@ -0,0 +1,156 @@
-+import http from "node:http";
-+import test from "node:test";
-+import assert from "node:assert/strict";
-+import { createLocalApiRouter } from "../../../src/dev-runtime/server/local-api-router.mjs";
-+import { SEED_DB_KEYS } from "../../../src/dev-runtime/seed/seed-db-keys.mjs";
-+
-+function withEnv(nextEnv, callback) {
-+ const previousEnv = {};
-+ Object.keys(nextEnv).forEach((key) => {
-+ previousEnv[key] = process.env[key];
-+ if (nextEnv[key] === undefined) {
-+ delete process.env[key];
-+ } else {
-+ process.env[key] = nextEnv[key];
-+ }
-+ });
-+ return Promise.resolve()
-+ .then(callback)
-+ .finally(() => {
-+ Object.entries(previousEnv).forEach(([key, value]) => {
-+ if (value === undefined) {
-+ delete process.env[key];
-+ } else {
-+ process.env[key] = value;
-+ }
-+ });
-+ });
-+}
-+
-+function startApiServer() {
-+ const handleRequest = createLocalApiRouter();
-+ const server = http.createServer((request, response) => {
-+ const address = server.address();
-+ const port = address && typeof address !== "string" ? address.port : 0;
-+ const requestUrl = new URL(request.url || "/", `http://127.0.0.1:${port}`);
-+ handleRequest(request, response, requestUrl).catch((error) => {
-+ response.statusCode = error?.statusCode || 500;
-+ response.setHeader("Content-Type", "application/json; charset=utf-8");
-+ response.end(JSON.stringify({
-+ error: error instanceof Error ? error.message : String(error || "Admin System Health contract test server error."),
-+ ok: false,
-+ }));
-+ });
-+ });
-+ return new Promise((resolve, reject) => {
-+ server.once("error", reject);
-+ server.listen(0, "127.0.0.1", () => {
-+ const address = server.address();
-+ if (!address || typeof address === "string") {
-+ reject(new Error("Unable to start Admin System Health contract API server."));
-+ return;
-+ }
-+ resolve({
-+ baseUrl: `http://127.0.0.1:${address.port}`,
-+ close: () => new Promise((closeResolve) => {
-+ server.closeAllConnections?.();
-+ server.close(closeResolve);
-+ }),
-+ });
-+ });
-+ });
-+}
-+
-+async function apiPayload(baseUrl, pathName, request = {}) {
-+ const init = request.body === undefined
-+ ? request
-+ : {
-+ ...request,
-+ body: JSON.stringify(request.body),
-+ headers: {
-+ "content-type": "application/json",
-+ ...(request.headers || {}),
-+ },
-+ };
-+ const response = await fetch(`${baseUrl}${pathName}`, init);
-+ const payload = await response.json();
-+ return { payload, status: response.status };
-+}
-+
-+async function apiJson(baseUrl, pathName, request = {}) {
-+ const { payload, status } = await apiPayload(baseUrl, pathName, request);
-+ assert.equal(status, 200, `${pathName} should return 200: ${payload.error || ""}`);
-+ assert.equal(payload.ok, true);
-+ return payload.data;
-+}
-+
-+test("Admin System Health completion contract remains server-owned and current-environment only", async () => {
-+ await withEnv({
-+ GAMEFOUNDRY_API_URL: "http://api-user:api-secret@127.0.0.1:5501/api",
-+ GAMEFOUNDRY_ENVIRONMENT_LABEL: "DEV",
-+ GAMEFOUNDRY_SITE_URL: "http://site-user:site-secret@127.0.0.1:5500",
-+ GAMEFOUNDRY_STORAGE_PROJECTS_PREFIX: "/dev/projects/",
-+ }, async () => {
-+ const server = await startApiServer();
-+ try {
-+ await apiJson(server.baseUrl, "/api/session/user", {
-+ body: { userKey: SEED_DB_KEYS.users.admin },
-+ method: "POST",
-+ });
-+ const health = await apiJson(server.baseUrl, "/api/admin/system-health/status");
-+ assert.equal(health.environmentIdentity.name, "DEV");
-+ assert.equal(health.apiContract.currentDeploymentOnly, true);
-+ assert.equal(health.apiContract.noCrossEnvironmentChecks, true);
-+ assert.equal(health.environmentCapabilities.peerEnvironmentChecks, false);
-+ assert.equal(health.environmentMap.some((row) => Object.hasOwn(row, "status")), false);
-+ assert.deepEqual(
-+ [
-+ "apiContract",
-+ "adminApiRegistry",
-+ "environmentCapabilities",
-+ "runtimeFeatureFlags",
-+ "serviceHealth",
-+ "configurationSummary",
-+ "scheduledMonitoring",
-+ "notificationsFoundation",
-+ ].filter((key) => Object.hasOwn(health, key)),
-+ [
-+ "apiContract",
-+ "adminApiRegistry",
-+ "environmentCapabilities",
-+ "runtimeFeatureFlags",
-+ "serviceHealth",
-+ "configurationSummary",
-+ "scheduledMonitoring",
-+ "notificationsFoundation",
-+ ],
-+ );
-+ const healthText = JSON.stringify(health);
-+ assert.equal(healthText.includes("api-secret"), false);
-+ assert.equal(healthText.includes("site-secret"), false);
-+ assert.equal(healthText.includes("/uat/projects"), false);
-+ assert.equal(health.secretEditingAllowed, false);
-+ assert.equal(health.secretsExposed, false);
-+ } finally {
-+ await server.close();
-+ }
-+ });
-+});
++## Runtime Behavior
+
-+test("Admin System Health rejects unknown manual health actions", async () => {
-+ const server = await startApiServer();
-+ try {
-+ await apiJson(server.baseUrl, "/api/session/user", {
-+ body: { userKey: SEED_DB_KEYS.users.admin },
-+ method: "POST",
-+ });
-+ const rejected = await apiPayload(server.baseUrl, "/api/admin/system-health/action", {
-+ body: { actionId: "peer-environment-check" },
-+ method: "POST",
-+ });
-+ assert.equal(rejected.status, 400);
-+ assert.match(rejected.payload.error, /Unknown Admin System Health action/);
-+ } finally {
-+ await server.close();
-+ }
-+});
-diff --git a/tests/dev-runtime/AdminHealthOperations.test.mjs b/tests/dev-runtime/AdminHealthOperations.test.mjs
-index fc0d28ea7..e682005b2 100644
---- a/tests/dev-runtime/AdminHealthOperations.test.mjs
-+++ b/tests/dev-runtime/AdminHealthOperations.test.mjs
-@@ -142,6 +142,58 @@ test("Admin can view operational health while Creator sessions are blocked", asy
- assert.equal(typeof health.databaseStatus.lastChecked, "string");
- assert.equal(typeof health.databaseStatus.responseTimeMs === "number" || health.databaseStatus.responseTimeMs === null, true);
- assert.equal(typeof health.databaseStatus.version, "string");
-+ assert.equal(health.runtimeHealth.environmentName, "Local");
-+ assert.equal(health.runtimeHealth.appVersion, "1.0.0");
-+ assert.equal(health.runtimeHealth.apiVersion, "1.0.0");
-+ assert.match(health.runtimeHealth.nodeVersion, /^v\d+\./);
-+ assert.equal(typeof health.runtimeHealth.serverStartTime, "string");
-+ assert.equal(typeof health.runtimeHealth.uptimeSeconds, "number");
-+ assert.equal(typeof health.runtimeHealth.lastChecked, "string");
-+ assert.deepEqual(
-+ health.serviceHealth.services.map((service) => service.label),
-+ ["Runtime", "API", "Database", "Storage", "Authentication", "Email", "Background Jobs"],
-+ );
-+ assert.equal(
-+ health.serviceHealth.services.every((service) => ["Healthy", "Warning", "Failed", "Not Configured"].includes(service.status)),
-+ true,
-+ );
-+ assert.equal(health.serviceHealth.services.every((service) => typeof service.summary === "string"), true);
-+ assert.equal(JSON.stringify(health.serviceHealth).includes("/uat"), false);
-+ assert.deepEqual(
-+ health.configurationSummary.rows.map((row) => row.field),
-+ [
-+ "Current environment",
-+ "Hosting model",
-+ "Site URL",
-+ "API URL",
-+ "Database provider/type",
-+ "Storage provider/folder",
-+ "Auth provider/status",
-+ ],
-+ );
-+ assert.equal(JSON.stringify(health.configurationSummary).includes("site-user"), false);
-+ assert.equal(JSON.stringify(health.configurationSummary).includes("site-secret"), false);
-+ assert.equal(JSON.stringify(health.configurationSummary).includes("api-user"), false);
-+ assert.equal(JSON.stringify(health.configurationSummary).includes("api-secret"), false);
-+ assert.deepEqual(
-+ health.scheduledMonitoring.rows.map((row) => row.field),
-+ ["Last scheduled run", "Next scheduled run", "Duration", "Recent result", "Failures/warnings"],
-+ );
-+ assert.equal(health.scheduledMonitoring.rows.some((row) => row.value === "Not Configured"), true);
-+ assert.equal(health.scheduledMonitoring.status, "PENDING");
-+ assert.deepEqual(
-+ health.notificationsFoundation.rows.map((row) => row.field),
-+ ["Email alerts", "Admin notifications", "Webhook alerts", "Messages integration"],
-+ );
-+ assert.equal(health.notificationsFoundation.rows.every((row) => row.value === "Not Configured"), true);
-+ assert.equal(health.notificationsFoundation.status, "PENDING");
-+ assert.equal(health.environmentCapabilities.currentEnvironment, "Local");
-+ assert.equal(health.environmentCapabilities.peerEnvironmentChecks, false);
-+ assert.deepEqual(
-+ health.environmentCapabilities.rows.map((row) => row.capability),
-+ ["Hosting", "API", "Database", "Storage", "Authentication", "Scheduled Monitoring", "Notifications"],
-+ );
-+ assert.equal(JSON.stringify(health.environmentCapabilities).includes("/uat"), false);
- assert.equal(health.storageStatus.environmentFolder, "/local");
- assert.equal(typeof health.storageStatus.lastChecked, "string");
- assert.equal(Array.isArray(health.healthCheckHistory), true);
-@@ -156,6 +208,43 @@ test("Admin can view operational health while Creator sessions are blocked", asy
- health.environmentMap.map((row) => row.name),
- ["Local", "DEV", "IST", "UAT", "PRD"],
- );
-+ assert.equal(health.apiContract.contractVersion, "2026-06-24.system-health.v1");
-+ assert.equal(health.apiContract.currentDeploymentOnly, true);
-+ assert.equal(health.apiContract.noCrossEnvironmentChecks, true);
-+ assert.equal(health.apiContract.referenceEnvironmentMapOnly, true);
-+ assert.deepEqual(
-+ health.apiContract.endpoints.map((endpoint) => `${endpoint.method} ${endpoint.path}`),
-+ [
-+ "GET /api/admin/system-health/status",
-+ "POST /api/admin/system-health/action",
-+ "POST /api/admin/system-health/storage-connectivity-action",
-+ ],
-+ );
-+ assert.deepEqual(
-+ health.adminApiRegistry.rows.map((row) => `${row.method} ${row.path}`),
-+ [
-+ "GET /api/admin/system-health/status",
-+ "POST /api/admin/system-health/action",
-+ "POST /api/admin/system-health/storage-connectivity-action",
-+ "GET /api/admin/infrastructure/storage-path-status",
-+ "POST /api/admin/infrastructure/storage-connectivity-action",
-+ "GET /api/admin/operations/status",
-+ "POST /api/admin/operations/action",
-+ "GET /api/navigation/admin-menu",
-+ ],
-+ );
-+ assert.deepEqual(
-+ health.runtimeFeatureFlags.rows.map((row) => `${row.flag}:${row.value}`),
-+ [
-+ "system-health.api-contract:Enabled",
-+ "system-health.environment-capabilities:Enabled",
-+ "system-health.admin-api-registry:Enabled",
-+ "system-health.runtime-health:Enabled",
-+ "system-health.manual-actions:Enabled",
-+ "system-health.scheduled-monitoring:Not Configured",
-+ "system-health.notifications:Not Configured",
-+ ],
-+ );
- assert.equal(
- health.environmentMap.some((row) => Object.prototype.hasOwnProperty.call(row, "status")),
- false,
-@@ -176,6 +265,44 @@ test("Admin can view operational health while Creator sessions are blocked", asy
- assert.equal(startupText.includes("api-secret"), false);
- assert.equal(startupText.includes("site-user"), false);
- assert.equal(startupText.includes("site-secret"), false);
-+ const runtimeAction = await apiJson(server.baseUrl, "/api/admin/system-health/action", {
-+ body: { actionId: "runtime-check" },
-+ method: "POST",
-+ });
-+ assert.equal(runtimeAction.runtimeHealth.environmentName, "Local");
-+ assert.equal(runtimeAction.actionId, "runtime-check");
-+ const databaseAction = await apiJson(server.baseUrl, "/api/admin/system-health/action", {
-+ body: { actionId: "database-check" },
-+ method: "POST",
-+ });
-+ assert.equal(databaseAction.databaseStatus.databaseType, "Local Docker PostgreSQL");
-+ assert.equal(databaseAction.actionId, "database-check");
-+ const storageAction = await apiJson(server.baseUrl, "/api/admin/system-health/action", {
-+ body: { actionId: "storage-check" },
-+ method: "POST",
-+ });
-+ assert.equal(storageAction.actionId, "storage-check");
-+ assert.deepEqual(
-+ storageAction.storageDiagnostics.map((row) => row.actionId),
-+ [
-+ "storage-bucket-connectivity",
-+ "storage-list",
-+ "storage-upload-test-object",
-+ "storage-read-test-object",
-+ "storage-delete-test-object",
-+ ],
-+ );
-+ assert.equal(storageAction.storageDiagnostics.every((row) => row.environmentFolder === "/local"), true);
-+ const refreshAction = await apiJson(server.baseUrl, "/api/admin/system-health/action", {
-+ body: { actionId: "refresh" },
-+ method: "POST",
-+ });
-+ assert.equal(refreshAction.statusSnapshot.environmentIdentity.name, "Local");
-+ const fullAction = await apiJson(server.baseUrl, "/api/admin/system-health/action", {
-+ body: { actionId: "full-health-check" },
-+ method: "POST",
-+ });
-+ assert.equal(fullAction.statusSnapshot.environmentIdentity.name, "Local");
- assert.equal(Array.isArray(health.operationsHealth.summaryRows), true);
- assert.deepEqual(
- health.operationsHealth.summaryRows.map((row) => row.area),
-diff --git a/tests/playwright/tools/AdminHealthOperationsPage.spec.mjs b/tests/playwright/tools/AdminHealthOperationsPage.spec.mjs
-index 021c845c5..52d7acf50 100644
---- a/tests/playwright/tools/AdminHealthOperationsPage.spec.mjs
-+++ b/tests/playwright/tools/AdminHealthOperationsPage.spec.mjs
-@@ -145,6 +145,65 @@ test("Admin System Health renders Postgres diagnostics through the safe status A
- await expect(page.getByRole("table", { name: "Environment map" })).toContainText("UAT");
- await expect(page.getByRole("table", { name: "Environment map" })).toContainText("PRD");
- await expect(page.getByRole("table", { name: "Environment map" }).locator("[data-health-status]")).toHaveCount(0);
-+ const capabilitiesTable = page.getByRole("table", { name: "Environment capabilities" });
-+ await expect(capabilitiesTable).toContainText("Hosting");
-+ await expect(capabilitiesTable).toContainText("API");
-+ await expect(capabilitiesTable).toContainText("Database");
-+ await expect(capabilitiesTable).toContainText("Storage");
-+ await expect(capabilitiesTable).toContainText("Scheduled Monitoring");
-+ await expect(capabilitiesTable).not.toContainText("/uat");
-+ const apiContractTable = page.getByRole("table", { name: "Health API contract" });
-+ await expect(apiContractTable).toContainText("2026-06-24.system-health.v1");
-+ await expect(apiContractTable).toContainText("Current deployment only");
-+ await expect(apiContractTable).toContainText("Reference only");
-+ await expect(apiContractTable).toContainText("GET /api/admin/system-health/status");
-+ const apiRegistryTable = page.getByRole("table", { name: "Admin API registry" });
-+ await expect(apiRegistryTable).toContainText("/api/admin/system-health/status");
-+ await expect(apiRegistryTable).toContainText("/api/admin/system-health/action");
-+ await expect(apiRegistryTable).toContainText("/api/admin/infrastructure/storage-path-status");
-+ await expect(apiRegistryTable).toContainText("/api/admin/operations/status");
-+ await expect(apiRegistryTable).toContainText("/api/navigation/admin-menu");
-+ const featureFlagsTable = page.getByRole("table", { name: "Runtime feature flags" });
-+ await expect(featureFlagsTable).toContainText("system-health.api-contract");
-+ await expect(featureFlagsTable).toContainText("system-health.environment-capabilities");
-+ await expect(featureFlagsTable).toContainText("system-health.manual-actions");
-+ await expect(featureFlagsTable).toContainText("system-health.notifications");
-+ await expect(featureFlagsTable).toContainText("Not Configured");
-+ const serviceCards = page.locator("[data-admin-system-health-service-card]");
-+ await expect(serviceCards).toHaveCount(7);
-+ const serviceCardText = (await serviceCards.allTextContents()).join("\n");
-+ ["Runtime", "API", "Database", "Storage", "Authentication", "Email", "Background Jobs"].forEach((label) => {
-+ expect(serviceCardText).toContain(label);
-+ });
-+ const serviceStatuses = await serviceCards.locator("[data-health-status]").allTextContents();
-+ expect(serviceStatuses.every((status) => ["Healthy", "Warning", "Failed", "Not Configured"].includes(status.trim()))).toBe(true);
-+ const configurationTable = page.getByRole("table", { name: "Configuration summary" });
-+ await expect(configurationTable).toContainText("Current environment");
-+ await expect(configurationTable).toContainText("Hosting model");
-+ await expect(configurationTable).toContainText("Site URL");
-+ await expect(configurationTable).toContainText("API URL");
-+ await expect(configurationTable).toContainText("Database provider/type");
-+ await expect(configurationTable).toContainText("Storage provider/folder");
-+ await expect(configurationTable).toContainText("Auth provider/status");
-+ await expect(configurationTable).not.toContainText("env-secret");
-+ await expect(page.getByRole("button", { name: "Refresh" })).toBeVisible();
-+ await expect(page.getByRole("button", { name: "Run Runtime Check" })).toBeVisible();
-+ await expect(page.getByRole("button", { name: "Run Database Check" })).toBeVisible();
-+ await expect(page.getByRole("button", { name: "Run Storage Check" })).toBeVisible();
-+ await expect(page.getByRole("button", { name: "Run Full Health Check" })).toBeVisible();
-+ const scheduledTable = page.getByRole("table", { name: "Scheduled health monitoring" });
-+ await expect(scheduledTable).toContainText("Last scheduled run");
-+ await expect(scheduledTable).toContainText("Next scheduled run");
-+ await expect(scheduledTable).toContainText("Duration");
-+ await expect(scheduledTable).toContainText("Recent result");
-+ await expect(scheduledTable).toContainText("Failures/warnings");
-+ await expect(scheduledTable).toContainText("Not Configured");
-+ const notificationsTable = page.getByRole("table", { name: "Notifications and alerts" });
-+ await expect(notificationsTable).toContainText("Email alerts");
-+ await expect(notificationsTable).toContainText("Admin notifications");
-+ await expect(notificationsTable).toContainText("Webhook alerts");
-+ await expect(notificationsTable).toContainText("Messages integration");
-+ await expect(notificationsTable).toContainText("Not Configured");
- await expect(page.getByRole("table", { name: "Local API startup diagnostics" })).toContainText("Approved diagnostics format");
- await expect(page.getByRole("table", { name: "Local API startup diagnostics" })).toContainText("Environment Variables + All Runtime Ports");
- await expect(page.getByRole("table", { name: "Local API startup diagnostics" })).toContainText("Configurable multiple runtime ports");
-@@ -164,6 +223,14 @@ test("Admin System Health renders Postgres diagnostics through the safe status A
- await expect(page.locator("[data-admin-system-health-storage-value='upload']")).toContainText("/dev");
- await expect(page.locator("[data-admin-system-health-storage-value='read']")).not.toHaveText("Health object");
- await expect(page.locator("[data-admin-system-health-storage-value='delete']")).not.toHaveText("Health object");
-+ await expect(page.getByRole("table", { name: "Runtime health" })).toContainText("Runtime Health");
-+ await expect(page.locator("[data-admin-system-health-runtime-health-value='environment']")).toHaveText("DEV");
-+ await expect(page.locator("[data-admin-system-health-runtime-health-value='appVersion']")).toHaveText("1.0.0");
-+ await expect(page.locator("[data-admin-system-health-runtime-health-value='apiVersion']")).toHaveText("1.0.0");
-+ await expect(page.locator("[data-admin-system-health-runtime-health-value='nodeVersion']")).toContainText("v");
-+ await expect(page.locator("[data-admin-system-health-runtime-health-value='serverStartTime']")).not.toHaveText("Loading");
-+ await expect(page.locator("[data-admin-system-health-runtime-health-value='uptime']")).toContainText("s");
-+ await expect(page.locator("[data-admin-system-health-runtime-health-value='lastChecked']")).not.toHaveText("Loading");
- const historyTable = page.getByRole("table", { name: "Health check history" });
- await expect(historyTable).toContainText("DEV");
- await expect(historyTable).toContainText("Environment Summary");
-@@ -210,6 +277,9 @@ test("Admin System Health renders Postgres diagnostics through the safe status A
- }
- expect(context.requestUrls.some((url) => url.includes("/api/admin/system-health/status"))).toBe(true);
- expect(context.requestUrls.filter((url) => url.includes("/api/admin/system-health/storage-connectivity-action"))).toHaveLength(5);
-+ await page.getByRole("button", { name: "Run Runtime Check" }).click();
-+ await expect(page.getByRole("table", { name: "Manual health action results" })).toContainText("Run Runtime Check");
-+ expect(context.requestUrls.some((url) => url.includes("/api/admin/system-health/action"))).toBe(true);
- await expectClientToHideSecretValues(page, context);
- await expect(page.locator("[data-admin-system-health-storage-action]")).toHaveCount(0);
- await expect(page.locator("[data-owner-ai-save], [data-owner-membership-save], [data-owner-ai-credits], [data-owner-memberships]")).toHaveCount(0);
-@@ -251,6 +321,16 @@ test("Admin System Health operations page keeps scripts and styles external", as
- expect(pageSource).not.toContain("SQLite");
- expect(pageSource).toContain("Environment Identity");
- expect(pageSource).toContain("Environment Map");
-+ expect(pageSource).toContain("Environment Capabilities");
-+ expect(pageSource).toContain("Health API Contract");
-+ expect(pageSource).toContain("Admin API Registry");
-+ expect(pageSource).toContain("Runtime Feature Flags");
-+ expect(pageSource).toContain("Service Health");
-+ expect(pageSource).toContain("Configuration Summary");
-+ expect(pageSource).toContain("Manual Health Actions");
-+ expect(pageSource).toContain("Scheduled Health Monitoring");
-+ expect(pageSource).toContain("Notifications & Alerts");
-+ expect(pageSource).toContain("Runtime Health");
- expect(pageSource).toContain("Diagnostics Plan");
- expect(pageSource).toContain("Local API Startup Diagnostics");
- expect(pageSource).toContain("Server-owned Postgres health reader");
-@@ -261,5 +341,6 @@ test("Admin System Health operations page keeps scripts and styles external", as
- expect(runtimeSource).not.toContain("SQLite");
- expect(runtimeSource).not.toContain("localStorage");
- expect(runtimeSource).not.toContain("sessionStorage");
-+ expect(runtimeSource).toContain("runAdminSystemHealthAction");
- expect(runtimeSource).toContain("runAdminSystemHealthStorageConnectivityAction");
- });
++- PASS: No runtime code changes.
++- PASS: No UI changes.
++- PASS: No API changes.
++- PASS: No database changes.
diff --git a/docs_build/dev/roadmaps/MASTER_ROADMAP_FEATURES.md b/docs_build/dev/roadmaps/MASTER_ROADMAP_FEATURES.md
index 71bfa6078..707b9242c 100644
--- a/docs_build/dev/roadmaps/MASTER_ROADMAP_FEATURES.md
+++ b/docs_build/dev/roadmaps/MASTER_ROADMAP_FEATURES.md
@@ -22,4 +22,36 @@ Track upcoming feature work at a high level without changing engine/tool contrac
### Track C - Closeout
- [ ] validate all acceptance criteria
- [ ] finalize status updates
-- [ ] archive supporting reports
\ No newline at end of file
+- [ ] archive supporting reports
+
+## System Health v1 Closeout
+
+Status: complete through GitHub PR #158.
+
+### Completed Charlie 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
+
+These items are not authorized as new Team Charlie System Health feature PRs
+unless Owner creates a new phase.