Files
physicalCombinatorics/src/physcom_web/templates/domains/form.html
Andrew Simonson 8dfe3607b1 Add domain CRUD, energy density constraint, LLM status, reset results, score display fixes
Domain management:
- Add domain list/detail/form templates and full CRUD routes (domains.py)
- Add metric bound add/edit/delete via HTMX partials (_metrics_table.html)

Energy density constraint (Rule 6 in ConstraintResolver):
- Hard-block combos where power source provides <25% of platform's required Wh/kg
- Warn (conditional) when under-density but within 4x
- Solar Sail exempt (no stored energy); Airplane requires 400 Wh/kg, Spaceship 2000 Wh/kg
- Add energy_density_wh_kg provides to all 8 stored-energy power sources in seed data
- 3 new constraint resolver tests

LLM-complete status:
- Pipeline Pass 4 now sets combo status to llm_reviewed after successful LLM review
- update_combination_status guards against downgrading: scored won't overwrite
  llm_reviewed or reviewed; llm_reviewed won't overwrite reviewed
- Add badge-llm_reviewed CSS style (light blue)

Reset results:
- Repository.reset_domain_results() deletes combination_results, combination_scores,
  and pipeline_runs for a domain; pipeline re-evaluates on next run
- POST /results/<domain>/reset route with flash confirmation
- "Reset results" danger button with JS confirm dialog in results list

Fix composite score 0 displaying as --- (Jinja2 falsy 0.0 bug):
- Change `if r.composite_score` to `if r.composite_score is not none`

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-19 11:13:00 -06:00

25 lines
810 B
HTML

{% extends "base.html" %}
{% block title %}New Domain — PhysCom{% endblock %}
{% block content %}
<h1>New Domain</h1>
<div class="card">
<form method="post">
<div class="form-group">
<label for="name">Name</label>
<input type="text" id="name" name="name"
value="{{ request.form.get('name', '') }}" required placeholder="e.g. Urban Transit">
</div>
<div class="form-group">
<label for="description">Description</label>
<textarea id="description" name="description" rows="3">{{ request.form.get('description', '') }}</textarea>
</div>
<div class="form-actions">
<button type="submit" class="btn btn-primary">Create</button>
<a href="{{ url_for('domains.domain_list') }}" class="btn">Cancel</a>
</div>
</form>
</div>
{% endblock %}