"""Stage A (2026-10-16): pier page columns (변수 등급 / 값 출처) and origin notice, section page grade + reason field.""" from pathlib import Path T = Path(__file__).resolve().parents[2] / "web" / "templates" pier, sec = T / "pier.html", T / "section.html" def patch(path, pairs): s = path.read_text(encoding="utf-8") assert "stage A" not in s, f"{path.name} already patched" for a, b in pairs: assert s.count(a) == 1, (path.name, a[:60]) s = s.replace(a, b) path.write_text(s, encoding="utf-8") patch(pier, [ ('''

각 묶음을 열어 값을 도면과 대조·수정한 뒤 확정하세요. 확정 뒤 값이 바뀌면 자동으로 미확정이 됩니다.

''', '''

각 묶음을 열어 값을 도면과 대조·수정한 뒤 확정하세요. 확정 뒤 값이 바뀌면 자동으로 미확정이 됩니다. 변수 등급: V1 값 · V2 목록 · V3 생성(화면 편집 차단) · F 고정(바꾸면 사유 필요). 값 출처는 값이 보통 어디서 오는지입니다.

{% if origin_same %}

▲ 템플릿 원본 그대로인 필수 묶음 {{ origin_same|length }}개 — 템플릿을 복사한 뒤 한 번도 바뀌지 않았습니다. 새 도면과 대조(후보 반영·값 수정)하기 전에 확정하면 원본 교각의 모델이 PASS로 나올 수 있습니다: {% for s in origin_same %}{{ s.file }}.{{ s.key }}{% if not loop.last %}, {% endif %}{% endfor %}

{% elif not has_origin %}

이 교각은 템플릿 복사 기록이 없어 '템플릿 원본 그대로' 여부를 표시하지 않습니다.

{% endif %}
파일묶음상태확정자확정 시각
'''), (''' ''', ''' '''), ]) patch(sec, [ ('''

{% if which == 'expected' %}''', '''

{{ meta.grade }} {{ grades[meta.grade] }} · 값 출처 {{ meta.source|join(' · ') }}{% if meta.origin %} · ▲ 템플릿 원본 그대로{% endif %} — {{ meta.note }}{% if meta.fixed_fields %} (고정 항목: {{ meta.fixed_fields|join(', ') }}){% endif %}

{% if meta.grade == 'V3' %}

■ 생성 변수(V3)는 화면에서 직접 고칠 수 없습니다. 판독 스크립트를 다시 실행해 목록을 만든 뒤 반영하세요. 저장 단추는 거부됩니다.

{% elif meta.grade == 'F' or meta.fixed_fields %}

▲ 이 묶음에는 고정(F) 항목이 있습니다. 바꾸면 같은 템플릿이 아닐 수 있으므로 바꾸는 사유를 입력해야 저장되고, 사유는 기록됩니다.

{% endif %}

{% if which == 'expected' %}'''), ('''

''', ''' {% if meta.grade == 'F' or meta.fixed_fields %}

고정 항목을 바꾸는 사유

{% endif %}

'''), ]) print("patched templates")
파일묶음변수 등급값 출처상태확정자확정 시각
{{ s.key }}{{ s.key }} {% if s.info %}참고{% else %}{{ s.meta.grade }} {{ grades[s.meta.grade] }}{% endif %} {% if s.meta.origin and s.required %}▲ 템플릿 원본 그대로{% elif s.meta.origin %}템플릿 원본 그대로{% else %}{{ s.meta.source|join(' · ') }}{% endif %}