From 0456c2d3d7b245d06cefda10e02c95ba9c082bae Mon Sep 17 00:00:00 2001 From: umsangdon Date: Sun, 18 Oct 2026 13:32:07 +0900 Subject: [PATCH] =?UTF-8?q?fix(B05=20=EB=85=B8=EC=84=A0=20=EC=B6=94?= =?UTF-8?q?=EC=B2=9C=20=EC=B0=BD):=20=EC=83=81=ED=95=9C=20=ED=92=82=20?= =?UTF-8?q?=EA=B8=80=20=3D=20=ED=83=90=EC=83=89=20=EB=A7=81=ED=81=AC=20?= =?UTF-8?q?=ED=95=9C=EB=8F=84=2014=20=E2=86=92=20N=20%=20=EB=A1=9C=20?= =?UTF-8?q?=ED=92=82(=EC=A7=80=ED=98=95=EC=83=81=20=EB=AA=BB=20=EC=9D=B4?= =?UTF-8?q?=EC=9D=8C=20=C2=B7=204=20m=20=EB=A7=88=EB=94=94)=20=C2=B7=20?= =?UTF-8?q?=EB=8F=84=EC=9B=80=EB=A7=90=20=E3=80=8C=ED=83=90=EC=83=89=20?= =?UTF-8?q?=EB=A7=81=ED=81=AC=20=ED=95=9C=EB=8F=84=EB=A5=BC=20=ED=92=82?= =?UTF-8?q?=E3=80=8D=20(421-3)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Ji4nuyLVHcxrXWHTdb5nRD --- B05_Profile/B05_Profile_UI_RouteEdit_Initial_Model.ts | 8 +++++--- B05_Profile/B05_Profile_UI_RouteEdit_Recommend_Help.ts | 4 ++-- resources/tester/test_b05_routeedit_initial.py | 4 +++- resources/tester/test_b05_routeedit_initial_roundtrip.py | 2 +- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/B05_Profile/B05_Profile_UI_RouteEdit_Initial_Model.ts b/B05_Profile/B05_Profile_UI_RouteEdit_Initial_Model.ts index bfc290474..33c364519 100644 --- a/B05_Profile/B05_Profile_UI_RouteEdit_Initial_Model.ts +++ b/B05_Profile/B05_Profile_UI_RouteEdit_Initial_Model.ts @@ -602,12 +602,14 @@ export function endsLine(choice: InitialChoice | null): string { return `시종점 높이 차가 상한을 넘음(평균 ${fixed(choice.endsGradePct ?? null, 1, "%")}) — 종단으로 못 맞춤 · 노선을 늘려야 함`; } -/** 상한을 풀었을 때만 — 「지형상 14% 로 못 이어져 상한을 23.5% 로 풂」. 아니면 빈 글. */ +/** 탐색 링크 한도를 풀었을 때만 — 「탐색 링크 한도 14.0 → 23.5% 로 풂(지형상 14.0% 로 못 이음 · 4 m 마디)」. 아니면 빈 글. + * 엔진 탐색 격자(4 m) 링크 기울기 한도 — 원지반 기울기(참고 · 측점 20 m)와 잣대가 다름(421-3). */ export function relaxedLine(choice: InitialChoice | null): string { const bound = choice?.terrainBoundPct; if (bound === null || bound === undefined) return ""; - const limit = fixed(choice?.criteria?.maxGradePct ?? null, 1, "%"); - return `지형상 ${limit} 로 못 이어져 상한을 ${fixed(bound, 1, "%")} 로 풂`; + const limitPct = choice?.criteria?.maxGradePct ?? null; + const limit = fixed(limitPct, 1, "%"); + return `탐색 링크 한도 ${fixed(limitPct, 1, "")} → ${fixed(bound, 1, "%")} 로 풂(지형상 ${limit} 로 못 이음 · 4 m 마디)`; } /** 캐시에서 마지막 초기값을 읽는다. 없거나 꼴이 틀리면 null(= 예상노선 추적). */ diff --git a/B05_Profile/B05_Profile_UI_RouteEdit_Recommend_Help.ts b/B05_Profile/B05_Profile_UI_RouteEdit_Recommend_Help.ts index 9fa47c008..605d85a07 100644 --- a/B05_Profile/B05_Profile_UI_RouteEdit_Recommend_Help.ts +++ b/B05_Profile/B05_Profile_UI_RouteEdit_Recommend_Help.ts @@ -130,8 +130,8 @@ const LINES_HELP: Array<{ name: string; text: string }> = [ text: "시점 · 종점 높이 차 ÷ 노선 연장이 상한을 넘으면 알림 — 종단으로 못 맞춤 · 노선을 늘려야 함", }, { - name: "상한을 풂", - text: "지형상 상한 안으로는 시점 · 종점을 이을 수 없어 꼭 필요한 만큼만 상한을 올린 경우", + name: "탐색 링크 한도를 풂", + text: "노선 찾기(4 m 마디 원지반)에서 상한 안 링크로는 시점 · 종점을 못 이어 꼭 필요한 만큼만 링크 한도를 올린 경우 — 원지반 기울기(참고 · 측점 20 m)와 잣대가 달라 값이 다를 수 있음", }, { name: "거의 같은 노선", diff --git a/resources/tester/test_b05_routeedit_initial.py b/resources/tester/test_b05_routeedit_initial.py index 0dfa3efff..479001a1f 100644 --- a/resources/tester/test_b05_routeedit_initial.py +++ b/resources/tester/test_b05_routeedit_initial.py @@ -105,7 +105,9 @@ def test_제약_못_지킨_구간과_상한_풂(results): "제약 못 지킨 구간 7곳: No.0+0.0 R 5.0m(곡선 둘 자리 모자람)" ) assert labels["violationsMany"].endswith(" 외 2곳") - assert labels["relaxed"] == "지형상 14.0% 로 못 이어져 상한을 23.5% 로 풂" + assert ( + labels["relaxed"] == "탐색 링크 한도 14.0 → 23.5% 로 풂(지형상 14.0% 로 못 이음 · 4 m 마디)" + ) assert labels["notRelaxed"] == "" diff --git a/resources/tester/test_b05_routeedit_initial_roundtrip.py b/resources/tester/test_b05_routeedit_initial_roundtrip.py index d6c878eb3..9b6334e1e 100644 --- a/resources/tester/test_b05_routeedit_initial_roundtrip.py +++ b/resources/tester/test_b05_routeedit_initial_roundtrip.py @@ -233,7 +233,7 @@ def test_제약_못_지킨_구간이_목록과_화면_줄에(rounds): assert applied["violations"].startswith(head), applied["violations"] if answer.get("relaxed"): bound = f"{answer['terrain_bound_pct']:.1f}%" - assert applied["relaxed"].endswith(f"상한을 {bound} 로 풂"), applied["relaxed"] + assert f"→ {bound} 로 풂(" in applied["relaxed"], applied["relaxed"] else: assert applied["relaxed"] == "" smooth = answer["criteria"]["grade_smooth_m"]