Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ The Enterprise Lab Cockpit provides controlled lab evidence, local reproducibili
- Reviewer trust map: [`docs/REVIEWER_TRUST_MAP.md`](docs/REVIEWER_TRUST_MAP.md).
- Framing guide: [`docs/ENTERPRISE_LAB_COCKPIT_FRAMING.md`](docs/ENTERPRISE_LAB_COCKPIT_FRAMING.md).
- Decision Vector contract: [`docs/ENTERPRISE_LAB_DECISION_VECTOR.md`](docs/ENTERPRISE_LAB_DECISION_VECTOR.md); read-only Dominant Factor Analysis lane: [`docs/ENTERPRISE_LAB_DOMINANT_FACTOR_ANALYSIS.md`](docs/ENTERPRISE_LAB_DOMINANT_FACTOR_ANALYSIS.md); read-only Decision Delta Analysis lane: [`docs/ENTERPRISE_LAB_DECISION_DELTA_ANALYSIS.md`](docs/ENTERPRISE_LAB_DECISION_DELTA_ANALYSIS.md); read-only Decision Replay Snapshot lane: [`docs/ENTERPRISE_LAB_DECISION_REPLAY_SNAPSHOT.md`](docs/ENTERPRISE_LAB_DECISION_REPLAY_SNAPSHOT.md); read-only Decision Replay Reconstruction Trace lane: [`docs/ENTERPRISE_LAB_DECISION_REPLAY_RECONSTRUCTION_TRACE.md`](docs/ENTERPRISE_LAB_DECISION_REPLAY_RECONSTRUCTION_TRACE.md); read-only Decision Replay Capsule lane: [`docs/ENTERPRISE_LAB_DECISION_REPLAY_CAPSULE.md`](docs/ENTERPRISE_LAB_DECISION_REPLAY_CAPSULE.md); read-only Decision Replay Readiness Checklist lane: [`docs/ENTERPRISE_LAB_DECISION_REPLAY_READINESS_CHECKLIST.md`](docs/ENTERPRISE_LAB_DECISION_REPLAY_READINESS_CHECKLIST.md); read-only Decision Replay Evidence Source Map lane: [`docs/ENTERPRISE_LAB_DECISION_REPLAY_EVIDENCE_SOURCE_MAP.md`](docs/ENTERPRISE_LAB_DECISION_REPLAY_EVIDENCE_SOURCE_MAP.md); read-only Decision Replay Evidence Boundary Summary lane: [`docs/ENTERPRISE_LAB_DECISION_REPLAY_EVIDENCE_BOUNDARY_SUMMARY.md`](docs/ENTERPRISE_LAB_DECISION_REPLAY_EVIDENCE_BOUNDARY_SUMMARY.md); read-only Decision Replay Evidence Field Inventory lane: [`docs/ENTERPRISE_LAB_DECISION_REPLAY_EVIDENCE_FIELD_INVENTORY.md`](docs/ENTERPRISE_LAB_DECISION_REPLAY_EVIDENCE_FIELD_INVENTORY.md); read-only Decision Evidence Null-Safety Summary lane: [`docs/ENTERPRISE_LAB_DECISION_EVIDENCE_NULL_SAFETY_SUMMARY.md`](docs/ENTERPRISE_LAB_DECISION_EVIDENCE_NULL_SAFETY_SUMMARY.md); read-only Decision Evidence Status Rollup lane: [`docs/ENTERPRISE_LAB_DECISION_EVIDENCE_STATUS_ROLLUP.md`](docs/ENTERPRISE_LAB_DECISION_EVIDENCE_STATUS_ROLLUP.md); read-only Decision Replay Evidence Lane Navigation Summary lane: [`docs/ENTERPRISE_LAB_DECISION_REPLAY_EVIDENCE_LANE_NAVIGATION_SUMMARY.md`](docs/ENTERPRISE_LAB_DECISION_REPLAY_EVIDENCE_LANE_NAVIGATION_SUMMARY.md); read-only Decision Replay Evidence Lane Dependency Map lane: [`docs/ENTERPRISE_LAB_DECISION_REPLAY_EVIDENCE_LANE_DEPENDENCY_MAP.md`](docs/ENTERPRISE_LAB_DECISION_REPLAY_EVIDENCE_LANE_DEPENDENCY_MAP.md); read-only Decision Replay Evidence Lane Reference Index lane: [`docs/ENTERPRISE_LAB_DECISION_REPLAY_EVIDENCE_LANE_REFERENCE_INDEX.md`](docs/ENTERPRISE_LAB_DECISION_REPLAY_EVIDENCE_LANE_REFERENCE_INDEX.md); read-only Decision Replay Evidence Lane Dependency Summary lane: [`docs/ENTERPRISE_LAB_DECISION_REPLAY_EVIDENCE_LANE_DEPENDENCY_SUMMARY.md`](docs/ENTERPRISE_LAB_DECISION_REPLAY_EVIDENCE_LANE_DEPENDENCY_SUMMARY.md); read-only Decision Replay Evidence Lane Consistency Summary lane: [`docs/ENTERPRISE_LAB_DECISION_REPLAY_EVIDENCE_LANE_CONSISTENCY_SUMMARY.md`](docs/ENTERPRISE_LAB_DECISION_REPLAY_EVIDENCE_LANE_CONSISTENCY_SUMMARY.md); read-only Decision Replay Evidence Reviewer Snapshot lane: [`docs/ENTERPRISE_LAB_DECISION_REPLAY_EVIDENCE_REVIEWER_SNAPSHOT.md`](docs/ENTERPRISE_LAB_DECISION_REPLAY_EVIDENCE_REVIEWER_SNAPSHOT.md); read-only Decision Replay Evidence Reviewer Guidance lane: [`docs/ENTERPRISE_LAB_DECISION_REPLAY_EVIDENCE_REVIEWER_GUIDANCE.md`](docs/ENTERPRISE_LAB_DECISION_REPLAY_EVIDENCE_REVIEWER_GUIDANCE.md); read-only Decision Replay Evidence Reviewer Handoff Summary lane: [`docs/ENTERPRISE_LAB_DECISION_REPLAY_EVIDENCE_REVIEWER_HANDOFF_SUMMARY.md`](docs/ENTERPRISE_LAB_DECISION_REPLAY_EVIDENCE_REVIEWER_HANDOFF_SUMMARY.md); read-only Decision Replay Evidence Reviewer Closure Summary lane: [`docs/ENTERPRISE_LAB_DECISION_REPLAY_EVIDENCE_REVIEWER_CLOSURE_SUMMARY.md`](docs/ENTERPRISE_LAB_DECISION_REPLAY_EVIDENCE_REVIEWER_CLOSURE_SUMMARY.md); read-only Decision Replay Evidence Closure Rollup lane: [`docs/ENTERPRISE_LAB_DECISION_REPLAY_EVIDENCE_CLOSURE_ROLLUP.md`](docs/ENTERPRISE_LAB_DECISION_REPLAY_EVIDENCE_CLOSURE_ROLLUP.md); read-only Decision Replay Evidence Closure Checklist lane: [`docs/ENTERPRISE_LAB_DECISION_REPLAY_EVIDENCE_CLOSURE_CHECKLIST.md`](docs/ENTERPRISE_LAB_DECISION_REPLAY_EVIDENCE_CLOSURE_CHECKLIST.md).
- Read-only Decision Replay Evidence Closure Packet lane: [`docs/ENTERPRISE_LAB_DECISION_REPLAY_EVIDENCE_CLOSURE_PACKET.md`](docs/ENTERPRISE_LAB_DECISION_REPLAY_EVIDENCE_CLOSURE_PACKET.md). It is in-response reviewer metadata only, not an export/share/download packet.

LoadBalancerPro is becoming **LoadBalancerPro Enterprise Lab**: a Java 17 / Spring Boot lab for adaptive-routing scenarios, deterministic replay, LASE shadow/influence comparison, policy gates, scorecards, evidence export, SRE walkthroughs, and a carefully bounded Production Gateway Candidate track.

Expand Down Expand Up @@ -759,6 +760,8 @@ The allocation APIs are calculation-only. Scaling recommendations are simulation

`POST /api/routing/compare` compares supported routing strategies against caller-provided candidate telemetry. Supported strategy IDs are `ROUND_ROBIN`, `TAIL_LATENCY_POWER_OF_TWO`, `WEIGHTED_LEAST_LOAD`, `WEIGHTED_LEAST_CONNECTIONS`, and `WEIGHTED_ROUND_ROBIN`. It is read-only and recommendation-only: it returns strategy results, explanations, additive Decision Vector evidence, Dominant Factor Analysis, Decision Delta Analysis, Decision Replay Snapshot metadata/fingerprints, Decision Replay Reconstruction Trace evidence steps/fingerprints, Decision Replay Capsule canonical evidence packaging/fingerprints, Decision Replay Readiness Checklist status, Decision Replay Evidence Source Map relationships, Decision Replay Evidence Boundary Summary metadata, Decision Replay Evidence Field Inventory metadata, Decision Evidence Null-Safety Summary metadata, Decision Evidence Status Rollup metadata, Decision Replay Evidence Lane Navigation Summary metadata, Decision Replay Evidence Lane Dependency Map metadata, Decision Replay Evidence Lane Reference Index metadata, Decision Replay Evidence Lane Dependency Summary metadata, Decision Replay Evidence Lane Consistency Summary metadata, Decision Replay Evidence Reviewer Snapshot metadata, Decision Replay Evidence Reviewer Guidance metadata, Decision Replay Evidence Reviewer Handoff Summary metadata, Decision Replay Evidence Reviewer Closure Summary metadata, top-level Decision Replay Evidence Closure Rollup metadata, and top-level Decision Replay Evidence Closure Checklist metadata where available. It does not call `CloudManager` or AWS, does not mutate cloud resources, does not mutate `LoadBalancer` allocation state, does not execute replay, does not perform what-if mutation, does not persist snapshot, trace, capsule, checklist, source-map, boundary-summary, field-inventory, null-safety-summary, status-rollup, lane-navigation, lane-dependency, lane-reference-index, lane-dependency-summary, lane-consistency-summary, reviewer-snapshot, reviewer-guidance, reviewer-handoff, reviewer-closure, reviewer-closure-rollup, or reviewer-closure-checklist state, or audit logs, does not generate a new source-map, boundary-summary, field-inventory, null-safety, status-rollup, lane-navigation, lane-dependency, lane-reference-index, lane-dependency-summary, lane-consistency-summary, reviewer-snapshot, reviewer-guidance, reviewer-handoff, reviewer-closure, reviewer-closure-rollup, or reviewer-closure-checklist fingerprint, does not add upload/share/download/export/PDF/ZIP behavior, and does not alter the capacity-aware or predictive allocation endpoints.

The same compare response can expose top-level `decisionReplayEvidenceReviewerClosurePacket` metadata derived only from returned closure summary, rollup, and checklist data. The packet is read-only in-response reviewer metadata, not an export/share/download packet, and it does not claim replay proof, scoring proof, correctness validation, production readiness, production certification, guaranteed replay, or production validation.

Optional lightweight reverse proxy mode is available at `/proxy/**` when `loadbalancerpro.proxy.enabled=true`. It forwards real HTTP requests to configured local or simulated upstreams, removes the `/proxy` prefix, preserves the method, path suffix, query string, request body, safe headers, upstream status, and upstream body, and adds `X-LoadBalancerPro-Upstream` plus `X-LoadBalancerPro-Strategy` response headers. The first operator-configured proxy foundation supports named `loadbalancerpro.proxy.routes.<routeName>` entries with path prefixes, per-route strategy selection, and route-specific backend targets without editing Java code; the legacy global upstream list remains supported for existing demos. It reuses the request-level routing strategy registry and skips upstreams configured with `healthy=false`. Optional active health checks can dynamically skip failing local upstreams, optional bounded retries can select another eligible upstream for configured idempotent methods, optional process-local cooldown can temporarily skip repeatedly failing upstreams, and `GET /api/proxy/status` exposes read-only process-local forwarding/failure/retry/cooldown/status-class counters plus effective health state. Open `http://localhost:8080/proxy-status.html` for a no-dependency read-only browser view of that status JSON, upstream table, counters, retry/cooldown state, and local demo curl commands. In prod or cloud-sandbox API-key mode, `/proxy/**` and `GET /api/proxy/status` require `X-API-Key`; in OAuth2 mode they require the configured allocation role, which defaults to `operator`. Local/default API-key mode stays demo-friendly, so keep proxy mode loopback-bound or behind trusted private controls unless deployment-level access control and TLS termination are in place. Strategy-specific local recipes now cover `ROUND_ROBIN`, `WEIGHTED_ROUND_ROBIN`, and health-aware failover selected-upstream evidence with loopback backends only; [`PROXY_DEMO_STACK.md`](docs/PROXY_DEMO_STACK.md) is the single quick-start path for Windows PowerShell, Unix shell, checked-in demo profiles, the Java `ProxyDemoFixtureLauncher`, startup commands, curl verification, status-page review, cleanup, and troubleshooting. [`OPERATOR_PACKAGING.md`](docs/OPERATOR_PACKAGING.md) adds a one-command Maven exec fixture launcher recipe, packaged-jar proxy startup examples, and copy/adapt real-backend property examples under `docs/examples/proxy`. [`OPERATOR_DISTRIBUTION_SMOKE_KIT.md`](docs/OPERATOR_DISTRIBUTION_SMOKE_KIT.md) adds release-free smoke checks for packaged jar startup, Maven exec launcher readiness, proxy profiles, real-backend examples, and packaged static resources. [`LOCAL_ARTIFACT_VERIFICATION.md`](docs/LOCAL_ARTIFACT_VERIFICATION.md) adds release-free local and CI SHA-256, `jar tf`, manifest/resource, static page, demo profile, and launcher-class verification commands, including the `packaged-artifact-smoke` workflow artifact. [`CI_ARTIFACT_CONSUMER_GUIDE.md`](docs/CI_ARTIFACT_CONSUMER_GUIDE.md) shows how to consume JaCoCo, packaged artifact smoke, and SBOM workflow artifacts without creating release assets. [`RELEASE_CANDIDATE_DRY_RUN.md`](docs/RELEASE_CANDIDATE_DRY_RUN.md) turns those checks into one release-free go/no-go packet. The mode is disabled by default, retries and cooldown are disabled by default, non-idempotent retries require explicit opt-in, it does not construct `CloudManager`, does not mutate cloud state, does not persist metrics or cooldown state, and is not a production gateway, benchmark, certification, legal compliance proof, identity proof, TLS terminator, or WebSocket proxy. See [`REVERSE_PROXY_MODE.md`](docs/REVERSE_PROXY_MODE.md), [`REVERSE_PROXY_HEALTH_AND_METRICS.md`](docs/REVERSE_PROXY_HEALTH_AND_METRICS.md), [`REVERSE_PROXY_RESILIENCE.md`](docs/REVERSE_PROXY_RESILIENCE.md), [`PROXY_OPERATOR_STATUS_UI.md`](docs/PROXY_OPERATOR_STATUS_UI.md), [`PROXY_STRATEGY_DEMO_LAB.md`](docs/PROXY_STRATEGY_DEMO_LAB.md), [`PROXY_DEMO_STACK.md`](docs/PROXY_DEMO_STACK.md), [`PROXY_DEMO_FIXTURE_LAUNCHER.md`](docs/PROXY_DEMO_FIXTURE_LAUNCHER.md), [`OPERATOR_PACKAGING.md`](docs/OPERATOR_PACKAGING.md), [`OPERATOR_DISTRIBUTION_SMOKE_KIT.md`](docs/OPERATOR_DISTRIBUTION_SMOKE_KIT.md), [`LOCAL_ARTIFACT_VERIFICATION.md`](docs/LOCAL_ARTIFACT_VERIFICATION.md), [`CI_ARTIFACT_CONSUMER_GUIDE.md`](docs/CI_ARTIFACT_CONSUMER_GUIDE.md), and [`RELEASE_CANDIDATE_DRY_RUN.md`](docs/RELEASE_CANDIDATE_DRY_RUN.md).

Open `http://localhost:8080/routing-demo.html` for the Enterprise Lab routing cockpit legacy route. It calls `/api/health`, Actuator readiness, and the existing `/api/routing/compare` endpoint; loads a deterministic controlled lab routing scenario; displays the selected server and reason per strategy; preserves raw JSON; and provides copyable curl, request payload, normalized response-summary blocks, and reviewer/operator proof notes. Import `postman/LoadBalancerPro.postman_collection.json` and run the legacy `Routing Decision Demo` folder for Postman parity. The routing cockpit is local/operator lab review only, not certification, not benchmark proof, not legal compliance proof, and not identity proof.
Expand Down
4 changes: 3 additions & 1 deletion docs/API_CONTRACTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ The performance baseline runner uses the existing API contracts only; it adds no

The prior CLI experiment harness remains available as an offline comparison path. Run `--adaptive-routing-experiment=all` through `scripts/smoke/adaptive-routing-experiment.ps1 -Package` to generate ignored `target/adaptive-routing-experiments/` evidence. Run `scripts/smoke/enterprise-lab-workflow.ps1 -Package` to generate the Enterprise Lab scenario catalog JSON, lab run JSON, Markdown scorecard summary, and metadata under ignored `target/enterprise-lab-runs/`. Run `scripts/smoke/controlled-adaptive-routing-policy.ps1 -Package` to generate controlled policy evidence under ignored `target/controlled-adaptive-routing/`. Run `scripts/smoke/enterprise-lab-observability-pack.ps1 -Package` to generate metrics JSON, Prometheus-style sample text, Markdown summary, and manifest under ignored `target/enterprise-lab-observability/`. The default runtime allocation behavior remains unchanged; active-experiment remains explicit, guarded, and lab/evaluation-grade rather than production traffic control or production SLO certification.

Routing comparison responses expose `requestedStrategies`, `candidateCount`, `timestamp`, optional response-level `decisionReplayEvidenceReviewerClosureRollup`, optional response-level `decisionReplayEvidenceReviewerClosureChecklist`, and a `results` array. Each result exposes the strategy id, status, selected server id when one is available, the strategy reason, considered candidates, and score map when the strategy reports scores. A no-healthy-server comparison still returns a controlled result with `chosenServerId` set to `null`, empty candidate/scores collections, and an explanatory reason.
Routing comparison responses expose `requestedStrategies`, `candidateCount`, `timestamp`, optional response-level `decisionReplayEvidenceReviewerClosureRollup`, optional response-level `decisionReplayEvidenceReviewerClosureChecklist`, optional response-level `decisionReplayEvidenceReviewerClosurePacket`, and a `results` array. Each result exposes the strategy id, status, selected server id when one is available, the strategy reason, considered candidates, and score map when the strategy reports scores. A no-healthy-server comparison still returns a controlled result with `chosenServerId` set to `null`, empty candidate/scores collections, and an explanatory reason.

Scenario replay responses expose `scenarioId`, `readOnly`, `cloudMutation`, `remediationPlan`, and ordered `steps`. Remediation recommendations are advisory only and must not introduce cloud mutation or execution semantics.

Expand Down Expand Up @@ -89,3 +89,5 @@ Structured API errors expose `status`, `error`, `message`, `path`, `timestamp`,

This repository does not currently include a generated-client build pipeline. Compatibility confidence comes from the OpenAPI path/schema assertions plus representative JSON shape checks. If a future client generator is introduced, keep it lightweight and run it as a contract validation lane without changing release automation or publishing generated artifacts.
`POST /api/routing/compare` remains read-only and recommendation-only. Its top-level response can expose additive reviewer metadata `decisionReplayEvidenceReviewerClosureRollup` and `decisionReplayEvidenceReviewerClosureChecklist`, and its routing result objects can expose additive lab explainability fields: `decisionVector`, `dominantFactorAnalysis`, `decisionDeltaAnalysis`, `decisionReplaySnapshot`, `decisionReplayReconstructionTrace`, `decisionReplayCapsule`, `decisionReplayReadinessChecklist`, `decisionReplayEvidenceSourceMap`, `decisionReplayEvidenceBoundarySummary`, `decisionReplayEvidenceFieldInventory`, `decisionReplayEvidenceNullSafetySummary`, `decisionReplayEvidenceStatusRollup`, `decisionReplayEvidenceLaneNavigationSummary`, `decisionReplayEvidenceLaneDependencyMap`, `decisionReplayEvidenceLaneReferenceIndex`, `decisionReplayEvidenceLaneDependencySummary`, `decisionReplayEvidenceLaneConsistencySummary`, `decisionReplayEvidenceReviewerSnapshot`, `decisionReplayEvidenceReviewerGuidance`, `decisionReplayEvidenceReviewerHandoffSummary`, and `decisionReplayEvidenceReviewerClosureSummary`. The reviewer closure rollup and checklist are derived only from already-built `results[].decisionReplayEvidenceReviewerClosureSummary` data and `decisionReplayEvidenceReviewerClosureRollup` data; the replay snapshot, reconstruction trace, replay capsule, replay readiness checklist, evidence source map, evidence boundary summary, evidence field inventory, evidence null-safety summary, evidence status rollup, evidence lane navigation summary, evidence lane dependency map, evidence lane reference index, evidence lane dependency summary, evidence lane consistency summary, evidence reviewer snapshot, evidence reviewer guidance, evidence reviewer handoff summary, and evidence reviewer closure summary are derived from already-built compare evidence and stable analysis/status/navigation/dependency/reviewer metadata; they do not execute replay, perform what-if mutation, persist audit logs, traces, capsules, checklist state, source-map data, boundary-summary data, field-inventory data, null-safety-summary data, status-rollup data, lane-navigation data, lane-dependency data, lane-reference-index data, lane-dependency-summary data, lane-consistency-summary data, reviewer-snapshot data, reviewer-guidance data, reviewer-handoff data, reviewer-closure data, reviewer-closure-rollup data, or reviewer-closure-checklist data, generate a new source-map, boundary-summary, field-inventory, null-safety, status-rollup, lane-navigation, lane-dependency, lane-reference-index, lane-dependency-summary, lane-consistency-summary, reviewer-snapshot, reviewer-guidance, reviewer-handoff, reviewer-closure, reviewer-closure-rollup, or reviewer-closure-checklist fingerprint, recompute scores, retune weights, or add upload/share/download routes or server-side export/PDF/ZIP generation.

The same top-level response can expose additive reviewer metadata `decisionReplayEvidenceReviewerClosurePacket`. It is derived only from `results[].decisionReplayEvidenceReviewerClosureSummary`, `decisionReplayEvidenceReviewerClosureRollup`, and `decisionReplayEvidenceReviewerClosureChecklist`; it is not an export/share/download packet, does not persist packet data, does not generate a new fingerprint, does not recompute scores, does not execute replay, and does not add server-side export/PDF/ZIP generation.
Loading
Loading