fix(노선추천): 349 노선 추천 창 옛 글 — 미리 보기 줄 = [적용]하면 바로 저장 · 새 초기값 · 종단 반영 설명 = [적용] 뒤 본 설계 값과 차이 · [적용]하면 이 종단이 첫 계획선(편집 [확인] · 아래 띠 글 지움)

- 다른 옛 글: 노선 편집 상태 줄 「곡선 기준 R — [확인] 때 반영」 → [저장] 때 · 분석 지형 풍선 「편집 창 분석」 → 노선 편집 분석
- 시험: test_349_old_wording 3 · 관련 77 통과(7 건너뜀) · typecheck 통과

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VmC34fsxxbweEG3RUjs3Mn
This commit is contained in:
2026-10-16 14:08:22 +09:00
co-authored by Claude Opus 5.5
parent d36137f850
commit 14348279fa
5 changed files with 48 additions and 8 deletions
@@ -64,7 +64,7 @@ export function createRouteEditChrome(
<span data-slot="tools"></span>
<i class="b05-routeedit__divider" aria-hidden="true"></i>
<label class="b05-routeedit__terrain" hidden
title="편집 창 분석(등고선 · 지반고 · 기울기 · 횡단 미리보기 · 추천)에 쓸 지형 — 확정 지표면 · 종횡단은 안 바뀝니다">분석 지형
title="노선 편집 분석(등고선 · 지반고 · 기울기 · 횡단 미리보기 · 추천)에 쓸 지형 — 확정 지표면 · 종횡단은 안 바뀝니다">분석 지형
<select class="ui-select ui-select--sm" data-act="terrain">
<option value="las">라이다</option>
<option value="sheet">수치지형도</option>
@@ -5,9 +5,9 @@
* 못 지킨 구간 · 오른쪽 위 [적용] · [닫기].
* 종단은 갈래가 정한다 — 예상노선 추적만 종단 없음, 나머지는 늘 균형 종단(`withProfileOf`).
*
* 알약을 누르면 서버가 그 갈래를 셈해 주고(`request`) 지도에 미리 보기로 그린다. 편집 창의 노선은
* 건드리지 않는다 — [적용]을 눌러야 `onApply` 로 편집값에 실리고(되돌리기 한 걸음), [닫기]는
* 미리 보기를 버린다. 다시 계산(배수유역부터)은 여기서 안 돈다 — 편집 창 [확인]에서만.
* 알약을 누르면 서버가 그 갈래를 셈해 주고(`request`) 지도에 미리 보기로 그린다. 노선 편집의 노선은
* 건드리지 않는다 — [적용]을 누르면 `onApply` 로 바로 서버 저장(새 초기값 · 346-3), [닫기]는
* 미리 보기를 버린다.
* 비교값 · 기준값은 서버가 준 것을 보이기만 한다(계산 자리 = 서버 단독).
* 서버 부르기 · 캐시 · 「현재 추천」은 `_Initial` 몫이고 여기는 화면만 만든다.
* 균형 종단(계획서 63-4) — 후보마다 서버가 세운 종단의 한 줄 · 그림 · 셈한 후보 표는 이 모달
@@ -131,7 +131,7 @@ export interface RecommendParams {
criteria: RouteInitialCriteria | null,
withProfile: boolean,
) => Promise<InitialChoice>;
/** [적용] — 미리 본 노선을 편집 창에 놓는다. */
/** [적용] — 미리 본 노선을 바로 저장한다(새 초기값). */
onApply: (choice: InitialChoice) => void;
}
@@ -464,7 +464,7 @@ export function openRecommendModal(params: RecommendParams): void {
else seen.delete(label); // 종단 없는 갈래(예상노선 추적)
stateEl.textContent = `미리 보기: ${choiceLabel(logic, sentWeights)}${
choice.stored ? " (저장된 결과)" : ""
} — [적용]을 눌러야 편집 창에 놓입니다.`;
} — [적용]하면 바로 저장 · 새 초기값이 됩니다.`;
} catch (error) {
if (closed || mine !== seq) return;
stateEl.textContent = "셈하지 못했습니다.";
@@ -83,7 +83,7 @@ const LOGIC_HELP: Record<ShownLogic, HelpEntry> = {
const CRITERIA_HELP: Array<{ name: string; text: string }> = [
{
name: "종단 반영",
text: "예상노선 추적을 뺀 네 갈래는 늘 반영. 원지반선과 계획선 사이 넓이를 적분한 값이 아니라, 측점(20m)마다 횡단을 세워 절토 · 성토 면적을 보고 그 측점 계획고를 정한 종단 — 그래서 갈래 · 노선에 따라 값의 편차가 큼. 구조물을 뺀 빠른 셈이라 [확인] 뒤 본 설계 값과 차이가 남. [확인]하면 편집 창 아래 띠에 보인 종단이 그대로 첫 계획선이 됨",
text: "예상노선 추적을 뺀 네 갈래는 늘 반영. 원지반선과 계획선 사이 넓이를 적분한 값이 아니라, 측점(20m)마다 횡단을 세워 절토 · 성토 면적을 보고 그 측점 계획고를 정한 종단 — 그래서 갈래 · 노선에 따라 값의 편차가 큼. 구조물을 뺀 빠른 셈이라 [적용] 뒤 본 설계 값과 차이가 남. [적용]하면 이 종단이 그대로 첫 계획선이 되고 노선과 함께 바로 저장 · 새 초기값이 됨",
},
{
name: "종단기울기 상한(%)",
@@ -186,7 +186,7 @@ export function curveSummary(input: CurveSummaryInput): string {
.filter(Boolean)
.join(" · ");
if (input.fresh) {
const base = input.minRadiusM ? `곡선 기준 R ${input.minRadiusM}m — [확인] 때 반영` : "";
const base = input.minRadiusM ? `곡선 기준 R ${input.minRadiusM}m — [저장] 때 반영` : "";
return edits ? `${base}${base ? " · " : ""}${edits}` : base;
}
return (
+40
View File
@@ -0,0 +1,40 @@
"""349 — 옛 글 고침: [초기화] 확인 글 · 노선 추천 창 글이 지금 흐름을 말하는가.
지금 흐름 = 초기값은 파일 올린 뒤 자동설계 또는 마지막으로 [적용]한 추천 노선 · [초기화]는 다시 셈 아님 ·
추천 [적용] = 바로 저장 · 새 초기값 · 편집 [확인] · 아래 종단 띠 없음.
"""
from __future__ import annotations
from pathlib import Path
ROOT = Path(__file__).resolve().parents[2]
def _read(rel: str) -> str:
return (ROOT / rel).read_text(encoding="utf-8")
def test_초기화_확인_글():
locale = _read("ui_template/ui_template_locale_b2.ts")
at = locale.index("B05_Route_Reset_Confirm")
text = locale[at : locale.index("B05_Route_Reset_Failed", at)]
assert "확정한 노선" not in text and "재계산에 시간" not in text
assert "마지막으로 [적용]한 추천 노선" in text and "다시 셈하지 않고" in text
assert "recomputation takes" not in text and "without recomputation" in text
def test_노선_추천_창_글():
recommend = _read("B05_Profile/B05_Profile_UI_RouteEdit_Recommend.ts")
assert "편집 창에 놓입니다" not in recommend
assert "[적용]하면 바로 저장 · 새 초기값이 됩니다." in recommend
help_ = _read("B05_Profile/B05_Profile_UI_RouteEdit_Recommend_Help.ts")
assert "[확인]" not in help_ and "아래 띠" not in help_ and "편집 창" not in help_
assert "[적용]하면 이 종단이 그대로 첫 계획선" in help_
def test_노선_편집_다른_옛_글():
edits = _read("B05_Profile/logic/B05_Profile_UI_RouteEdit_Edits.ts")
assert "[확인] 때 반영" not in edits and "[저장] 때 반영" in edits
chrome = _read("B05_Profile/B05_Profile_UI_RouteEdit_Chrome.ts")
assert 'title="편집 창 분석' not in chrome