Skip to content

Commit 8f81c7c

Browse files
committed
Retain real admin dashboard browser screenshots in CI
1 parent aed338c commit 8f81c7c

4 files changed

Lines changed: 17 additions & 10 deletions

File tree

‎README.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ Public HTTP admission reserves capacity before JSON deserialization and shares a
4747

4848
## Administration console
4949

50-
The runtime console is served at `/admin` on each database HTTP endpoint, for example `http://localhost:5101/admin` with the local Aspire profile. Connect with a persisted administrator API key, then enter the tenant, database and atomic partition key when browsing collections, queues or published blob metadata. The read-only console shows physical canonical/replica/backup file lengths, node status, admission occupancy and measured process HTTP throughput. It never receives or acknowledges queue messages, and credentials remain only in tab memory. See [AdminDashboard](docs/Features/AdminDashboard.md) for the contract and current qualification gates; source implementation and visual review are present, while exact-source GitHub RF3/browser and numeric coverage qualification remain pending.
50+
The runtime console is served at `/admin` on each database HTTP endpoint, for example `http://localhost:5101/admin` with the local Aspire profile. Connect with a persisted administrator API key, then enter the tenant, database and atomic partition key when browsing collections, queues or published blob metadata. The read-only console shows physical canonical/replica/backup file lengths, node status, admission occupancy and measured process HTTP throughput. It never receives or acknowledges queue messages, and credentials remain only in tab memory. See [AdminDashboard](docs/Features/AdminDashboard.md) for the contract and exact GitHub evidence: its real RF3 API/native browser cases pass; retained screenshots, complete workflow and numeric coverage gates remain pending.
5151

5252
## .NET client
5353

‎docs/Features/AdminDashboard.md‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,12 @@ Manual exception: subjective visual polish is inspected via desktop/mobile scree
8080

8181
REQ/AC-AD-001..007 map to ADR-051 and tasks AD-C (shared integration), AD-B (backend), AD-U (UI), AD-T (tests) and AD-J (lead review/delivery). The requirement table and criterion-to-test matrix identify the automated owning suites. The subjective design exception requires desktop and mobile visual review; no functional or numeric gate is waived.
8282

83-
Latest completed candidate: exact `1bee2609ff0de620640f304e2e42eb2859716646`, [CI run 37036628601](https://github.com/managedcode/KeyLoad/actions/runs/37036628601). Build, format, governance and analyzer/source-inventory checks passed on all three operating systems. Every OS passed 805/805 unit tests, including 13/13 AdminDashboard cases, zero skipped. All 6 RF3 AdminDashboard API cases passed, including exact shell GET/HEAD/redirect/auth protection, SDK/MCP catalog/queue parity, physical observations and persisted revocation/expiry. The browser passed shell/connection, overlap, reduced motion, background suspension and catalog navigation before failing the first document-row wait. Its UI sent an invalid empty AST projection; the source repair uses the existing standard wildcard selection and strengthens the actual seeded row/title assertion. No browser PNG was produced; full browser qualification awaits the repaired exact-SHA run. Three independent EventStreams canonical-JSON oracle failures, process recovery and comparison gates also keep the complete workflow failed.
83+
Latest RF3 candidate: exact `aed338c6435d6edc411049e2a4052cddab5bb285`, [CI run 37038422388](https://github.com/managedcode/KeyLoad/actions/runs/37038422388). All 6 AdminDashboard API cases and the complete native Chrome case passed, zero skipped. This qualifies real catalog/document/queue browsing, JSON text safety, desktop/mobile overflow, persisted revocation/expiry, disconnect/reconnect, one concurrent refresh, reduced motion and background suspension through actual Docker/Aspire RF3. Downloaded reports confirm 805/805 unit tests, including 13/13 dashboard cases, on all three operating systems. RF3 overall is 35/36 because an independently owned leader-loss restart scenario fails at Aspire node2 startup. Retained browser images still await TASK-AD-T3 below.
84+
85+
Earlier exact `1bee2609ff0de620640f304e2e42eb2859716646`, [CI run 37036628601](https://github.com/managedcode/KeyLoad/actions/runs/37036628601), passed 805/805 unit tests, including 13/13 dashboard cases, on all three OSes with zero skipped. It exposed the empty AST projection in the browser; the standard wildcard repair and exact seeded-row assertion now pass. Independent EventStreams canonical-JSON oracle repairs also pass in the latest RF3 candidate. Complete recovery, fault, comparison and numeric coverage qualification remains open; successful feature cases do not close those gates.
8486

8587
The previous exact `b533c80a128a85c6e2072de3bc011a09d4a97cc7`, [CI run 37032546228](https://github.com/managedcode/KeyLoad/actions/runs/37032546228), exposed slash-equivalent routes and fixture epoch/time defects; those repairs are now qualified by the latest candidate. Native logging lifecycle and complete 50-tool discovery regressions also pass in the latest candidate. Actual receipts are retained under ignored `artifacts/qualification/admin-dashboard/37036628601/`.
8688

89+
TASK-AD-T3 preserves AC-AD-006/007: exact `aed338c6435d6edc411049e2a4052cddab5bb285`, [CI run 37038422388](https://github.com/managedcode/KeyLoad/actions/runs/37038422388), passed all 6 API cases and the complete native Chrome case, zero skipped. Screenshots were written relative to the test process working directory and missed the checkout-root upload glob. One worker owns only AdminBrowserAssertions.cs and uses the existing shared FindRepositoryRoot helper for the same evidence directory. Capture, viewport, assertion, test command and workflow semantics stay unchanged; ADR-051 remains sufficient. Actual downloaded desktop/mobile PNGs and lead visual review are required before the subjective artifact criterion closes. RF3 overall is 35/36 due to an independently owned leader-loss restart failure.
90+
8791
The earlier exact `49a5b6054843800e20e333ddaa28fa96d79dd294`, [CI run 37029344985](https://github.com/managedcode/KeyLoad/actions/runs/37029344985), stopped before runtime tests at compiler/analyzer errors; later source fixes compile. Downloaded candidate receipts are retained under ignored `artifacts/qualification/admin-dashboard/37032546228/`. Root thresholds require numeric coverage, but no MTP/TUnit collector or baseline is configured: coverage remains an open gate. No local tests were executed. ADR-051 remains Accepted while required qualification is incomplete.

‎docs/implementation/status.json‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1222,14 +1222,14 @@
12221222
],
12231223
"manualDesignReview": "desktop_1280x720_and_mobile_390x844_disconnected_real_shell_inspected_2026_10_02_only_subjective_design",
12241224
"localTestsExecuted": false,
1225-
"qualification": "805_unit_and_13_dashboard_unit_pass_each_OS_all_6_RF3_admin_API_pass_browser_invalid_AST_projection_repair_pending_exact_source_requalification",
1225+
"qualification": "all_6_RF3_admin_API_and_complete_native_Chrome_pass_all_OS_unit_steps_pass_retained_PNG_and_full_recovery_fault_comparison_coverage_gates_pending",
12261226
"coverage": "required_thresholds_preserved_collector_and_actual_result_not_yet_available",
12271227
"candidateRun": {
1228-
"id": 37036628601,
1229-
"sha": "1bee2609ff0de620640f304e2e42eb2859716646",
1230-
"url": "https://github.com/managedcode/KeyLoad/actions/runs/37036628601",
1231-
"conclusion": "failure_805_of_805_unit_each_OS_13_dashboard_unit_each_OS_all_6_RF3_admin_API_pass_browser_row_wait_error_and_three_EventStreams_oracle_failures_no_skips",
1232-
"artifacts": "artifacts/qualification/admin-dashboard/37036628601/"
1228+
"id": 37038422388,
1229+
"sha": "aed338c6435d6edc411049e2a4052cddab5bb285",
1230+
"url": "https://github.com/managedcode/KeyLoad/actions/runs/37038422388",
1231+
"conclusion": "RF3_failure_35_of_36_all_7_dashboard_API_and_browser_pass_no_skips_independent_node2_leader_restart_failure_PNG_root_fix_pending",
1232+
"artifacts": "artifacts/qualification/admin-dashboard/37038422388/"
12331233
},
12341234
"baselineRun": {
12351235
"id": 37028314087,

‎tests/KeyLoad.IntegrationTests/Features/AdminDashboard/AdminBrowserAssertions.cs‎

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Text.Json;
2+
using KeyLoad.IntegrationTests.Features.ClusterReplication;
23

34
namespace KeyLoad.IntegrationTests.Features.AdminDashboard;
45

@@ -44,9 +45,11 @@ internal static async Task CheckViewportAsync(AdminBrowserCdp browser, int width
4445
await browser.CommandAsync(AdminBrowserProtocol.SetMetrics,
4546
new { width, height = AdminBrowserProtocol.Height, deviceScaleFactor = 1, mobile = width == AdminBrowserProtocol.MobileWidth }, cancellationToken);
4647
await Assert.That((await browser.EvaluateAsync(NoOverflow, cancellationToken)).GetBoolean()).IsTrue();
47-
Directory.CreateDirectory(AdminBrowserProtocol.EvidenceDirectory);
48+
var outputDirectory = Path.Combine(ClusterFixtureDiagnostics.FindRepositoryRoot().FullName,
49+
AdminBrowserProtocol.EvidenceDirectory);
50+
Directory.CreateDirectory(outputDirectory);
4851
var reply = await browser.CommandAsync(AdminBrowserProtocol.CaptureScreenshot, new { format = "png" }, cancellationToken);
49-
await File.WriteAllBytesAsync(Path.Combine(AdminBrowserProtocol.EvidenceDirectory, name + ".png"),
52+
await File.WriteAllBytesAsync(Path.Combine(outputDirectory, name + ".png"),
5053
Convert.FromBase64String(reply.GetProperty(ScreenshotData).GetString()!), cancellationToken);
5154
}
5255

0 commit comments

Comments
 (0)