Skip to content

Commit b8f5cda

Browse files
committed
Add infrastructure page, promotion safety validation, and Project Workspace DB integration - PR_26168_215-through-217-admin-promotion-workspace-stack
1 parent da1e6bb commit b8f5cda

49 files changed

Lines changed: 96749 additions & 46253 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

admin/infrastructure.html

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
<!doctype html>
2+
<html lang="en">
3+
4+
<head>
5+
<meta charset="utf-8">
6+
<base href="/">
7+
<meta name="viewport" content="width=device-width, initial-scale=1">
8+
<title>Infrastructure - Game Foundry Studio LLC</title>
9+
<meta name="description" content="Admin infrastructure reference for project asset storage paths and owner operations status surfaces.">
10+
<link rel="icon" href="/favicon.svg">
11+
<link rel="stylesheet" href="assets/theme-v2/css/theme.css">
12+
</head>
13+
14+
<body class="meaning-molten-orange">
15+
<div data-partial="header-nav"></div>
16+
<main data-admin-only="true" data-admin-wireframe="infrastructure">
17+
<section class="page-title">
18+
<div class="container">
19+
<div class="kicker">Admin</div>
20+
<h1>Infrastructure</h1>
21+
<p class="lede">Review the current infrastructure reference, project storage paths, and linked operational status surfaces.</p>
22+
</div>
23+
</section>
24+
<section class="section">
25+
<div class="container container--tool-wide">
26+
<div class="tool-workspace tool-workspace--wide">
27+
<aside class="tool-column tool-group-platform">
28+
<div class="tool-column-header">
29+
<h2>Admin</h2>
30+
</div>
31+
<div class="accordion-stack">
32+
<details class="vertical-accordion" open>
33+
<summary>Admin Tools</summary>
34+
<nav class="accordion-body content-stack" aria-label="Admin tool pages" data-admin-tool-menu>
35+
<a class="btn btn--compact primary" aria-current="page" href="/admin/infrastructure.html">Infrastructure</a>
36+
<a class="btn btn--compact" href="/admin/platform-settings.html">Platform Settings</a>
37+
<a class="btn btn--compact" href="/admin/tool-votes.html">Tool Votes</a>
38+
<a class="btn btn--compact" href="/admin/users.html">Users</a>
39+
</nav>
40+
</details>
41+
<details class="vertical-accordion" open>
42+
<summary>Storage Paths</summary>
43+
<div class="accordion-body content-stack">
44+
<p>/dev/projects/</p>
45+
<p>/ist/projects/</p>
46+
<p>/uat/projects/</p>
47+
<p>/prod/projects/</p>
48+
</div>
49+
</details>
50+
</div>
51+
</aside>
52+
<div data-tool-display-mode data-asset-root="assets/theme-v2/images" data-tool-slug="admin-infrastructure" data-tool-icon-src="assets/theme-v2/images/image-missing.svg" data-tool-character-src="assets/theme-v2/images/image-missing.svg"></div>
53+
<section class="tool-center-panel content-stack" aria-labelledby="admin-infrastructure-title">
54+
<div>
55+
<div class="kicker">Reference</div>
56+
<h2 id="admin-infrastructure-title">Game Foundry Infrastructure</h2>
57+
</div>
58+
<figure class="content-stack">
59+
<img src="assets/GFS-Infrastructure v1-3.png" alt="Game Foundry Studio infrastructure diagram version 1-3">
60+
<figcaption>GFS-Infrastructure v1-3.png</figcaption>
61+
</figure>
62+
<div class="table-wrapper">
63+
<table class="data-table" aria-label="Project storage path reference">
64+
<caption>Project Asset Storage Paths</caption>
65+
<thead>
66+
<tr>
67+
<th scope="col">Lane</th>
68+
<th scope="col">Path</th>
69+
</tr>
70+
</thead>
71+
<tbody>
72+
<tr><td>DEV</td><td>/dev/projects/</td></tr>
73+
<tr><td>IST</td><td>/ist/projects/</td></tr>
74+
<tr><td>UAT</td><td>/uat/projects/</td></tr>
75+
<tr><td>PROD</td><td>/prod/projects/</td></tr>
76+
</tbody>
77+
</table>
78+
</div>
79+
</section>
80+
<aside class="tool-column tool-group-platform">
81+
<div class="tool-column-header">
82+
<h2>Inspector</h2>
83+
</div>
84+
<div class="accordion-stack">
85+
<details class="vertical-accordion" open>
86+
<summary>Status Surfaces</summary>
87+
<div class="accordion-body content-stack">
88+
<a class="btn btn--compact" href="/owner/operations.html">Database Status</a>
89+
<a class="btn btn--compact" href="/owner/operations.html">Storage Status</a>
90+
<a class="btn btn--compact" href="/owner/operations.html">Owner Operations</a>
91+
<a class="btn btn--compact" href="/owner/operations.html">Promotion Foundation</a>
92+
</div>
93+
</details>
94+
<details class="vertical-accordion" open>
95+
<summary>Guardrails</summary>
96+
<div class="accordion-body content-stack">
97+
<p>Infrastructure status remains a read-only Admin reference.</p>
98+
<p>Operational actions and connection validation stay on Owner Operations.</p>
99+
</div>
100+
</details>
101+
</div>
102+
</aside>
103+
</div>
104+
</div>
105+
</section>
106+
</main>
107+
<div data-partial="footer"></div>
108+
<script src="assets/theme-v2/js/gamefoundry-partials.js" defer></script>
109+
<script src="assets/theme-v2/js/tool-display-mode.js" defer></script>
110+
</body>
111+
112+
</html>

admin/platform-settings.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ <h2>Admin</h2>
3232
<details class="vertical-accordion" open>
3333
<summary>Admin Tools</summary>
3434
<nav class="accordion-body content-stack" aria-label="Admin tool pages" data-admin-tool-menu>
35+
<a class="btn btn--compact" href="/admin/infrastructure.html">Infrastructure</a>
3536
<a class="btn btn--compact primary" aria-current="page" href="/admin/platform-settings.html">Platform Settings</a>
3637
<a class="btn btn--compact" href="/admin/tool-votes.html">Tool Votes</a>
3738
<a class="btn btn--compact" href="/admin/users.html">Users</a>

admin/tool-votes.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ <h2>Admin</h2>
3232
<details class="vertical-accordion" open>
3333
<summary>Admin Tools</summary>
3434
<nav class="accordion-body content-stack" aria-label="Admin tool pages" data-admin-tool-menu>
35+
<a class="btn btn--compact" href="/admin/infrastructure.html">Infrastructure</a>
3536
<a class="btn btn--compact" href="/admin/platform-settings.html">Platform Settings</a>
3637
<a class="btn btn--compact primary" aria-current="page" href="/admin/tool-votes.html">Tool Votes</a>
3738
<a class="btn btn--compact" href="/admin/users.html">Users</a>

admin/users.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ <h2>Admin</h2>
3232
<details class="vertical-accordion" open>
3333
<summary>Admin Tools</summary>
3434
<nav class="accordion-body content-stack" aria-label="Admin tool pages" data-admin-tool-menu>
35+
<a class="btn btn--compact" href="/admin/infrastructure.html">Infrastructure</a>
3536
<a class="btn btn--compact" href="/admin/platform-settings.html">Platform Settings</a>
3637
<a class="btn btn--compact" href="/admin/tool-votes.html">Tool Votes</a>
3738
<a class="btn btn--compact primary" aria-current="page" href="/admin/users.html">Users</a>

assets/theme-v2/js/owner-operations.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,9 +104,10 @@ class OwnerOperationsController {
104104
step.stage || "Unknown",
105105
step.operation || "Planning",
106106
step.status || "PLAN",
107+
`${step.safetyStatus || "WARN"}: ${step.safetyDiagnostic || promotionFoundation.safetyMessage || "Promotion safety validation unavailable."}`,
107108
`${promotionFoundation.ownerOnly === true ? "Owner-only" : "Restricted"}; ${promotionFoundation.browserExecutionAllowed === false ? "browser execution disabled" : "browser execution unknown"}; ${promotionFoundation.destructiveOperationsAllowed === false ? "destructive operations disabled" : "destructive operations unknown"}; ${step.message || promotionFoundation.message || "Promotion foundation planning."}`,
108109
])
109-
: [["DEV/UAT/PROD", "Planning", promotionFoundation.status || "WARN", promotionFoundation.message || "Promotion foundation status unavailable."]];
110+
: [["DEV/UAT/PROD", "Planning", promotionFoundation.status || "WARN", promotionFoundation.safetyMessage || "Promotion safety validation unavailable.", promotionFoundation.message || "Promotion foundation status unavailable."]];
110111
this.promotionFoundationRows.replaceChildren();
111112
rows.forEach((row) => {
112113
const tableRow = document.createElement("tr");
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# PR_26168_215-admin-infrastructure-page
2+
3+
## Branch Validation
4+
5+
PASS - current branch was verified as `main` before edits.
6+
7+
## Scope Summary
8+
9+
- Added `admin/infrastructure.html` as a Theme V2 Admin page.
10+
- Registered the page in the Local API Admin navigation contract.
11+
- Added the Infrastructure link to existing Admin tool side menus.
12+
- Added targeted Playwright coverage for the new page and static safety expectations.
13+
14+
## Requirement Checklist
15+
16+
| Requirement | Status | Evidence |
17+
| --- | --- | --- |
18+
| Add Admin -> Infrastructure page | PASS | `admin/infrastructure.html` added and registered as `admin-infrastructure`. |
19+
| Display only `assets/GFS-Infrastructure v1-3.png` | PASS | Page references `assets/GFS-Infrastructure v1-3.png`; targeted test asserts a single v1-3 image. |
20+
| Do not display `assets/GFS-Infrastructure v1-2.png` | PASS | Static search found no v1-2 reference in the page; targeted test asserts page body does not contain the v1-2 name. |
21+
| Make storage paths visible | PASS | Page shows `/dev/projects/`, `/ist/projects/`, `/uat/projects/`, and `/prod/projects/` in the side panel and table. |
22+
| Link or reference Database Status, Storage Status, Owner Operations, Promotion foundation | PASS | Inspector links all four labels to `/owner/operations.html`. |
23+
| Use Theme V2 only | PASS | Page uses `assets/theme-v2/css/theme.css` and Theme V2 workspace classes. |
24+
| No inline styles, script blocks, style blocks, or inline event handlers | PASS | Static validation returned no matches for inline style/script/event handlers. |
25+
| Keep PR independently scoped, reportable, and testable | PASS | Changes are limited to the Admin infrastructure page, Admin navigation/menu entries, and targeted tests. |
26+
27+
## Validation Lane Report
28+
29+
- PASS - `node --check .\src\dev-runtime\server\local-api-router.mjs`
30+
- PASS - `node --check .\tests\playwright\tools\AdminPlatformToolsWireframes.spec.mjs`
31+
- PASS - static inline guard: `Select-String -Path admin/infrastructure.html -Pattern '<script(?![^>]*\bsrc=)|<style\b|\sstyle=|\son[a-z]+\s='`
32+
- PASS - static asset/path evidence: `Select-String -Path admin/infrastructure.html -Pattern 'GFS-Infrastructure v1-3.png|GFS-Infrastructure v1-2.png|/dev/projects/|/ist/projects/|/uat/projects/|/prod/projects/'`
33+
- PASS - `npx playwright test tests/playwright/tools/AdminPlatformToolsWireframes.spec.mjs -g "Infrastructure Admin wireframe"` (1 passed)
34+
35+
## Playwright V8 Coverage
36+
37+
PASS - targeted Playwright run updated `docs_build/dev/reports/playwright_v8_coverage_report.txt` for changed runtime JavaScript coverage reporting.
38+
39+
## Manual Validation Notes
40+
41+
- Confirmed the new page is static and has no page-specific browser module.
42+
- Confirmed the page uses the v1-3 infrastructure diagram only.
43+
- Confirmed status references point to Owner Operations, keeping operational actions outside the Admin page.
44+
45+
## Full Samples Run/Skip Decision
46+
47+
SKIP - full samples smoke was not run. This PR changes an Admin reference page, Admin navigation registration, and targeted Playwright coverage only; no sample runtime surface was directly impacted.
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# PR_26168_216-promotion-safety-validation
2+
3+
## Branch Validation
4+
5+
PASS - current branch was verified as `main` before edits.
6+
7+
## Scope Summary
8+
9+
- Added visible promotion safety validation to Owner Operations.
10+
- Reported Export and Validate as read-only safety checks.
11+
- Reported Import overwrite risk as a visible FAIL diagnostic until explicit overwrite confirmation exists.
12+
- Kept all promotion actions Owner-only, manual-only, and non-destructive.
13+
14+
## Requirement Checklist
15+
16+
| Requirement | Status | Evidence |
17+
| --- | --- | --- |
18+
| Add visible promotion safety validation/reporting around Export, Import, and Validate | PASS | Owner Operations promotion table now includes a `Safety Validation` column populated from the server payload. |
19+
| Import must not overwrite an existing project unless explicit confirmation exists | PASS | Server payload sets `importOverwriteAllowed: false` and `overwriteConfirmationImplemented: false`. |
20+
| If overwrite confirmation is not implemented, import overwrite must fail visibly with actionable diagnostics | PASS | UAT and PROD Import rows show `FAIL: Overwrite confirmation is not implemented; ... must fail visibly before any write.` |
21+
| Do not add destructive promotion behavior | PASS | Existing action route remains manual-only and returns `executed: false` for promotion actions. |
22+
| Keep promotion Owner-only | PASS | Owner Operations status/action routes still require Owner session; targeted non-owner Playwright test passed. |
23+
| Keep PR independently scoped, reportable, and testable | PASS | Changes are limited to Owner Operations promotion status payload, table rendering, and targeted tests. |
24+
25+
## Validation Lane Report
26+
27+
- PASS - `node --check .\assets\theme-v2\js\owner-operations.js`
28+
- PASS - `node --check .\src\dev-runtime\server\local-api-router.mjs`
29+
- PASS - `node --check .\tests\playwright\tools\AdminPlatformToolsWireframes.spec.mjs`
30+
- PASS - static inline guard: `Select-String -Path owner/operations.html -Pattern '<script(?![^>]*\bsrc=)|<style\b|\sstyle=|\son[a-z]+\s='`
31+
- PASS - safety evidence search found `Safety Validation`, `Overwrite confirmation`, `fail visibly`, and `importOverwritePolicy`.
32+
- PASS - `npx playwright test tests/playwright/tools/AdminPlatformToolsWireframes.spec.mjs -g "Owner Operations exposes owner-only connection validation"` (1 passed)
33+
- PASS - `npx playwright test tests/playwright/tools/AdminPlatformToolsWireframes.spec.mjs -g "Owner Operations blocks signed-in non-owner users"` (1 passed)
34+
35+
## Playwright V8 Coverage
36+
37+
PASS - targeted Playwright runs updated `docs_build/dev/reports/playwright_v8_coverage_report.txt` for changed runtime JavaScript coverage reporting.
38+
39+
## Manual Validation Notes
40+
41+
- Confirmed Import rows fail visibly in the safety column while Export and Validate remain read-only.
42+
- Confirmed promotion action buttons still return manual-only `SKIP` results and do not execute destructive behavior.
43+
- Confirmed Owner-only enforcement remains active for non-owner users.
44+
45+
## Full Samples Run/Skip Decision
46+
47+
SKIP - full samples smoke was not run. This PR affects the Owner Operations promotion status/reporting surface only, and targeted Owner Operations validations covered the changed behavior.

0 commit comments

Comments
 (0)