{% extends "base.html" %} {% block title %}게이트 · {{ p.name }}{% endblock %} {% block body %} {% if running %}{% endif %}
게이트마다 G1부터 그 단계까지 새로 만들고, 저장한 파일을 다시 열어 검사합니다(재로드). PASS 조건: 계획 FAIL 외 FAIL 0 · 수평/수직 음성 시험 검출 · 재로드 객체 수 일치 · 앞 게이트 객체 불변. 다음 게이트는 앞 게이트가 승인되어야 실행할 수 있습니다.{% if running %} 실행 중 — 5초마다 새로 고칩니다.{% endif %}
{% if out_of_scope %}이 교각의 범위 밖 게이트: {{ out_of_scope|join(', ') }} (실행·승인 대상 아님)
{% endif %}최근 일괄 실행: {{ batch.state }} · 판정자 {{ batch.by }} · {% if batch.started %}{{ batch.started }} 시작 · {% endif %}{{ batch.at }}{% if batch.state != '실행 중' %} 끝{% endif %}
{% if aborted %}{{ batch.error }}{% endif %}.
{% elif batch.reason == 'fail' %}{{ batch.gate }}가 FAIL이라 승인하지 않고 멈췄습니다.
{% elif batch.reason == 'blocked' %}실행 조건이 맞지 않아 시작하지 못했습니다.
{% elif batch.reason == 'killed' %}서버가 멈추거나 다시 켜져서 끝나지 못했습니다.
{% else %}이유가 기록되지 않았습니다.{% endif %}
최신 PASS 결과가 있는 게이트는 다시 실행하지 않고 바로 승인합니다. 결과가 없거나 입력이 바뀐 게이트는 실행한 뒤 PASS일 때만 승인합니다. FAIL·오류·실행 조건 미충족이면 그 게이트에서 멈추고 승인하지 않습니다. 승인 기록의 의견란에 '일괄 실행 자동 승인'이 남습니다. 결과는 아래 게이트별 표에서 확인하세요.
{% else %}모든 게이트가 승인되어 있습니다.
{% endif %}게이트 결과·도면 표·승인 기록으로 자동 작성합니다. 승인되지 않은 게이트가 있으면 '미완료'로 표시됩니다. 판정 확정과 3~5장 서술은 담당자가 합니다.
{% for g in rows %}결과 시각 {{ g.report_at or '-' }}{% if g.report.mode == 'batch' %} · 일괄 실행{% endif %} {% if g.older %}이전 실행 결과 — 이번 일괄 실행에서 갱신되지 않았습니다{% endif %}
{% endif %} {% if g.show_partial %}{% set pr = g.partial %}{{ g.state }}: {{ g.job.log[-1] if g.job.log else '' }}
{% elif g.state == '중단됨' %}중단됨: 이전 실행이 끝나지 않은 채 서버가 멈췄습니다. 다시 실행하세요.
{% elif g.state == '오류' %}오류
{{ g.job.error }}{% endif %}
{% if g.blockers %}실행 조건 미충족: {% for b in g.blockers %}{{ b }}{% if not loop.last %}, {% endif %}{% endfor %}
{% else %}{% endif %} {% if g.report %}{% set r = g.report %}| 검사 | {{ r.summary.passed }} / {{ r.summary.total }} PASS ({{ r.checker }}) |
|---|---|
| 미계획 FAIL | {% if r.unplanned_fails %}FAIL {{ r.unplanned_fails|length }}건
|
| 계획 FAIL (승인된 예외) | {% if r.planned_fails %}계획 FAIL {{ r.planned_fails|length }}건
|
| 음성 시험 | {% for k, v in r.negative.items() %}{{ '수평' if k == 'negH' else '수직' }} {{ v.move }} →
{% if v.detected %}검출 ({{ v.new_fails|join(', ') }}){% else %}미검출{% endif %} {% endfor %} |
| 재로드 | {% if r.reload.ok is none %}생략 {{ r.reload.skipped }}{% elif r.reload.ok %}일치 생성 {{ r.reload.built }} / 다시 연 파일 {{ r.reload.reopened }}{% else %}불일치 생성 {{ r.reload.built }} / 다시 연 파일 {{ r.reload.reopened }}{% endif %} |
| 앞 게이트 객체 불변 | {% if r.unchanged.ok is none %}생략 {{ r.unchanged.skipped }}{% elif r.unchanged.ok %}불변 {{ r.unchanged.compared }}개 비교{% if r.unchanged.against %} (기준 {{ r.unchanged.against }}){% endif %}{% else %}변경 {{ r.unchanged.compared }}개 비교{% endif %} |
| 모델 | {% if r.model %}{{ p.name }}_{{ g.id }}.3dm 내려받기{% else %}일괄 실행 — 중간 모델 저장 안 함 (G5 모델에 포함){% endif %} · {{ r.secs }}초{% if r.mode == 'batch' %} (일괄 세션 {{ r.session_secs }}초){% endif %} |
최근 판정: {{ g.approval.decision }} · {{ g.approval.by }} · {{ g.approval.at }}{% if g.approval.note %} · {{ g.approval.note }}{% endif %}
{% endif %} {% endif %} {% endfor %} {% endblock %}