diff --git a/app/data_services.py b/app/data_services.py index b496275a..315a9718 100644 --- a/app/data_services.py +++ b/app/data_services.py @@ -2026,9 +2026,6 @@ def workflow_model(workflow: WorkflowSpec, *, root: Path) -> dict[str, Any]: if not path.is_file(): continue config = yaml.safe_load(path.read_text(encoding="utf-8")) or {} - if workflow.id == "envelope-sens": - path = path.parent / config["ggv_config"] - config = yaml.safe_load(path.read_text(encoding="utf-8")) or {} dofs.add(int(config.get("model_dof", config.get("generation", {}).get("model_dof", 3)))) fidelity = workflow.fidelity if dofs: diff --git a/app/registry.py b/app/registry.py index 716a8d0c..fa8fc1c2 100644 --- a/app/registry.py +++ b/app/registry.py @@ -1095,7 +1095,7 @@ def build_workflows() -> tuple[WorkflowSpec, ...]: ), WorkflowSpec( id="envelope-sens", - engine="DynPy", + engine="Legacy envelope", fidelity="QSS", runtime="Python", group="opt", diff --git a/app/static/app.js b/app/static/app.js index 482b2e3d..bf58af13 100644 --- a/app/static/app.js +++ b/app/static/app.js @@ -5628,7 +5628,7 @@ function studyDescription(workflow) { ymd: "Beta and steer sweeps for yaw moment authority.", "vehicle-review": "Report-ready vehicle, envelope, and rubric coverage.", "standard-sens": "Modelica DOE around the standard simulation model.", - "envelope-sens": "Fast reduced-order sensitivity sweep for envelope metrics.", + "envelope-sens": "Legacy capacity-model sensitivity sweep for envelope metrics.", }[workflow?.id] || workflow?.config?.path || ""; } @@ -5656,7 +5656,7 @@ function studyWorkflowGuide(workflow) { }, "envelope-sens": { title: "Envelope Sensitivity", - copy: "The sampler defines a reduced-order sensitivity study of envelope settings.", + copy: "This study uses the legacy tire-capacity and yaw models, not DynPy or its selected DOF.", steps: ["Vehicle selected", "Sampler settings", "Study evaluation"], }, }[workflow?.id] || { diff --git a/docs/simulation-entrypoints.md b/docs/simulation-entrypoints.md index 5cacc06a..37560bf3 100644 --- a/docs/simulation-entrypoints.md +++ b/docs/simulation-entrypoints.md @@ -132,7 +132,7 @@ When publishing results, use the workflow name or fidelity level in figure capti Sensitivity and design-of-experiments (DOE) runs sweep parameters across **any** of the above simulators: - `StandardSens`: sweeps StandardSim studies (VehicleSim/FourPostSim) -- `EnvelopeSens`: sweeps EnvelopeSim outputs (GGV/YMD generation) +- `EnvelopeSens`: sweeps the legacy capacity and yaw models. It does not use DynPy or the DOF selected for GGV/YMD. - `opt-standard`, `opt-envelope`, `opt-refined`: DOE targets using the sensitivity layer See [doe-reverse-engineering.md](doe-reverse-engineering.md) for details. diff --git a/optimization/envelope/_pipeline/sensitivity.py b/optimization/envelope/_pipeline/sensitivity.py index ae643589..1bb8dd34 100644 --- a/optimization/envelope/_pipeline/sensitivity.py +++ b/optimization/envelope/_pipeline/sensitivity.py @@ -208,9 +208,9 @@ def envelope_scope_table(config_path: Path = ENVELOPE_CONFIG) -> pd.DataFrame: "label": str(var.get("label", path)), "included": included, "reason": ( - "represented by the quasi-static EnvelopeSim reduced model" + "represented by the legacy envelope capacity model" if included - else "excluded: not represented by the current EnvelopeSim reduced model" + else "excluded: not represented by the legacy envelope capacity model" ), } ) diff --git a/tests/test_app_shell.py b/tests/test_app_shell.py index 60813d8a..1e84150a 100644 --- a/tests/test_app_shell.py +++ b/tests/test_app_shell.py @@ -2110,3 +2110,13 @@ def test_result_series_carries_known_units_without_guessing_unknown_channels(tmp signals=['accY', 'roll', 'yawVel', 'custom']) assert payload['x_unit'] == 's' assert [series['unit'] for series in payload['series']] == ['m/s²', 'rad', 'rad/s', None] + + +def test_envelope_sensitivity_identifies_legacy_model(tmp_path: Path) -> None: + workflow = next(item for item in app.WORKFLOWS if item.id == "envelope-sens") + from app.data_services import workflow_model + + model = workflow_model(workflow, root=tmp_path) + assert model["engine"] == "Legacy envelope" + assert model["model_dofs"] == [] + assert model["fidelity"] == "QSS"