[pull] master from industrial-optimization-group:master#149
Merged
pull[bot] merged 28 commits intolight-weaver:masterfrom Apr 2, 2026
Merged
[pull] master from industrial-optimization-group:master#149pull[bot] merged 28 commits intolight-weaver:masterfrom
pull[bot] merged 28 commits intolight-weaver:masterfrom
Conversation
- Add what-if scenario simulation to Decision Journey view - New backend POST /method/enautilus/simulate endpoint runs E-NAUTILUS greedily to completion for a chosen objective (best or worst), ephemeral with no DB writes - New ENautilusSimulateRequest/Response/StepResult models with deprioritize flag for worst-case selection - Frontend what-if buttons in iteration detail panel: "best" (blue) and "worst" (red) per objective - Chart overlay renders simulated path as dashed lines with hollow circle markers - Comparison table shows actual vs what-if final values with colored deltas - Extract normalizePoint, buildNormalizationMaps, computeSimulatedJourneySteps helpers in journey-utils - Highlight selected iteration in chart with vertical band - Default visualization pane to 65% height for more chart room - Regenerate frontend client
…DEO into clinic-clean
- Replace hardcoded clinic map system with metadata-driven site selection map - Add SiteSelectionMetaData DB model (follows ForestProblemMetaData pattern) - Add POST /site-selection/load_metadata endpoint (with ownership check) - Add POST /site-selection/map endpoint (reads metadata + solution variables) - Remove /clinic/ router, ClinicMapRequest/Response models, and clinic_map.py - Rename clinic-map.svelte to site-selection-map.svelte (accepts problem_id prop) - Add map metadata upload dialog on Problems page (JSON file upload) - Fix orval import mismatches after regeneration (getProblemProblemGetPost, addRepresentativeSolutionSet) - Fix swapped arguments in fetch_interactive_session call (utils.py line 229) - Add test_site_selection.py with model and endpoint tests
- Add constrained variant endpoint POST
/problem/{problem_id}/constrained_variant
- Add VariableFixing, ConstrainedVariantRequest,
ConstrainedVariantResponse models
- Add is_temporary and parent_problem_id fields to ProblemDB for variant
tracking
- Use SessionContextGuard for ownership/existence checks in the new
endpoint
- Simplify DELETE /problem/{problem_id}: owners can delete any of their
problems
- Add test_constraint_variant.py with 12 tests (model, endpoint, delete
behavior)
- Fix infinite loop in dmitry_forest_problem_disc() (use relative path
instead of walking to /DESDEO)
- Fix SessionContextGuard HTTP status codes: 404 for missing resources, 403 for ownership failures (was 400 for both) - Update fetch_user_problem to query by ID first, then check ownership separately - Update test_delete_problem.py: unauthorized deletion now correctly expects 403 instead of 401 - Update test_constraint_variant.py: wrong_owner expects 403, not_found expects 404
- Add map interaction: click site markers to cycle free → restricted → forced - Multiple sites per city node are constrained together - Re-solve with RPM using E-NAUTILUS final objectives as aspiration levels - Constrained variant inherits parent problem's solver metadata (pyomo_cbc) - Fix tensor variable indexing in constraints: use ["At", symbol, ...indices] for Pyomo compatibility - Unroll tensor variables in RPM results for frontend compatibility (sv → sv_1..sv_60) - Return site_variable_symbols and site_node_names from /site-selection/map endpoint - Add comparison bottom panel with tabbed Parallel Coordinates / Comparison Table views - Solution tab shows constrained solution with original as dashed comparison line - "Use this solution" accepts constrained result, "Reset" reverts to original - Clear constraint markers after successful re-solve to show natural solution colors - Cleanup temporary problem variants on reset, navigation, and re-solve
- Add catch-all proxy route /api/[...path] that forwards browser API calls to the upstream API using event.fetch, so handleFetch intercepts for cookie injection and 401/token-refresh handling - Fix getUrl to return relative /api/<path> on the browser side instead of a direct cross-origin URL, routing all browser traffic through the proxy - Switch server-side detection in getUrl from process.env check to typeof window === 'undefined' with http://localhost:8000 fallback - Remove client-side 401 retry logic from customFetch — now handled server-side by handleFetch via the proxy - Remove dead Vite /api proxy config from vite.config.ts
- Updated docs to include guide on how to setup fullstack on OpenShift using the oc tool from a terminal. - Polished deployment files.
- Add /manage-users page for analysts and admins to create DM and analyst accounts. - Guard the route server-side; restrict POST /add_new_dm API endpoint to analyst/admin (was public) - Populate auth store on topbar mount via /user_info to enable role-based nav visibility - Enable Orval Zod body schema generation and regenerate client - Fix API_BASE_URL in webui README
- Analysts and admins can view, delete, and manage all users' problems - Added fetch_problem_with_role_check helper in utils.py (role-aware ownership bypass) - Problem listing endpoints return all problems for analysts, own only for DMs - Problem action endpoints (delete, solver, JSON, repr sets) allow analyst access to any problem - Problems UI: user filter dropdown (default "Myself"), Owner field in detail panel - Problems define page: DM selector for analyst to assign problem to a DM on creation - Fixed test_delete_problem_unauthorized (analyst role changed to DM) - Regenerated orval client with new DM users endpoint and target_user_id params
- Analysts and admins can view, create, and delete interactive sessions
for any user
- Added fetch_interactive_session_with_role_check helper in utils.py
(role-aware ownership bypass)
- Session listing returns all sessions for analysts, own only for DMs;
empty list returns 200+[] instead of 404
- POST /session/new accepts ?target_user_id= for analysts to create
sessions on behalf of DMs
- GET /session/get/{id} and DELETE /session/{id} now enforce ownership
for DMs (fixes latent security bug)
- Fixed InteractiveSessionBase missing from_attributes=True (POST
/session/new was returning {})
- Sessions UI: user filter dropdown (default "Myself"), Owner column,
"Create for" DM selector
- Regenerated orval client with new session endpoint params
- Updated config files.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.4)
Can you help keep this open source service alive? 💖 Please sponsor : )