- Code\rebar_pipeline, review_pipeline, pier-program을 정션에서 실제 폴더로 전환 - Code\rhino_mcp 및 CLAUDE_rhino배경.md 추가, .mcp.json은 PYTHONPATH로 새 위치 사용 - pier-program 내부 .git 제거(이력은 backup\pier-program_20261028.bundle에 보관) - worktree 가이드 반영(CLAUDE.local.md, HANDOFF.md) - D:\Rhino-MCP 경로 참조를 새 위치로 치환 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
50 lines
4.0 KiB
Python
50 lines
4.0 KiB
Python
"""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, [
|
|
('''<p class="muted">각 묶음을 열어 값을 도면과 대조·수정한 뒤 확정하세요. 확정 뒤 값이 바뀌면 자동으로 미확정이 됩니다.</p>
|
|
<div class="wrap"><table>
|
|
<tr><th>파일</th><th>묶음</th><th>상태</th><th>확정자</th><th>확정 시각</th></tr>''',
|
|
'''<!-- stage A 2026-10-16 -->
|
|
<p class="muted">각 묶음을 열어 값을 도면과 대조·수정한 뒤 확정하세요. 확정 뒤 값이 바뀌면 자동으로 미확정이 됩니다.
|
|
<b>변수 등급</b>: V1 값 · V2 목록 · V3 생성(화면 편집 차단) · F 고정(바꾸면 사유 필요). <b>값 출처</b>는 값이 보통 어디서 오는지입니다.</p>
|
|
{% if origin_same %}
|
|
<p class="warn">▲ 템플릿 원본 그대로인 필수 묶음 {{ origin_same|length }}개 — 템플릿을 복사한 뒤 한 번도 바뀌지 않았습니다. 새 도면과 대조(후보 반영·값 수정)하기 전에 확정하면 원본 교각의 모델이 PASS로 나올 수 있습니다:
|
|
{% for s in origin_same %}<a href="{{ url_for('section', name=p.name, which=s.file, key=s.key) }}">{{ s.file }}.{{ s.key }}</a>{% if not loop.last %}, {% endif %}{% endfor %}</p>
|
|
{% elif not has_origin %}<p class="muted">이 교각은 템플릿 복사 기록이 없어 '템플릿 원본 그대로' 여부를 표시하지 않습니다.</p>{% endif %}
|
|
<div class="wrap"><table>
|
|
<tr><th>파일</th><th>묶음</th><th>변수 등급</th><th>값 출처</th><th>상태</th><th>확정자</th><th>확정 시각</th></tr>'''),
|
|
(''' <td><a href="{{ url_for('section', name=p.name, which=s.file, key=s.key) }}">{{ s.key }}</a></td>
|
|
''', ''' <td><a href="{{ url_for('section', name=p.name, which=s.file, key=s.key) }}">{{ s.key }}</a></td>
|
|
<td>{% if s.info %}<span class="muted">참고</span>{% else %}<span title="{{ s.meta.note }}">{{ s.meta.grade }} {{ grades[s.meta.grade] }}</span>{% endif %}</td>
|
|
<td>{% if s.meta.origin and s.required %}<span class="warn">▲ 템플릿 원본 그대로</span>{% elif s.meta.origin %}<span class="muted">템플릿 원본 그대로</span>{% else %}{{ s.meta.source|join(' · ') }}{% endif %}</td>
|
|
'''),
|
|
])
|
|
|
|
patch(sec, [
|
|
('''<p class="muted">{% if which == 'expected' %}''', '''<!-- stage A 2026-10-16 -->
|
|
<p><b>{{ meta.grade }} {{ grades[meta.grade] }}</b> · 값 출처 {{ meta.source|join(' · ') }}{% if meta.origin %} · <span class="warn">▲ 템플릿 원본 그대로</span>{% endif %}
|
|
<span class="muted"> — {{ meta.note }}{% if meta.fixed_fields %} (고정 항목: {{ meta.fixed_fields|join(', ') }}){% endif %}</span></p>
|
|
{% if meta.grade == 'V3' %}<p class="fail">■ 생성 변수(V3)는 화면에서 직접 고칠 수 없습니다. 판독 스크립트를 다시 실행해 목록을 만든 뒤 반영하세요. 저장 단추는 거부됩니다.</p>
|
|
{% elif meta.grade == 'F' or meta.fixed_fields %}<p class="warn">▲ 이 묶음에는 고정(F) 항목이 있습니다. 바꾸면 같은 템플릿이 아닐 수 있으므로 <b>바꾸는 사유</b>를 입력해야 저장되고, 사유는 기록됩니다.</p>{% endif %}
|
|
<p class="muted">{% if which == 'expected' %}'''),
|
|
(''' <textarea name="value" spellcheck="false">{{ text }}</textarea>
|
|
<p><button>저장</button></p>''', ''' <textarea name="value" spellcheck="false">{{ text }}</textarea>
|
|
{% if meta.grade == 'F' or meta.fixed_fields %}<p>고정 항목을 바꾸는 사유 <input type="text" name="reason" size="60"></p>{% endif %}
|
|
<p><button>저장</button></p>'''),
|
|
])
|
|
print("patched templates")
|