Demo controls
+Lab controls
Demo controls
Demo controls
Enterprise Lab Cockpit Monitor
++ Strict local lab monitor for controlled scenario validation, reviewer trust, operator interpretation, + and pre-production evidence review. This is lab-bounded proof, not production monitoring. +
+No previous lab scenario has been captured yet.
+Run Compare strategies to capture local lab API status.
+Not run.
+Not run.
+Run Compare strategies to inspect selected backend health state.
+Run Compare strategies to summarize visible lab signals.
+Run Compare strategies to compare lab scenario deltas.
+Static reviewer guidance remains available before a lab run.
++ /routing-demo.html -> /enterprise-lab-reviewer.html -> /operator-evidence-dashboard.html -> /evidence-timeline.html -> /evidence-export-packet.html +
+Reviewer packet handoff is browser-local; run the lab comparison before treating the proof note as ready.
+Controlled lab evidence only: same-origin local API responses, visible local payloads, and browser-local copy actions.
+No production traffic proof, production telemetry proof, live cloud proof, real tenant proof, SLA/SLO proof, registry publication proof, container signing proof, or production certification claim.
++ Copy boundary: the lab monitor explanation is assembled in the browser from visible local lab state only; + no server-side export/PDF/ZIP generation, no upload/share endpoint, no external calls, and no telemetry. +
+Copyable lab monitor explanation
+No previous lab scenario has been captured yet. Load a controlled lab scenario and run Compare strategies to generate the lab monitor explanation.+
Reviewer Workflow Checklist
@@ -351,8 +424,8 @@Reviewer Workflow Checklist
Start with the packaged synthetic scenario so routing inputs are repeatable for review.
+ 1. Load controlled lab scenario +Start with the packaged controlled lab scenario so routing inputs are repeatable for review.
Reviewer Workflow Checklist
no server-side export/PDF/ZIP generation, and no external services.Copyable end-to-end reviewer walkthrough
-Load the sample scenario and run Compare strategies to generate the end-to-end reviewer walkthrough.+
Load the controlled lab scenario and run Compare strategies to generate the end-to-end reviewer walkthrough.
Reviewer Confidence Signals
The page uses localhost commands and packaged synthetic inputs so reviewers can rerun the same local workflow.
+The page uses localhost commands and packaged controlled lab inputs so reviewers can rerun the same local workflow.
Packaged server names, weights, health states, load, and latency fields make the baseline scenario inspectable.
Reviewer Confidence Signals
Local/demo evidence only: no production traffic proof, no live cloud proof, no real tenant proof, no registry publication proof, and no container signing proof.
+Controlled lab evidence only: no production traffic proof, no production telemetry proof, no live cloud proof, no real tenant proof, no registry publication proof, and no container signing proof.
Evidence Associations
Load the sample scenario and run Compare strategies to associate the visible scenario with a local routing decision.
+Load the controlled lab scenario and run Compare strategies to associate the visible lab scenario with a local routing decision.
Evidence Associations
Run Compare strategies to connect the selected backend/server to visible local/demo metrics.
+Run Compare strategies to connect the selected backend/server to visible controlled lab metrics.
Evidence Associations
- Association boundary: local/demo evidence only; no production traffic proof, no live cloud proof, + Association boundary: controlled lab evidence only; no production traffic proof, no production telemetry proof, no live cloud proof, no real tenant proof, no registry publication proof, no container signing proof, and no production certification claim.
@@ -474,62 +547,158 @@
Evidence Associations
no upload/share endpoint, no server-side export/PDF/ZIP generation, and no external calls.Copyable evidence association summary
-Static guidance remains available before running a scenario. Evidence links are available even before running a scenario. Load the sample scenario and run Compare strategies to generate an evidence association summary.+
Static reviewer guidance remains available before a lab run. Evidence links remain available before a lab run, but they do not certify production behavior. Load the controlled lab scenario and run Compare strategies to generate an evidence association summary.
How This Proof Works
- Reviewer/operator answers for common routing-proof questions. +How This Routing Decision Was Made
+ Reviewer/operator answers for controlled lab routing-proof questions.The first returned comparison result is the primary controlled lab decision. It names the selected backend/server, includes returned reason text, and should be read against the visible candidate list.
+The selected strategy applies its routing behavior to visible local lab candidates; exact production scoring is not claimed unless exposed by the API.
+The cockpit explains visible input signals from the local lab response: backend health, latency, load, active connections, capacity, weight, error rate, queue depth, and network-awareness fields when present.
+The first returned strategy is the primary local comparison result; its routing rule ranks the visible candidate servers and returns the selected backend/server plus reason text.
+ How should reviewers interpret close candidates? +If multiple candidates appear close, compare returned reason text and visible signals; the cockpit explains observable lab evidence and does not invent hidden scoring.
Health, in-flight load, configured weight/capacity, p95 latency, error rate, queue depth, and network-awareness fields are summarized from the visible payload so reviewers can inspect why a backend was preferred or avoided.
+ How should unchanged backend with changed signals be read? +The selected backend is unchanged, but visible lab signals changed; review the strategy reason and signal deltas before treating the result as equivalent.
Deltas are browser-local summaries comparing packaged baseline metrics against the current editor payload: candidate count, healthy/unhealthy count, total in-flight load, max p95 latency, max error rate, and queue depth.
+ How should changed backend with same strategy be read? +Backend changed but strategy stayed the same: visible health, load, latency, queue, capacity, or weight shifts can change which candidate the same strategy prefers.
Unhealthy backends are counted from healthy=false; all-unhealthy payloads are called out as a degradation boundary, while fewer unhealthy backends than the baseline are described as recovery.
Strategy changed but backend stayed the same: multiple strategies can still prefer the same controlled lab candidate.
Run mvn spring-boot:run, open this page, load the sample scenario, run Compare strategies, and compare the visible response with the copyable curl and proof notes.
Unhealthy backends are counted from healthy=false; all-unhealthy payloads are treated as a degradation boundary, not production proof.
The routing page explains the request-level decision; reviewer, operator, timeline, and export packet pages provide navigation, evidence locations, history context, and handoff text.
+ How does recovery change the evidence story? +Recovery is represented when visible lab inputs show fewer unhealthy candidates or reduced pressure compared with the packaged baseline; it remains controlled lab evidence.
Use the copied association summary as a reviewer note that points to visible local proof and evidence pages; it is not an audit artifact created by the server.
+ What can this controlled lab run prove? +It can prove local reproducibility, same-origin compare API behavior, visible routing explanation, local scenario deltas, evidence association path, and browser-local reviewer handoff text.
Local/demo proof uses synthetic payloads, same-origin local API responses, and browser-local notes; it does not prove production traffic, live cloud behavior, real tenant behavior, registry publication, container signing, or production certification.
+ What can it not prove for production? +It does not prove production traffic, production telemetry, live cloud behavior, real tenant behavior, SLA/SLO, registry publication, container signing, or production certification.
Edge-case reading guide
+What This Lab Needs to Monitor
+Monitor healthy/unhealthy state, selected backend availability, and whether alternatives were avoided because they were unhealthy or degraded.
+Monitor p95 latency, in-flight load, queue depth, configured capacity, estimated concurrency, and weight when exposed by the local lab payload.
+Monitor whether all backends are unhealthy, whether fallback guidance is visible, and whether scenario deltas show recovery from the baseline.
+Monitor the returned strategy/backend pair plus alternatives and reason text where the same-origin local API exposes it.
+Monitor previous/current lab scenario names, strategy changes, backend changes, input signal changes, and degradation/recovery explanations.
+Monitor whether reproduction steps, evidence association links, timeline, and export packet handoff are ready for reviewer use.
+These are the signals a lab cockpit should monitor before production claims are possible; this page does not claim live production telemetry exists.
+How Strategy Choice Matters
+Strategy choice can alter how visible lab candidates are evaluated, but exact production scoring is not claimed unless exposed by the API.
+The same backend can remain preferred if multiple strategies still select the same healthy local lab candidate.
+The same strategy can select a different backend when visible lab signals shift enough to change the preferred candidate.
+Cockpit explanations are controlled lab guidance and reviewer evidence, not production certification.
+How Evidence Supports the Decision
+It shows selected strategy, selected backend/server, visible input signals, and local lab boundary for the current comparison.
+It summarizes previous/current lab scenario names, strategy/backend deltas, signal deltas, and degradation or recovery notes.
+Associations connect routing proof to reviewer dashboard, operator evidence dashboard, evidence timeline, and export packet handoff.
+The timeline shows evidence flow/history, and the export packet is a local reviewer handoff, not server-generated certification.
+How to Reproduce and Explain This Lab Proof
+-
+
- Choose or load a controlled lab scenario. +
- Run routing comparison against the same-origin local
/api/routing/compareendpoint.
+ - Inspect selected strategy and selected backend/server. +
- Inspect visible input signals: health, latency, load, active connections, capacity, weight, errors, queue depth, and network-awareness fields when present. +
- Compare scenario deltas for strategy/backend changes, signal changes, and degradation/recovery interpretation. +
- Read lab edge-case and fallback guidance. +
- Follow evidence association links to reviewer dashboard, operator evidence dashboard, evidence timeline, and evidence export packet. +
- Copy proof, walkthrough, association, and lab monitor summaries from visible browser text. +
- Open timeline/export packet, then print/copy/export the browser-local reviewer packet. +
- Record what is proven in the lab and what is not proven for production. +
How to Read Lab Edge Cases
-
-
- No previous scenario has been captured yet; the packaged normal-load baseline remains the static reference. -
- Same scenario run twice or unchanged from baseline: strategy order and input signal totals should read as unchanged. -
- Selected backend unchanged but signals changed: review the strategy reason and visible scores/signals before treating the decision as equivalent. +
- Page loaded before interaction: static reviewer guidance remains available before a lab run. +
- No previous lab scenario has been captured yet. +
- Same lab scenario run twice or unchanged from baseline: strategy order and input signal totals should read as unchanged. +
- The selected backend is unchanged, but visible lab signals changed. +
- Backend changed but strategy stayed the same: visible lab signal deltas likely changed which candidate the same strategy preferred.
- Strategy changed but backend stayed the same: the selected backend can remain preferred under multiple routing methods. -
- Backend changed but strategy stayed the same: input signal deltas likely changed which candidate the same strategy preferred. -
- All unhealthy/degraded scenario: every visible backend is unhealthy, so the page should show a degradation boundary instead of production proof. -
- Missing or empty comparison response: Local API returned an empty comparison response; static guidance remains available. -
- API error or unavailable local server: Local API response unavailable; static guidance remains available. -
- Copy-to-clipboard failure fallback: Copy failed; select the visible text and copy manually. -
- Static page loaded without prior interaction: static guidance and evidence links remain available before running a scenario. +
- All backends unhealthy/degraded: every visible backend is unhealthy, so treat the result as a degradation boundary instead of production proof. +
- Empty comparison response: The local lab API returned an empty comparison response; static reviewer guidance remains available. +
- Local API unavailable/error: The local lab API response is unavailable; static reviewer guidance remains available. +
- Clipboard copy failure: Copy failed; use the visible lab explanation as the fallback. +
- Evidence links available before running a scenario: Evidence links remain available before a lab run, but they do not certify production behavior. +
- Reviewer packet available as local/browser handoff, not server certification.
Edge-case reading guide
Association Legend
- How to read this proof without turning demo evidence into a production claim. + How to read this proof without turning controlled lab evidence into a production claim.The current request editor payload is the synthetic local state under review.
+ scenario = controlled lab input state +The current request editor payload is the synthetic local lab state under review.
The first routing comparison result identifies the method returned by the local compare endpoint.
The selected backend/server is a local candidate in the visible request and response pair.
Signals are visible health, load, latency, error, queue, and network-awareness fields.
Association Legend
Routing Proof Summary
The sample includes an unhealthy candidate so reviewers can verify it is not selected.
+The controlled lab payload includes an unhealthy candidate so reviewers can verify it is not selected.
Same-origin local API calls, synthetic request payloads, browser-only summaries, and no external services.
+ Local lab boundary +Same-origin local API calls, controlled lab request payloads, browser-only summaries, and no external services.
Scenario Comparison
The baseline keeps one unhealthy backend visible so reviewers can compare degradation or recovery edits.
Browser-local comparison of synthetic payloads and same-origin local API results only; no production traffic, live cloud validation, real tenant data, uploads, or server-side export/PDF/ZIP generation.
+ Local lab-only boundary +Browser-local comparison of controlled lab payloads and same-origin local API results only; no production traffic, production telemetry, live cloud validation, real tenant data, uploads, or server-side export/PDF/ZIP generation.
Copyable scenario comparison
-Run Compare strategies or edit the sample payload to generate scenario comparison text.+
Run Compare strategies or edit the controlled lab payload to generate scenario comparison text.
6. Safety limitations
-
-
- Local/operator demo only. +
- Local Enterprise Lab cockpit only.
- Not certification.
- Not benchmark proof.
- Not legal compliance proof.
- Not identity proof.
- No cloud mutation. -
- No CloudManager required for routing demo. +
- No CloudManager required for routing lab cockpit.
- No external services/dependencies.
- No external scripts/CDNs. -
- API server required for browser/Postman demo. -
- No runtime reports or demo transcripts are written. +
- API server required for browser/Postman lab review. +
- No runtime reports or lab transcripts are written.
- No secret fields, login inputs, release controls, ruleset controls, or cloud-control buttons.
6. Safety limitations
proofSummary: document.getElementById("proof-summary-output"), scenarioComparison: document.getElementById("scenario-comparison-output"), reviewerWalkthrough: document.getElementById("reviewer-walkthrough-output"), - evidenceAssociation: document.getElementById("evidence-association-output") + evidenceAssociation: document.getElementById("evidence-association-output"), + labMonitor: document.getElementById("lab-monitor-output") }; const proofFields = { strategy: document.getElementById("proof-strategy"), @@ -945,6 +1115,18 @@6. Safety limitations
evidencePages: document.getElementById("association-evidence-pages"), handoff: document.getElementById("association-handoff") }; + const labMonitorFields = { + scenario: document.getElementById("lab-monitor-scenario"), + requestStatus: document.getElementById("lab-monitor-request-status"), + strategy: document.getElementById("lab-monitor-strategy"), + backend: document.getElementById("lab-monitor-backend"), + healthState: document.getElementById("lab-monitor-health-state"), + signals: document.getElementById("lab-monitor-signals"), + delta: document.getElementById("lab-monitor-delta"), + degradation: document.getElementById("lab-monitor-degradation"), + evidencePath: document.getElementById("lab-monitor-evidence-path"), + handoff: document.getElementById("lab-monitor-handoff") + }; const requestJson = document.getElementById("request-json"); const baseUrlInput = document.getElementById("base-url"); const copyStatus = document.getElementById("copy-status"); @@ -1032,8 +1214,8 @@6. Safety limitations
payload = JSON.parse(requestJson.value); } catch (error) { lastRoutingBody = null; - lastRoutingError = "Malformed sample request JSON; static guidance remains available."; - renderJson(outputs.routing, { error: "Malformed sample request JSON." }); + lastRoutingError = "Malformed lab request JSON; static reviewer guidance remains available."; + renderJson(outputs.routing, { error: "Malformed lab request JSON." }); setBadge("compare-badge", "failed", "Failed"); renderSummary(); return; @@ -1052,9 +1234,9 @@6. Safety limitations
lastRoutingBody = body; const results = body && Array.isArray(body.results) ? body.results : []; if (!response.ok) { - lastRoutingError = "Local API returned HTTP " + response.status + "; static guidance remains available."; + lastRoutingError = "Local lab API returned HTTP " + response.status + "; static reviewer guidance remains available."; } else if (results.length === 0) { - lastRoutingError = "Local API returned an empty comparison response; static guidance remains available."; + lastRoutingError = "The local lab API returned an empty comparison response; static reviewer guidance remains available."; } else { lastRoutingError = ""; } @@ -1063,7 +1245,7 @@6. Safety limitations
setBadge("compare-badge", response.ok ? "passed" : "warning", response.ok ? "Passed" : "Warning"); } catch (error) { lastRoutingBody = null; - lastRoutingError = "Local API response unavailable; static guidance remains available. " + String(error.message || error); + lastRoutingError = "The local lab API response is unavailable; static reviewer guidance remains available. " + String(error.message || error); renderJson(outputs.routing, { error: lastRoutingError }); renderResults(null); setBadge("compare-badge", "failed", "Failed"); @@ -1080,7 +1262,7 @@6. Safety limitations
cell.colSpan = 4; cell.className = "muted"; cell.textContent = lastRoutingError - || "No routing comparison result is available. Local API response unavailable; static guidance remains available."; + || "No routing comparison result is available. The local lab API response is unavailable; static reviewer guidance remains available."; row.appendChild(cell); resultRows.appendChild(row); return; @@ -1119,9 +1301,9 @@6. Safety limitations
? lastRoutingBody.results : []; const lines = [ - "# Routing Decision Browser Demo", + "# Enterprise Lab Routing Proof Cockpit", "", - "mode: local browser same-origin demo", + "mode: local browser same-origin controlled lab", "endpoint: POST /api/routing/compare", "strategies: TAIL_LATENCY_POWER_OF_TWO, WEIGHTED_LEAST_LOAD, WEIGHTED_LEAST_CONNECTIONS, WEIGHTED_ROUND_ROBIN, ROUND_ROBIN", "", @@ -1130,7 +1312,7 @@6. Safety limitations
if (results.length === 0) { lines.push("- NOT_RUN: Run Compare strategies to populate selected server output."); - lines.push("- fallback: " + (lastRoutingError || "No previous scenario has been captured yet; static guidance remains available.")); + lines.push("- fallback: " + (lastRoutingError || "No previous lab scenario has been captured yet; static reviewer guidance remains available.")); } else { results.forEach((result) => { lines.push("- " + result.strategyId + ": " @@ -1142,7 +1324,7 @@6. Safety limitations
lines.push( "", "## Safety", - "- local/operator demo only", + "- local Enterprise Lab cockpit only", "- not certification", "- not benchmark proof", "- not legal compliance proof", @@ -1163,6 +1345,7 @@6. Safety limitations
renderScenarioComparison(); renderEvidenceAssociations(); renderReviewerWalkthrough(); + renderLabMonitorExplanation(); } function currentRequestPayload() { @@ -1242,7 +1425,7 @@6. Safety limitations
? ["No primary strategy change: " + currentStrategy + " remains first requested strategy."] : ["Primary strategy changed from " + previousStrategy + " to " + currentStrategy + "."]; if (sameAsBaseline) { - parts.push("Same scenario run twice or unchanged from baseline: strategy order matches the packaged sample."); + parts.push("Same lab scenario run twice or unchanged from baseline: strategy order matches the packaged lab scenario."); } if (added.length > 0) { parts.push("Added strategies: " + added.join(", ") + "."); @@ -1257,7 +1440,7 @@6. Safety limitations
const baselineBackend = "edge-alpha"; if (results.length === 0) { return lastRoutingError - || "No previous scenario has been captured yet; run Compare strategies to see selected backend/server change against packaged baseline expectation " + baselineBackend + "."; + || "No previous lab scenario has been captured yet; run Compare strategies to see selected backend/server change against packaged lab baseline expectation " + baselineBackend + "."; } const primary = results[0]; const selectedBackend = primary.chosenServerId || "No server selected"; @@ -1301,11 +1484,11 @@6. Safety limitations
"queueDepth " + previousMetrics.totalQueueDepth + " -> " + currentMetrics.totalQueueDepth ].join("; ") + "."; if (sameAsBaseline) { - return "Same scenario run twice or unchanged from baseline: strategy order and input signal totals should read as unchanged. " + summary; + return "Same lab scenario run twice or unchanged from baseline: strategy order and input signal totals should read as unchanged. " + summary; } const primary = results.length > 0 ? results[0] : null; if (primary && primary.chosenServerId === "edge-alpha" && metricsChanged(previousMetrics, currentMetrics)) { - return "Selected backend unchanged but signals changed: review the strategy reason and visible scores/signals before treating the decision as equivalent. " + summary; + return "The selected backend is unchanged, but visible lab signals changed. Review the strategy reason and visible scores/signals before treating the controlled lab decision as equivalent. " + summary; } return summary; } @@ -1321,14 +1504,14 @@6. Safety limitations
return "Degradation pressure increased: more unhealthy backends are visible and healthy alternatives should be preferred when present."; } if (currentMetrics.unhealthyServers.length < previousMetrics.unhealthyServers.length) { - return "Recovery visible: fewer unhealthy backends than the packaged baseline are present."; + return "Recovery visible: fewer unhealthy backends than the packaged lab baseline are present."; } if (currentMetrics.totalInFlight > previousMetrics.totalInFlight || currentMetrics.maxP95Latency > previousMetrics.maxP95Latency || currentMetrics.totalQueueDepth > previousMetrics.totalQueueDepth) { return "Load pressure increased while health posture stayed comparable; compare selected backend and reason fields for the routing response."; } - return "Same degradation boundary as packaged baseline: edge-drain remains unhealthy and should not be selected while healthy alternatives exist."; + return "Same degradation boundary as packaged lab baseline: edge-drain remains unhealthy and should not be selected while healthy alternatives exist."; } function renderScenarioComparison() { @@ -1340,8 +1523,8 @@6. Safety limitations
? lastRoutingBody.results : []; const previousName = results.length === 0 - ? "No previous scenario has been captured yet; packaged normal-load baseline remains the static reference" - : "Packaged normal-load baseline"; + ? "No previous lab scenario has been captured yet; packaged normal-load lab baseline remains the static reference" + : "Packaged normal-load lab baseline"; const currentName = scenarioName(currentMetrics); const strategySummary = strategyChangeSummary(previousMetrics, currentMetrics, sameAsBaseline); const backendSummary = backendChangeSummary(results, previousMetrics, currentMetrics); @@ -1364,8 +1547,8 @@6. Safety limitations
"selectedBackendChange: " + backendSummary, "keyInputSignalChanges: " + signalSummary, "degradationRecoveryExplanation: " + degradationSummary, - "emptyOrUnavailableFallback: " + (lastRoutingError || "Local API response available when comparison results are present; static guidance remains available before running a scenario."), - "localOnlyDemoBoundary: browser-local comparison of synthetic payloads and same-origin local API results only", + "emptyOrUnavailableFallback: " + (lastRoutingError || "Local lab API response available when comparison results are present; static reviewer guidance remains available before running a lab scenario."), + "localLabBoundary: browser-local comparison of controlled lab payloads and same-origin local API results only", "", "## Not Proven", "- no production traffic proof", @@ -1404,15 +1587,15 @@6. Safety limitations
if (results.length === 0) { proofFields.strategy.textContent = "Not run."; proofFields.backend.textContent = "Not run."; - proofFields.signals.textContent = "Run Compare strategies to summarize visible request fields. Static guidance remains available before running a scenario."; + proofFields.signals.textContent = "Run Compare strategies to summarize visible lab request fields. Static reviewer guidance remains available before running a lab scenario."; proofFields.degradation.textContent = - "The sample includes an unhealthy candidate so reviewers can verify it is not selected. " + (lastRoutingError || "No previous scenario has been captured yet."); + "The controlled lab scenario includes an unhealthy candidate so reviewers can verify it is not selected. " + (lastRoutingError || "No previous lab scenario has been captured yet."); outputs.proofSummary.textContent = [ "# Routing Proof Summary", "", "status: not run", "nextStep: run Compare strategies", - "fallback: " + (lastRoutingError || "Static page loaded without prior interaction; static guidance and evidence links remain available before running a scenario."), + "fallback: " + (lastRoutingError || "Static page loaded without prior interaction; static reviewer guidance and evidence links remain available before running a lab scenario."), "localOnly: true", "externalServices: false", "runtimeReportWritten: false" @@ -1432,7 +1615,7 @@6. Safety limitations
+ " was returned with reason: " + (primary.reason || "no explanation returned") + "."; const degradationSummary = "Result statuses: " + statuses - + ". The packaged sample keeps edge-drain unhealthy so a reviewer can verify it is excluded."; + + ". The packaged lab scenario keeps edge-drain unhealthy so a reviewer can verify it is excluded."; proofFields.strategy.textContent = primary.strategyId || "No strategy returned."; proofFields.backend.textContent = selectedBackend; @@ -1449,7 +1632,7 @@6. Safety limitations
"strategyEffectOnBackend: " + strategyEffectSummary, "keyInputSignals: " + signalSummary, "fallbackDegradationBoundary: " + degradationSummary, - "localOnlyDemoBoundary: same-origin local API, synthetic payloads, browser-only summary, no external services", + "localLabBoundary: same-origin local API, controlled lab payloads, browser-only summary, no external services", "", "## Not Proven", "- no production deployment proof", @@ -1467,14 +1650,14 @@6. Safety limitations
const primary = results.length > 0 ? results[0] : null; const selectedStrategy = primary && primary.strategyId ? primary.strategyId : "not run"; const selectedBackend = primary && primary.chosenServerId ? primary.chosenServerId : "not run"; - const proofSignals = proofFields.signals.textContent || "Run Compare strategies to summarize visible request fields."; + const proofSignals = proofFields.signals.textContent || "Run Compare strategies to summarize visible lab request fields."; const scenarioSignals = scenarioFields.signals.textContent || "Run Compare strategies to compare input signals."; outputs.reviewerWalkthrough.textContent = [ "# End-to-End Routing Reviewer Walkthrough", "", "workflowChecklist:", - "1. load sample scenario", + "1. load controlled lab scenario", "2. run routing comparison", "3. inspect Routing Proof Summary", "4. compare scenario deltas", @@ -1502,7 +1685,8 @@6. Safety limitations
"- no real tenant proof", "- no registry publication proof", "- no container signing proof", - "- no service-level agreement or service-level objective evidence" + "- no service-level agreement or service-level objective evidence", + "- no production telemetry proof" ].join("\n"); } @@ -1523,8 +1707,8 @@6. Safety limitations
const routingDecision = primary ? (primary.status || "unknown") + " decision selecting " + selectedBackend : (lastRoutingError || "not run; run Compare strategies to generate a local routing decision"); - const reason = primary && primary.reason ? primary.reason : "No routing reason is available until Compare strategies runs. Local API response unavailable; static guidance remains available if the local server is not running."; - const inputSignals = proofFields.signals.textContent || "Run Compare strategies to summarize visible request fields."; + const reason = primary && primary.reason ? primary.reason : "No routing reason is available until Compare strategies runs. The local lab API response is unavailable; static reviewer guidance remains available if the local server is not running."; + const inputSignals = proofFields.signals.textContent || "Run Compare strategies to summarize visible lab request fields."; const comparisonDelta = scenarioFields.signals.textContent || "Run Compare strategies to compare scenario deltas."; const degradationDelta = scenarioFields.degradation.textContent || "Run Compare strategies to compare degradation or recovery notes."; const evidencePath = evidenceNavigationPath(); @@ -1572,6 +1756,7 @@6. Safety limitations
"", "notProven:", "- no production traffic proof", + "- no production telemetry proof", "- no live cloud proof", "- no real tenant proof", "- no registry publication proof", @@ -1580,6 +1765,85 @@6. Safety limitations
].join("\n"); } + function renderLabMonitorExplanation() { + const currentPayload = currentRequestPayload(); + const currentMetrics = scenarioMetrics(currentPayload); + const currentScenario = scenarioName(currentMetrics); + const results = lastRoutingBody && Array.isArray(lastRoutingBody.results) + ? lastRoutingBody.results + : []; + const primary = results.length > 0 ? results[0] : null; + const selectedStrategy = primary && primary.strategyId ? primary.strategyId : "not run"; + const selectedBackend = primary && primary.chosenServerId ? primary.chosenServerId : "not run"; + const selectedServer = primary && primary.chosenServerId ? selectedServerDetails(primary.chosenServerId) : null; + const backendHealthState = selectedServer + ? "healthy=" + Boolean(selectedServer.healthy) + "; availability=" + + (selectedServer.healthy ? "available in controlled lab payload" : "unhealthy/degraded in controlled lab payload") + : "No selected backend health state yet; run Compare strategies."; + const visibleSignals = selectedServer + ? formatServerSignals(selectedServer) + : (proofFields.signals.textContent || "Run Compare strategies to summarize visible lab signals."); + const requestStatus = results.length > 0 + ? "Local lab comparison completed with " + results.length + " strategy result(s)." + : (lastRoutingError || "Not run; static reviewer guidance remains available."); + const scenarioDelta = scenarioFields.signals.textContent || "Run Compare strategies to compare lab scenario deltas."; + const degradationState = scenarioFields.degradation.textContent || "Static reviewer guidance remains available before a lab run."; + const evidencePath = evidenceNavigationPath(); + const edgeCaseState = results.length > 0 + ? degradationState + : (lastRoutingError || "No previous lab scenario has been captured yet."); + const handoffStatus = results.length > 0 + ? "Reviewer handoff ready for browser-local copy/print/export packet review." + : "Reviewer handoff is not ready until a local lab comparison runs."; + + labMonitorFields.scenario.textContent = currentScenario + (results.length > 0 + ? "." + : "; No previous lab scenario has been captured yet."); + labMonitorFields.requestStatus.textContent = requestStatus; + labMonitorFields.strategy.textContent = selectedStrategy; + labMonitorFields.backend.textContent = selectedBackend; + labMonitorFields.healthState.textContent = backendHealthState; + labMonitorFields.signals.textContent = visibleSignals; + labMonitorFields.delta.textContent = scenarioDelta; + labMonitorFields.degradation.textContent = degradationState; + labMonitorFields.evidencePath.textContent = evidencePath; + labMonitorFields.handoff.textContent = handoffStatus; + + outputs.labMonitor.textContent = [ + "# Enterprise Lab Cockpit Monitor Explanation", + "", + "activeLabScenario: " + currentScenario, + "routingComparisonStatus: " + requestStatus, + "selectedStrategy: " + selectedStrategy, + "selectedBackend: " + selectedBackend, + "backendHealthState: " + backendHealthState, + "visibleInputSignals: " + visibleSignals, + "scenarioComparisonState: " + scenarioDelta, + "edgeCaseState: " + edgeCaseState, + "evidenceAssociationPath: " + evidencePath, + "", + "reproductionSteps:", + "1. choose or load a controlled lab scenario", + "2. run routing comparison against the same-origin local API", + "3. inspect selected strategy, selected backend/server, and visible input signals", + "4. compare scenario deltas and edge-case guidance", + "5. follow reviewer/operator/timeline/export evidence links", + "6. copy proof, walkthrough, association, and lab monitor summaries as browser-local reviewer notes", + "7. print/copy/export the browser-local reviewer packet from /evidence-export-packet.html", + "", + "fallbackGuidance:", + "- No previous lab scenario has been captured yet.", + "- The selected backend is unchanged, but visible lab signals changed.", + "- The local lab API response is unavailable; static reviewer guidance remains available.", + "- Copy failed; use the visible lab explanation as the fallback.", + "- Evidence links remain available before a lab run, but they do not certify production behavior.", + "", + "labProofBoundaries: controlled lab evidence from local payloads, same-origin local API responses, visible browser text, and static evidence links", + "productionNotProven: no production traffic proof; no production telemetry proof; no live cloud proof; no real tenant proof; no SLA/SLO proof; no registry publication proof; no container signing proof; no production certification claim", + "copyBoundary: browser-local copy action only; no upload/share endpoint; no server-side export/PDF/ZIP generation; no external calls; no telemetry" + ].join("\n"); + } + function resetDemo() { lastRoutingBody = null; lastRoutingError = ""; @@ -1608,7 +1872,7 @@6. Safety limitations
throw new Error("Clipboard unavailable"); } } catch (error) { - copyStatus.textContent = "Copy failed; select the visible text and copy manually. Browser clipboard permission may be unavailable."; + copyStatus.textContent = "Copy failed; use the visible lab explanation as the fallback. Browser clipboard permission may be unavailable."; } } diff --git a/src/test/java/com/richmond423/loadbalancerpro/api/ReviewerTrustMapDocumentationTest.java b/src/test/java/com/richmond423/loadbalancerpro/api/ReviewerTrustMapDocumentationTest.java index 2c7083a3..5b848fda 100644 --- a/src/test/java/com/richmond423/loadbalancerpro/api/ReviewerTrustMapDocumentationTest.java +++ b/src/test/java/com/richmond423/loadbalancerpro/api/ReviewerTrustMapDocumentationTest.java @@ -109,6 +109,12 @@ void reviewerTrustMapCoversPrimaryEvidencePaths() throws Exception { "PROXY_DEMO_STACK.md", "PROXY_DEMO_FIXTURE_LAUNCHER.md", "routing-demo.html", + "Enterprise Lab Cockpit Monitor", + "How This Routing Decision Was Made", + "What This Lab Needs to Monitor", + "How to Reproduce and Explain This Lab Proof", + "How to Read Lab Edge Cases", + "copyable lab monitor explanation", "Reviewer Workflow Checklist", "Evidence Associations", "Association Legend", @@ -149,6 +155,11 @@ void reviewerDemoPathAnswersFastDemoQuestionsAndLocksEvidenceFiles() throws Exce assertTrue(demoPath.contains("http://localhost:8080/")); assertTrue(demoPath.contains("http://localhost:8080/routing-demo.html")); assertTrue(demoPath.contains("http://localhost:8080/load-balancing-cockpit.html")); + assertTrue(demoPath.contains("Enterprise Lab Cockpit Monitor")); + assertTrue(demoPath.contains("How This Routing Decision Was Made")); + assertTrue(demoPath.contains("What This Lab Needs to Monitor")); + assertTrue(demoPath.contains("How to Reproduce and Explain This Lab Proof")); + assertTrue(demoPath.contains("How to Read Lab Edge Cases")); assertTrue(demoPath.contains("Reviewer Workflow Checklist")); assertTrue(demoPath.contains("Evidence Associations")); assertTrue(demoPath.contains("Association Legend")); @@ -163,6 +174,7 @@ void reviewerDemoPathAnswersFastDemoQuestionsAndLocksEvidenceFiles() throws Exce assertTrue(demoPath.contains("degradation/recovery notes")); assertTrue(demoPath.contains("local verification commands")); assertTrue(demoPath.contains("routing-to-evidence dashboard links")); + assertTrue(demoPath.contains("copyable lab monitor explanation")); assertTrue(demoPath.contains("copyable evidence association summary")); assertTrue(demoPath.contains("copyable end-to-end reviewer walkthrough")); assertTrue(demoPath.contains("explicit not-proven boundaries")); @@ -230,8 +242,15 @@ void routingDemoScenarioComparisonTrustMapEntryIsDiscoverableAndBounded() throws assertTrue(matrix.contains("How should a reviewer walk the routing cockpit end-to-end?")); assertTrue(matrix.contains("How do routing decisions connect to reviewer evidence pages?")); assertTrue(matrix.contains("How do routing proof scenarios compare?")); + assertTrue(matrix.contains("How does the Enterprise Lab cockpit monitor and explain routing proof?")); assertTrue(matrix.contains("/routing-demo.html")); assertTrue(matrix.contains("RoutingDecisionDemoTest")); + assertTrue(matrix.contains("Enterprise Lab Cockpit Monitor")); + assertTrue(matrix.contains("How This Routing Decision Was Made")); + assertTrue(matrix.contains("What This Lab Needs to Monitor")); + assertTrue(matrix.contains("How to Reproduce and Explain This Lab Proof")); + assertTrue(matrix.contains("How to Read Lab Edge Cases")); + assertTrue(matrix.contains("copyable lab monitor explanation")); assertTrue(matrix.contains("Reviewer Workflow Checklist")); assertTrue(matrix.contains("Evidence Associations")); assertTrue(matrix.contains("Association Legend")); @@ -253,13 +272,15 @@ void routingDemoScenarioComparisonTrustMapEntryIsDiscoverableAndBounded() throws assertTrue(matrix.contains("copyable local reviewer summary")); assertTrue(matrix.contains("copyable end-to-end reviewer walkthrough")); assertTrue(matrix.contains("reviewer/operator/timeline/export packet pages")); - assertTrue(normalized.contains("sample scenario to routing comparison")); + assertTrue(normalized.contains("controlled lab scenario to routing comparison")); assertTrue(normalized.contains("evidence dashboards, timeline, and evidence export packet")); assertTrue(normalized.contains("without adding server-side exports or external calls")); - assertTrue(normalized.contains("packaged normal-load baseline")); - assertTrue(normalized.contains("edited local demo payloads")); + assertTrue(normalized.contains("packaged normal-load lab baseline")); + assertTrue(normalized.contains("edited local lab payloads")); assertTrue(normalized.contains("same-origin local api responses")); assertTrue(normalized.contains("browser-local copy text")); + assertTrue(normalized.contains("production telemetry proof")); + assertTrue(normalized.contains("governance-applied proof")); assertTrue(normalized.contains("upload/share endpoint behavior")); assertTrue(normalized.contains("server-side export/pdf/zip generation")); assertTrue(normalized.contains("production deployment certification")); @@ -271,6 +292,48 @@ void routingDemoScenarioComparisonTrustMapEntryIsDiscoverableAndBounded() throws assertTrue(normalized.contains("container signing")); } + @Test + void enterpriseLabCockpitMonitoringTrustMapSectionIsStrictAndBounded() throws Exception { + String trustMap = read(TRUST_MAP); + String section = section(trustMap, "### Enterprise Lab Cockpit Monitoring and How-Question Guide", + "### Cockpit Evidence Associations"); + String normalized = section.toLowerCase(Locale.ROOT); + + assertTrue(section.contains("strict Enterprise Lab proof cockpit")); + assertTrue(section.contains("not a casual demo page")); + assertTrue(section.contains("active lab scenario")); + assertTrue(section.contains("routing comparison request status")); + assertTrue(section.contains("selected strategy")); + assertTrue(section.contains("selected backend/server")); + assertTrue(section.contains("backend health state")); + assertTrue(section.contains("visible latency/load/active connection/capacity/weight-style signals")); + assertTrue(section.contains("scenario delta state")); + assertTrue(section.contains("degradation/fallback/recovery state")); + assertTrue(section.contains("evidence association path")); + assertTrue(section.contains("reviewer handoff readiness")); + assertTrue(section.contains("local lab boundary")); + assertTrue(section.contains("production proof gaps")); + assertTrue(section.contains("how the selected backend was chosen")); + assertTrue(section.contains("how strategy choice influenced the result")); + assertTrue(section.contains("how visible lab input signals affect the proof")); + assertTrue(section.contains("how to reproduce and explain the local lab proof")); + assertTrue(section.contains("copyable lab monitor explanation")); + assertTrue(normalized.contains("browser-local text only")); + assertTrue(normalized.contains("same-origin local api responses")); + assertTrue(normalized.contains("no telemetry")); + assertTrue(normalized.contains("does not prove production traffic")); + assertTrue(normalized.contains("production telemetry")); + assertTrue(normalized.contains("live cloud behavior")); + assertTrue(normalized.contains("real tenant behavior")); + assertTrue(normalized.contains("sla/slo achievement")); + assertTrue(normalized.contains("registry publication")); + assertTrue(normalized.contains("container signing")); + assertTrue(normalized.contains("governance-applied status")); + assertTrue(normalized.contains("production certification")); + assertTrue(normalized.contains("does not create upload/share endpoints")); + assertTrue(normalized.contains("server-side export/pdf/zip files")); + } + @Test void routingCockpitEvidenceAssociationsTrustMapSectionIsDiscoverableAndBounded() throws Exception { String trustMap = read(TRUST_MAP); @@ -288,15 +351,16 @@ void routingCockpitEvidenceAssociationsTrustMapSectionIsDiscoverableAndBounded() assertTrue(section.contains("export packet/reviewer handoff")); assertTrue(section.contains("copyable evidence association summary")); assertTrue(section.contains("Association Legend")); - assertTrue(section.contains("scenario = demo input state")); + assertTrue(section.contains("scenario = controlled lab input state")); assertTrue(section.contains("strategy = selected routing method")); - assertTrue(section.contains("backend/server = selected local candidate from the sample response")); - assertTrue(section.contains("signals = local/demo metrics used for explanation")); + assertTrue(section.contains("backend/server = selected local candidate from the lab response")); + assertTrue(section.contains("signals = controlled lab metrics used for explanation")); assertTrue(section.contains("evidence pages = reviewer navigation aids, not production certification")); assertTrue(normalized.contains("browser-local text only")); assertTrue(normalized.contains("same-origin local api results")); assertTrue(normalized.contains("static evidence page links")); assertTrue(normalized.contains("does not prove production traffic")); + assertTrue(normalized.contains("production telemetry")); assertTrue(normalized.contains("live cloud behavior")); assertTrue(normalized.contains("real tenant behavior")); assertTrue(normalized.contains("registry publication")); @@ -312,7 +376,7 @@ void routingCockpitReviewerWorkflowTrustMapSectionIsDiscoverableAndBounded() thr assertTrue(section.contains("Routing Cockpit Reviewer Workflow")); assertTrue(section.contains("/routing-demo.html")); - assertTrue(section.contains("load sample scenario")); + assertTrue(section.contains("load controlled lab scenario")); assertTrue(section.contains("run routing comparison")); assertTrue(section.contains("inspect Routing Proof Summary")); assertTrue(section.contains("compare scenario deltas")); @@ -321,7 +385,7 @@ void routingCockpitReviewerWorkflowTrustMapSectionIsDiscoverableAndBounded() thr assertTrue(section.contains("export/print packet from `/evidence-export-packet.html`")); assertTrue(section.contains("Reviewer Confidence Signals")); assertTrue(normalized.contains("local repeatability")); - assertTrue(normalized.contains("deterministic sample scenarios")); + assertTrue(normalized.contains("deterministic lab scenarios")); assertTrue(normalized.contains("same-origin api usage")); assertTrue(normalized.contains("static browser-only notes/copy actions")); assertTrue(normalized.contains("not-production-certified boundary")); @@ -329,6 +393,7 @@ void routingCockpitReviewerWorkflowTrustMapSectionIsDiscoverableAndBounded() thr assertTrue(normalized.contains("no upload/share endpoint")); assertTrue(normalized.contains("no server-side export/pdf/zip generation")); assertTrue(normalized.contains("no production traffic proof")); + assertTrue(normalized.contains("no production telemetry proof")); assertTrue(normalized.contains("no live cloud proof")); assertTrue(normalized.contains("no real tenant proof")); assertTrue(normalized.contains("no registry publication proof")); diff --git a/src/test/java/com/richmond423/loadbalancerpro/api/RoutingDecisionDemoTest.java b/src/test/java/com/richmond423/loadbalancerpro/api/RoutingDecisionDemoTest.java index 11c766ca..803074e9 100644 --- a/src/test/java/com/richmond423/loadbalancerpro/api/RoutingDecisionDemoTest.java +++ b/src/test/java/com/richmond423/loadbalancerpro/api/RoutingDecisionDemoTest.java @@ -56,7 +56,7 @@ void routingDemoPageExistsAndIsServed() throws Exception { mockMvc.perform(get("/routing-demo.html")) .andExpect(status().isOk()) .andExpect(content().contentTypeCompatibleWith(MediaType.TEXT_HTML)) - .andExpect(content().string(containsString("Routing Decision Demo"))) + .andExpect(content().string(containsString("Enterprise Lab Routing Proof Cockpit"))) .andExpect(content().string(containsString("data-action=\"compare\""))) .andExpect(content().string(containsString("/api/routing/compare"))); } @@ -77,7 +77,7 @@ void routingDemoPageContainsExpectedEndpointsControlsAndStrategyText() throws Ex assertTrue(page.contains("Selected backend/server")); assertTrue(page.contains("Key input signals")); assertTrue(page.contains("Fallback/degradation")); - assertTrue(page.contains("Local/demo boundary")); + assertTrue(page.contains("Local lab boundary")); assertTrue(page.contains("What this proves")); assertTrue(page.contains("What this does not prove")); assertTrue(page.contains("Copy proof summary")); @@ -85,9 +85,16 @@ void routingDemoPageContainsExpectedEndpointsControlsAndStrategyText() throws Ex assertTrue(page.contains("proof-summary-output")); assertTrue(page.contains("proof-commands")); assertTrue(page.contains("Reviewer Workflow Checklist")); + assertTrue(page.contains("Enterprise Lab Cockpit Monitor")); + assertTrue(page.contains("Copy lab monitor explanation")); + assertTrue(page.contains("lab-monitor-output")); + assertTrue(page.contains("How This Routing Decision Was Made")); + assertTrue(page.contains("What This Lab Needs to Monitor")); + assertTrue(page.contains("How to Reproduce and Explain This Lab Proof")); + assertTrue(page.contains("How to Read Lab Edge Cases")); assertTrue(page.contains("Copy end-to-end reviewer walkthrough")); assertTrue(page.contains("reviewer-walkthrough-output")); - assertTrue(page.contains("Load sample scenario")); + assertTrue(page.contains("Load lab scenario")); assertTrue(page.contains("Run routing comparison")); assertTrue(page.contains("Inspect Routing Proof Summary")); assertTrue(page.contains("Compare scenario deltas")); @@ -96,7 +103,7 @@ void routingDemoPageContainsExpectedEndpointsControlsAndStrategyText() throws Ex assertTrue(page.contains("Export/print packet from evidence export page")); assertTrue(page.contains("Reviewer Confidence Signals")); assertTrue(page.contains("Local repeatability")); - assertTrue(page.contains("Deterministic sample scenarios")); + assertTrue(page.contains("Deterministic lab scenarios")); assertTrue(page.contains("Same-origin API usage")); assertTrue(page.contains("Static browser-only notes/copy actions")); assertTrue(page.contains("Not-production-certified boundary")); @@ -110,21 +117,16 @@ void routingDemoPageContainsExpectedEndpointsControlsAndStrategyText() throws Ex assertTrue(page.contains("Scenario comparison -> what changed")); assertTrue(page.contains("Routing proof summary -> supporting evidence pages")); assertTrue(page.contains("Evidence pages -> export packet / reviewer handoff")); - assertTrue(page.contains("How This Proof Works")); - assertTrue(page.contains("How the selected strategy affects the selected backend")); - assertTrue(page.contains("How input signals influence the routing proof")); - assertTrue(page.contains("How scenario comparison deltas are summarized")); - assertTrue(page.contains("How degradation, unhealthy, and recovery states are represented")); - assertTrue(page.contains("How to reproduce the same proof locally")); - assertTrue(page.contains("How evidence pages relate to the proof")); - assertTrue(page.contains("How the copied association summary should be used")); - assertTrue(page.contains("How local/demo proof differs from production proof")); - assertTrue(page.contains("Edge-case reading guide")); + assertTrue(page.contains("How was the selected backend chosen?")); + assertTrue(page.contains("How did the selected strategy influence the decision?")); + assertTrue(page.contains("How did visible input signals influence the proof?")); + assertTrue(page.contains("How Strategy Choice Matters")); + assertTrue(page.contains("How Evidence Supports the Decision")); assertTrue(page.contains("Association Legend")); - assertTrue(page.contains("scenario = demo input state")); + assertTrue(page.contains("scenario = controlled lab input state")); assertTrue(page.contains("strategy = selected routing method")); - assertTrue(page.contains("backend/server = selected local candidate from the sample response")); - assertTrue(page.contains("signals = local/demo metrics used for explanation")); + assertTrue(page.contains("backend/server = selected local candidate from the lab response")); + assertTrue(page.contains("signals = controlled lab metrics used for explanation")); assertTrue(page.contains("evidence pages = reviewer navigation aids, not production certification")); assertTrue(page.contains("Scenario Comparison")); assertTrue(page.contains("Previous scenario")); @@ -143,18 +145,18 @@ void routingDemoPageContainsExpectedEndpointsControlsAndStrategyText() throws Ex assertTrue(page.contains("/evidence-timeline.html")); assertTrue(page.contains("/evidence-export-packet.html")); assertTrue(page.contains("Reviewer path")); - assertTrue(page.contains("Where to go next after routing proof review")); + assertTrue(page.contains("Where to go next after controlled lab routing proof review")); assertTrue(page.contains("Next: Enterprise Lab reviewer dashboard")); assertTrue(page.contains("Next: Operator evidence dashboard")); assertTrue(page.contains("Next: Evidence timeline")); assertTrue(page.contains("Finish: Evidence export packet")); - assertTrue(page.contains("after routing proof review")); + assertTrue(page.contains("after controlled lab routing proof review")); assertTrue(page.contains("Copy curl")); assertTrue(page.contains("Copy payload")); assertTrue(page.contains("Copy summary")); assertTrue(page.contains("Copy raw response")); - assertTrue(page.contains("Reset demo")); - assertTrue(page.contains("Load sample scenario")); + assertTrue(page.contains("Reset lab")); + assertTrue(page.contains("Load lab scenario")); assertTrue(page.contains("Compare strategies")); assertTrue(page.contains("TAIL_LATENCY_POWER_OF_TWO")); assertTrue(page.contains("WEIGHTED_LEAST_LOAD")); @@ -175,18 +177,19 @@ void routingDemoProofSummaryContainsLocalCommandsAndNotProvenBoundaries() throws assertTrue(page.contains("curl -fsS -X POST http://localhost:8080/api/routing/compare")); assertTrue(page.contains("--data-binary @routing-compare-request.json")); assertTrue(page.contains("same-origin local API")); - assertTrue(page.contains("synthetic request payloads")); + assertTrue(page.contains("controlled lab payloads")); assertTrue(page.contains("browser-only summaries")); assertTrue(page.contains("selectedStrategy: ")); assertTrue(page.contains("selectedBackend: ")); assertTrue(page.contains("keyInputSignals: ")); assertTrue(page.contains("fallbackDegradationBoundary: ")); - assertTrue(page.contains("localOnlyDemoBoundary: same-origin local API")); + assertTrue(page.contains("localLabBoundary: same-origin local API")); assertTrue(normalized.contains("no production deployment proof")); assertTrue(normalized.contains("no service-level agreement, service-level objective, or real tenant evidence")); assertTrue(normalized.contains("no live cloud validation, registry publication, or container signing evidence")); assertTrue(normalized.contains("no service-level agreement or service-level objective evidence")); assertTrue(normalized.contains("no registry publication or container signing evidence")); + assertTrue(normalized.contains("no production telemetry proof")); assertTrue(normalized.contains("runtimeReportWritten: false".toLowerCase(Locale.ROOT))); assertTrue(normalized.contains("externalServices: false".toLowerCase(Locale.ROOT))); } @@ -205,11 +208,11 @@ void routingDemoScenarioComparisonContainsLocalOnlyBoundariesAndCopyableDeltas() assertTrue(page.contains("keyInputSignalChanges: ")); assertTrue(page.contains("degradationRecoveryExplanation: ")); assertTrue(page.contains("emptyOrUnavailableFallback: ")); - assertTrue(page.contains("localOnlyDemoBoundary: browser-local comparison")); + assertTrue(page.contains("localLabBoundary: browser-local comparison")); assertTrue(page.contains("No primary strategy change")); - assertTrue(page.contains("Same scenario run twice or unchanged from baseline")); - assertTrue(page.contains("No previous scenario has been captured yet")); - assertTrue(page.contains("Selected backend unchanged but signals changed")); + assertTrue(page.contains("Same lab scenario run twice or unchanged from baseline")); + assertTrue(page.contains("No previous lab scenario has been captured yet")); + assertTrue(page.contains("The selected backend is unchanged, but visible lab signals changed")); assertTrue(page.contains("Strategy changed but backend stayed the same")); assertTrue(page.contains("Backend changed but strategy stayed the same")); assertTrue(page.contains("Selected backend changed after compare")); @@ -221,8 +224,9 @@ void routingDemoScenarioComparisonContainsLocalOnlyBoundariesAndCopyableDeltas() assertTrue(page.contains("Degradation pressure increased")); assertTrue(page.contains("Recovery visible")); assertTrue(page.contains("same-origin local API results only")); - assertTrue(normalized.contains("browser-local comparison of synthetic payloads")); + assertTrue(normalized.contains("browser-local comparison of controlled lab payloads")); assertTrue(normalized.contains("no production traffic")); + assertTrue(normalized.contains("production telemetry")); assertTrue(normalized.contains("no live cloud validation")); assertTrue(normalized.contains("no real tenant data")); assertTrue(normalized.contains("no upload, share endpoint, or server-side export/pdf/zip generation")); @@ -234,19 +238,20 @@ void routingDemoEvidenceNavigationIsLocalStaticAndBounded() throws Exception { String normalized = page.toLowerCase(Locale.ROOT); assertTrue(page.contains("id=\"routing-evidence-navigation-panel\"")); - assertTrue(page.contains("Where to go next after routing proof review across local static evidence pages.")); + assertTrue(page.contains("Where to go next after controlled lab routing proof review across local static evidence pages.")); assertTrue(page.contains("Use Routing Proof Summary and Scenario Comparison")); assertTrue(page.contains("Review Enterprise Lab posture")); assertTrue(page.contains("Check operator evidence locations")); assertTrue(page.contains("Compare local and CI evidence stages")); assertTrue(page.contains("Use the browser-local packet page")); - assertTrue(page.contains("Reviewer path after routing proof review")); + assertTrue(page.contains("Reviewer path after controlled lab routing proof review")); assertTrue(page.contains("inspect the Enterprise Lab reviewer dashboard")); assertTrue(page.contains("check the Operator evidence dashboard")); assertTrue(page.contains("review the Evidence timeline")); assertTrue(page.contains("Evidence export packet page")); - assertTrue(normalized.contains("local/demo evidence only")); + assertTrue(normalized.contains("controlled lab evidence only")); assertTrue(normalized.contains("no production traffic proof")); + assertTrue(normalized.contains("no production telemetry proof")); assertTrue(normalized.contains("no live cloud proof")); assertTrue(normalized.contains("no real tenant proof")); assertTrue(normalized.contains("registry publication proof")); @@ -270,7 +275,7 @@ void routingDemoReviewerWorkflowChecklistAndWalkthroughAreLocalAndBounded() thro assertTrue(page.contains("data-copy-target=\"reviewer-walkthrough-output\"")); assertTrue(page.contains("# End-to-End Routing Reviewer Walkthrough")); assertTrue(page.contains("workflowChecklist:")); - assertTrue(page.contains("1. load sample scenario")); + assertTrue(page.contains("1. load controlled lab scenario")); assertTrue(page.contains("2. run routing comparison")); assertTrue(page.contains("3. inspect Routing Proof Summary")); assertTrue(page.contains("4. compare scenario deltas")); @@ -287,6 +292,7 @@ void routingDemoReviewerWorkflowChecklistAndWalkthroughAreLocalAndBounded() thro assertTrue(normalized.contains("no server-side export/pdf/zip generation")); assertTrue(normalized.contains("no external services")); assertTrue(normalized.contains("no production traffic proof")); + assertTrue(normalized.contains("no production telemetry proof")); assertTrue(normalized.contains("no live cloud proof")); assertTrue(normalized.contains("no real tenant proof")); assertTrue(normalized.contains("no registry publication proof")); @@ -302,16 +308,17 @@ void routingDemoReviewerConfidenceSignalsAreStaticLocalAndNotOverclaimed() throw assertTrue(page.contains("id=\"reviewer-confidence-signals-panel\"")); assertTrue(page.contains("aria-label=\"Reviewer confidence signal cards\"")); assertTrue(page.contains("Local repeatability")); - assertTrue(page.contains("Deterministic sample scenarios")); + assertTrue(page.contains("Deterministic lab scenarios")); assertTrue(page.contains("Same-origin API usage")); assertTrue(page.contains("Static browser-only notes/copy actions")); assertTrue(page.contains("Not-production-certified boundary")); - assertTrue(normalized.contains("packaged synthetic inputs")); + assertTrue(normalized.contains("packaged controlled lab inputs")); assertTrue(normalized.contains("packaged server names, weights, health states, load, and latency fields")); assertTrue(normalized.contains("browser calls target local app paths")); assertTrue(normalized.contains("do not create server-side files")); - assertTrue(normalized.contains("local/demo evidence only")); + assertTrue(normalized.contains("controlled lab evidence only")); assertTrue(normalized.contains("no production traffic proof")); + assertTrue(normalized.contains("no production telemetry proof")); assertTrue(normalized.contains("no live cloud proof")); assertTrue(normalized.contains("no real tenant proof")); assertTrue(normalized.contains("no registry publication proof")); @@ -322,6 +329,44 @@ void routingDemoReviewerConfidenceSignalsAreStaticLocalAndNotOverclaimed() throw assertFalse(normalized.contains("governance-applied")); } + @Test + void routingDemoEnterpriseLabMonitorExplainsSignalsBoundariesAndCopyText() throws Exception { + String page = Files.readString(ROUTING_DEMO_PAGE, StandardCharsets.UTF_8); + String normalized = page.toLowerCase(Locale.ROOT); + + assertTrue(page.contains("id=\"enterprise-lab-cockpit-monitor-panel\"")); + assertTrue(page.contains("Enterprise Lab Cockpit Monitor")); + assertTrue(page.contains("This is lab-bounded proof, not production monitoring.")); + assertTrue(page.contains("It is an Enterprise Lab proof cockpit, not a casual demo page or production monitoring surface.")); + assertTrue(page.contains("data-copy-target=\"lab-monitor-output\"")); + assertTrue(page.contains("# Enterprise Lab Cockpit Monitor Explanation")); + assertTrue(page.contains("activeLabScenario: ")); + assertTrue(page.contains("routingComparisonStatus: ")); + assertTrue(page.contains("selectedStrategy: ")); + assertTrue(page.contains("selectedBackend: ")); + assertTrue(page.contains("backendHealthState: ")); + assertTrue(page.contains("visibleInputSignals: ")); + assertTrue(page.contains("scenarioComparisonState: ")); + assertTrue(page.contains("edgeCaseState: ")); + assertTrue(page.contains("evidenceAssociationPath: ")); + assertTrue(page.contains("reproductionSteps:")); + assertTrue(page.contains("labProofBoundaries: controlled lab evidence")); + assertTrue(page.contains("productionNotProven: no production traffic proof; no production telemetry proof; no live cloud proof; no real tenant proof; no SLA/SLO proof; no registry publication proof; no container signing proof; no production certification claim")); + assertTrue(page.contains("copyBoundary: browser-local copy action only; no upload/share endpoint; no server-side export/PDF/ZIP generation; no external calls; no telemetry")); + assertTrue(page.contains("Evidence links remain available before a lab run, but they do not certify production behavior.")); + assertTrue(page.contains("No previous lab scenario has been captured yet.")); + assertTrue(page.contains("The local lab API response is unavailable; static reviewer guidance remains available.")); + assertTrue(page.contains("Copy failed; use the visible lab explanation as the fallback.")); + assertTrue(normalized.contains("backend health state")); + assertTrue(normalized.contains("visible latency/load/connection/capacity signals")); + assertTrue(normalized.contains("scenario delta state")); + assertTrue(normalized.contains("degradation/fallback/recovery state")); + assertTrue(normalized.contains("reviewer handoff readiness")); + assertFalse(normalized.contains("production monitoring proof")); + assertFalse(normalized.contains("live production telemetry is available")); + assertFalse(normalized.contains("server-side lab monitor export")); + } + @Test void routingDemoEvidenceAssociationsMapProofToEvidencePath() throws Exception { String page = Files.readString(ROUTING_DEMO_PAGE, StandardCharsets.UTF_8); @@ -348,8 +393,9 @@ void routingDemoEvidenceAssociationsMapProofToEvidencePath() throws Exception { assertTrue(page.contains("/operator-evidence-dashboard.html")); assertTrue(page.contains("/evidence-timeline.html")); assertTrue(page.contains("/evidence-export-packet.html")); - assertTrue(normalized.contains("association boundary: local/demo evidence only")); + assertTrue(normalized.contains("association boundary: controlled lab evidence only")); assertTrue(normalized.contains("no production traffic proof")); + assertTrue(normalized.contains("no production telemetry proof")); assertTrue(normalized.contains("no live cloud proof")); assertTrue(normalized.contains("no real tenant proof")); assertTrue(normalized.contains("no registry publication proof")); @@ -387,6 +433,7 @@ void routingDemoEvidenceAssociationSummaryIsBrowserLocalAndBounded() throws Exce assertTrue(page.contains("copyBoundary: browser-local copy action only; no upload/share endpoint; no server-side export/PDF/ZIP generation; no external calls")); assertTrue(page.contains("notProven:")); assertTrue(normalized.contains("no production traffic proof")); + assertTrue(normalized.contains("no production telemetry proof")); assertTrue(normalized.contains("no live cloud proof")); assertTrue(normalized.contains("no real tenant proof")); assertTrue(normalized.contains("no registry publication proof")); @@ -400,23 +447,31 @@ void routingDemoHowToAndEdgeCasesAreExplicitReviewerGuidance() throws Exception String normalized = page.toLowerCase(Locale.ROOT); assertTrue(page.contains("id=\"reviewer-how-to-panel\"")); - assertTrue(page.contains("aria-label=\"Reviewer how-to explanation cards\"")); - assertTrue(page.contains("The first returned strategy is the primary local comparison result")); - assertTrue(page.contains("its routing rule ranks the visible candidate servers")); - assertTrue(page.contains("Health, in-flight load, configured weight/capacity, p95 latency, error rate, queue depth, and network-awareness fields")); - assertTrue(page.contains("Deltas are browser-local summaries comparing packaged baseline metrics against the current editor payload")); - assertTrue(page.contains("candidate count, healthy/unhealthy count, total in-flight load, max p95 latency, max error rate, and queue depth")); + assertTrue(page.contains("aria-label=\"How this routing decision was made cards\"")); + assertTrue(page.contains("How was the selected backend chosen?")); + assertTrue(page.contains("The first returned comparison result is the primary controlled lab decision")); + assertTrue(page.contains("How did the selected strategy influence the decision?")); + assertTrue(page.contains("exact production scoring is not claimed unless exposed by the API")); + assertTrue(page.contains("How did visible input signals influence the proof?")); + assertTrue(page.contains("backend health, latency, load, active connections, capacity, weight, error rate, queue depth, and network-awareness fields")); + assertTrue(page.contains("If multiple candidates appear close, compare returned reason text and visible signals")); + assertTrue(page.contains("What This Lab Needs to Monitor")); + assertTrue(page.contains("Monitor healthy/unhealthy state, selected backend availability")); + assertTrue(page.contains("Monitor p95 latency, in-flight load, queue depth, configured capacity, estimated concurrency, and weight")); assertTrue(page.contains("Unhealthy backends are counted fromhealthy=false"));
- assertTrue(page.contains("all-unhealthy payloads are called out as a degradation boundary"));
- assertTrue(page.contains("fewer unhealthy backends than the baseline are described as recovery"));
- assertTrue(page.contains("Run mvn spring-boot:run"));
- assertTrue(page.contains("reviewer, operator, timeline, and export packet pages provide navigation"));
- assertTrue(page.contains("Use the copied association summary as a reviewer note"));
- assertTrue(page.contains("it is not an audit artifact created by the server"));
- assertTrue(page.contains("Local/demo proof uses synthetic payloads, same-origin local API responses, and browser-local notes"));
+ assertTrue(page.contains("all-unhealthy payloads are treated as a degradation boundary"));
+ assertTrue(page.contains("Recovery is represented when visible lab inputs show fewer unhealthy candidates"));
+ assertTrue(page.contains("How to Reproduce and Explain This Lab Proof"));
+ assertTrue(page.contains("Run routing comparison against the same-origin local /api/routing/compare endpoint"));
+ assertTrue(page.contains("Follow evidence association links to reviewer dashboard, operator evidence dashboard, evidence timeline, and evidence export packet"));
+ assertTrue(page.contains("How Strategy Choice Matters"));
+ assertTrue(page.contains("How Evidence Supports the Decision"));
+ assertTrue(page.contains("Timeline and export packet support local reviewer handoff"));
assertTrue(normalized.contains("does not prove production traffic"));
+ assertTrue(normalized.contains("production telemetry"));
assertTrue(normalized.contains("live cloud behavior"));
assertTrue(normalized.contains("real tenant behavior"));
+ assertTrue(normalized.contains("sla/slo"));
assertTrue(normalized.contains("registry publication"));
assertTrue(normalized.contains("container signing"));
assertTrue(normalized.contains("production certification"));
@@ -427,24 +482,24 @@ void routingDemoEdgeCaseFallbackTextIsSpecificAndBrowserLocal() throws Exception
String page = Files.readString(ROUTING_DEMO_PAGE, StandardCharsets.UTF_8);
String normalized = page.toLowerCase(Locale.ROOT);
- assertTrue(page.contains("No previous scenario has been captured yet; the packaged normal-load baseline remains the static reference."));
- assertTrue(page.contains("Same scenario run twice or unchanged from baseline: strategy order and input signal totals should read as unchanged."));
- assertTrue(page.contains("Selected backend unchanged but signals changed: review the strategy reason and visible scores/signals before treating the decision as equivalent."));
+ assertTrue(page.contains("No previous lab scenario has been captured yet; packaged normal-load lab baseline remains the static reference"));
+ assertTrue(page.contains("Same lab scenario run twice or unchanged from baseline: strategy order and input signal totals should read as unchanged."));
+ assertTrue(page.contains("The selected backend is unchanged, but visible lab signals changed."));
assertTrue(page.contains("Strategy changed but backend stayed the same: the selected backend can remain preferred under multiple routing methods."));
- assertTrue(page.contains("Backend changed but strategy stayed the same: input signal deltas likely changed which candidate the same strategy preferred."));
- assertTrue(page.contains("All unhealthy/degraded scenario: every visible backend is unhealthy, so the page should show a degradation boundary instead of production proof."));
- assertTrue(page.contains("Missing or empty comparison response: Local API returned an empty comparison response; static guidance remains available."));
- assertTrue(page.contains("API error or unavailable local server: Local API response unavailable; static guidance remains available."));
- assertTrue(page.contains("Copy-to-clipboard failure fallback: Copy failed; select the visible text and copy manually."));
- assertTrue(page.contains("Static page loaded without prior interaction: static guidance and evidence links remain available before running a scenario."));
- assertTrue(page.contains("Local API returned HTTP "));
- assertTrue(page.contains("Local API returned an empty comparison response; static guidance remains available."));
- assertTrue(page.contains("Local API response unavailable; static guidance remains available."));
- assertTrue(page.contains("Malformed sample request JSON; static guidance remains available."));
- assertTrue(page.contains("Static page loaded without prior interaction; static guidance and evidence links remain available before running a scenario."));
+ assertTrue(page.contains("Backend changed but strategy stayed the same: visible lab signal deltas likely changed which candidate the same strategy preferred."));
+ assertTrue(page.contains("All backends unhealthy/degraded: every visible backend is unhealthy, so treat the result as a degradation boundary instead of production proof."));
+ assertTrue(page.contains("Empty comparison response: The local lab API returned an empty comparison response; static reviewer guidance remains available."));
+ assertTrue(page.contains("Local API unavailable/error: The local lab API response is unavailable; static reviewer guidance remains available."));
+ assertTrue(page.contains("Clipboard copy failure: Copy failed; use the visible lab explanation as the fallback."));
+ assertTrue(page.contains("Page loaded before interaction: static reviewer guidance remains available before a lab run."));
+ assertTrue(page.contains("Local lab API returned HTTP "));
+ assertTrue(page.contains("The local lab API returned an empty comparison response; static reviewer guidance remains available."));
+ assertTrue(page.contains("The local lab API response is unavailable; static reviewer guidance remains available."));
+ assertTrue(page.contains("Malformed lab request JSON; static reviewer guidance remains available."));
+ assertTrue(page.contains("Static page loaded without prior interaction; static reviewer guidance and evidence links remain available before running a lab scenario."));
assertTrue(page.contains("Browser clipboard permission may be unavailable."));
- assertTrue(page.contains("Evidence links are available even before running a scenario."));
- assertTrue(normalized.contains("browser-local summaries"));
+ assertTrue(page.contains("Evidence links remain available before a lab run, but they do not certify production behavior."));
+ assertTrue(normalized.contains("browser-local copy"));
assertTrue(normalized.contains("no upload/share endpoint"));
assertTrue(normalized.contains("no server-side export/pdf/zip generation"));
assertFalse(normalized.contains("server-side association export"));
@@ -458,12 +513,12 @@ void routingDemoAssociationLegendExplainsProofTermsWithoutCertificationClaim() t
assertTrue(page.contains("id=\"association-legend-panel\""));
assertTrue(page.contains("aria-label=\"Association legend cards\""));
- assertTrue(page.contains("scenario = demo input state"));
+ assertTrue(page.contains("scenario = controlled lab input state"));
assertTrue(page.contains("strategy = selected routing method"));
- assertTrue(page.contains("backend/server = selected local candidate from the sample response"));
- assertTrue(page.contains("signals = local/demo metrics used for explanation"));
+ assertTrue(page.contains("backend/server = selected local candidate from the lab response"));
+ assertTrue(page.contains("signals = controlled lab metrics used for explanation"));
assertTrue(page.contains("evidence pages = reviewer navigation aids, not production certification"));
- assertTrue(normalized.contains("synthetic local state under review"));
+ assertTrue(normalized.contains("synthetic local lab state under review"));
assertTrue(normalized.contains("method returned by the local compare endpoint"));
assertTrue(normalized.contains("local candidate in the visible request and response pair"));
assertTrue(normalized.contains("visible health, load, latency, error, queue, and network-awareness fields"));
@@ -478,17 +533,17 @@ void routingDemoPageContainsSafetyLimitationsAndPostmanParity() throws Exception
String normalized = page.toLowerCase(Locale.ROOT);
assertTrue(page.contains("Postman parity: run the Routing Decision Demo folder"));
- assertTrue(normalized.contains("local/operator demo only"));
+ assertTrue(normalized.contains("local enterprise lab cockpit only"));
assertTrue(normalized.contains("not certification"));
assertTrue(normalized.contains("not benchmark proof"));
assertTrue(normalized.contains("not legal compliance proof"));
assertTrue(normalized.contains("not identity proof"));
assertTrue(normalized.contains("no cloud mutation"));
- assertTrue(normalized.contains("no cloudmanager required for routing demo"));
+ assertTrue(normalized.contains("no cloudmanager required for routing lab cockpit"));
assertTrue(normalized.contains("no external services/dependencies"));
assertTrue(normalized.contains("no external scripts/cdns"));
- assertTrue(normalized.contains("api server required for browser/postman demo"));
- assertTrue(normalized.contains("no runtime reports or demo transcripts are written"));
+ assertTrue(normalized.contains("api server required for browser/postman lab review"));
+ assertTrue(normalized.contains("no runtime reports or lab transcripts are written"));
}
@Test