{% extends "base.html" %} {% block title %}Combination #{{ combo.id }} — PhysCom{% endblock %} {% block content %}
Domain
{{ domain.name }}
Status
{% if result and result.domain_block_reason %} domain_blocked {% else %} {{ combo.status }} {% endif %}
{% if result and result.domain_block_reason %}
Domain Block Reason
{{ result.domain_block_reason }}
{% endif %} {% if combo.block_reason %}
Block Reason
{{ combo.block_reason }}
{% endif %} {% if result %}
Composite Score
{{ "%.4f"|format(result.composite_score) }}
Pass Reached
{{ result.pass_reached }}
{% if result.qualitative_rating %}
Rating
{{ result.qualitative_rating }}
{% endif %} {% if result.novelty_flag %}
Novelty
{{ result.novelty_flag }}
{% endif %} {% if result.llm_review %}
LLM Review
{{ result.llm_review }}
{% endif %} {% if result.human_notes %}
Human Notes
{{ result.human_notes }}
{% endif %} {% endif %}

Entities

{% for e in combo.entities %}

{{ e.name }}

{{ e.dimension }}

{{ e.description }}

{% for dep in e.dependencies %} {% endfor %}
KeyValueType
{{ dep.key }} {{ dep.value|qty(dep.unit) }} {{ dep.constraint_type }}
{% endfor %}
{% if scores %}

Per-Metric Scores

{% set bounds = {} %} {% for mb in domain.metric_bounds %} {% set _ = bounds.update({mb.metric_name: mb}) %} {% endfor %}
{% for s in scores %} {% set mb = bounds.get(s.metric_name) %} {% set unit = s.metric_unit or '' %} {% endfor %}
Metric Raw Value Domain Range Position Normalized Weight
{{ s.metric_name }}{{ s.raw_value|qty(unit) if s.raw_value is not none else '—' }} {%- if mb -%} {{ mb.norm_min|qty(unit) }} — {{ mb.norm_max|qty(unit) }} {%- else -%} — {%- endif -%} {%- if mb and s.raw_value is not none -%} {%- if s.raw_value <= mb.norm_min -%} at/below min{{ ' (best)' if mb.lower_is_better else '' }} {%- elif s.raw_value >= mb.norm_max -%} at/above max{{ ' (worst)' if mb.lower_is_better else '' }} {%- else -%} {% set raw_pct = (s.raw_value - mb.norm_min) / (mb.norm_max - mb.norm_min) * 100 %} {# For lower_is_better metrics, raw_pct alone measures distance from norm_min, not quality -- a value near norm_min (excellent, cost near its floor) would otherwise render as a near-empty bar. Invert so the bar and percentage always mean "how good", matching the normalized score's own higher-is-better convention. #} {% set pct = ((100 - raw_pct) if mb.lower_is_better else raw_pct) | int %}
~{{ pct }}%{{ ' (lower is better)' if mb.lower_is_better else '' }} {%- endif -%} {%- else -%} — {%- endif -%}
{{ "%.4f"|format(s.normalized_score) if s.normalized_score is not none else '—' }} {{ "%.0f%%"|format(mb.weight * 100) if mb else '—' }}{{ ' ↓' if mb and mb.lower_is_better else '' }}
{% endif %} {% if scores %}

Explore: Scale the Build

Purely exploratory — nothing here is saved. Drag a slider to pick a platform weight class, motor size, or battery size directly, and see how power density, range, and the resulting score respond. Sliders open on the saved build above, which is already the score-optimized allocation for this domain (subject to the platform's physical performance floor), so the starting point is the best build already found, not an arbitrary or merely functional one.

{% if explore_result is not none %} {% set r = explore_result %}
{{ "%.1f"|format(r.platform_mass) }}kg
{{ "%.1f"|format(r.actuator_mass) }}kg
{{ "%.1f"|format(r.storage_mass) }}kg
{% endif %}
{% include "results/_explore_result.html" %}
{% endif %}

Human Review

{% include "results/_review_form.html" %}
{% endblock %}