Forced ventilation is injected once across both fabric-first phases 🟩

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Khalim Conn-Kowlessar 2026-07-09 11:42:54 +00:00
parent 0220bee87c
commit 471728db0a

View file

@ -271,13 +271,23 @@ def optimise_package_fabric_first(
leftover_budget: Optional[float] = (
None if budget is None else budget - _package_cost(fabric_package.selected)
)
# A dependency phase 1 already injected (e.g. the wall's ventilation) is
# satisfied for the whole package: phase 2 must not force it in again.
fabric_types: set[MeasureType] = {
scored.option.measure_type for scored in fabric_package.selected
}
outstanding_dependencies: list[MeasureDependency] = [
dependency
for dependency in dependencies
if dependency.required.option.measure_type not in fabric_types
]
top_up: OptimisedPackage = optimise_package(
groups=_rescored_groups(remaining_groups, post_fabric_scorer, baseline_epc),
scorer=post_fabric_scorer,
baseline_epc=baseline_epc,
budget=leftover_budget,
target_sap=target_sap,
dependencies=dependencies,
dependencies=outstanding_dependencies,
)
return OptimisedPackage(
selected=[*fabric_package.selected, *top_up.selected],