From f5cd898c16317621226d5ee67091864bd765ab75 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Tue, 8 Sep 2026 18:12:36 +0900 Subject: [PATCH] =?UTF-8?q?feat(=EA=B0=9C=EB=B0=9C):=20=ED=99=95=EC=A0=95?= =?UTF-8?q?=20=EC=A0=84=20=EB=8B=A8=EA=B3=84=EB=8F=84=20=EB=88=8C=EB=9F=AC?= =?UTF-8?q?=EC=84=9C=20=EC=9D=B4=EB=8F=99=20=E2=80=94=20B08=C2=B7B09=20?= =?UTF-8?q?=EC=A0=91=EA=B7=BC=20=EA=B8=B8=20=ED=99=95=EB=B3=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit B08 의 「확정 없이 다음으로」 단추가 B08 화면 안에 있어, 상세설계(B07)에서 B08 로 못 넘어가면 그 단추에 닿을 길이 없었음(닫힌 문 안에 열쇠). - 단계 표시줄이 NOT_STARTED·STALE 을 막던 것을 개발환경에서만 품 - 열어 둔 단계는 「확정 전이라 값이 비어 보일 수 있음」을 툴팁으로 알림 - 잠금을 푸는 것이 아니라 가기만 하는 것 — 실제 우회는 B08 의 그 단추가 서버(common_util_dev_unlock)로 하고, 운영에서는 ENVIRONMENT 로 거절 Co-Authored-By: Claude Opus 5 (1M context) --- ui_template/ui_template_workflow_layout.ts | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/ui_template/ui_template_workflow_layout.ts b/ui_template/ui_template_workflow_layout.ts index f2a766be..3d1853fc 100644 --- a/ui_template/ui_template_workflow_layout.ts +++ b/ui_template/ui_template_workflow_layout.ts @@ -100,7 +100,15 @@ export function createStepBar( options?.stages?.find((item) => item.stage_no === index) ?? options?.stages?.[index]; const hasStages = Boolean(options?.stages?.length); const isBlockedState = stage?.state === "NOT_STARTED" || stage?.state === "STALE"; - const isEnabled = !hasStages || !isBlockedState || stage?.stage_no === options?.currentStage; + // ⚠ 개발 전용 — 막힌 단계도 눌러서 들어간다 (2026-09-09 사용자 지시). + // B08 의 「확정 없이 다음으로」 단추가 **B08 화면 안에** 있어서, B07 에서 B08 로 못 + // 넘어가면 그 단추에 닿을 길이 없었다(닫힌 문 안에 열쇠가 있는 꼴). + // ⚠ **잠금을 푸는 것이 아니라 가기만 한다** — 값이 없어 「미확보」로 뜨는 것이 정상이고, + // 실제 우회는 B08 의 그 단추가 서버(`common_util_dev_unlock`)로 한다. + // ⚠ **서버는 그대로 막혀 있다** — 운영에서는 `ENVIRONMENT` 로 거절한다. + const devBypass = import.meta.env.DEV; + const isEnabled = + devBypass || !hasStages || !isBlockedState || stage?.stage_no === options?.currentStage; button.classList.toggle("is-enabled", isEnabled); button.disabled = !isEnabled; @@ -133,6 +141,13 @@ export function createStepBar( } } + // 개발 우회로 열어 둔 단계는 **그렇다고 말해 준다** — 조용히 열면 다음 사람이 + // 「왜 값이 없나」로 헤맨다(B08 의 안내 줄과 같은 뜻). + if (devBypass && isBlockedState) { + button.classList.add("is-dev-bypass"); + button.title = `${button.title} (개발: 확정 전이라 값이 비어 보일 수 있습니다)`; + } + if (isEnabled && options?.routes?.[index]) { button.addEventListener("click", () => { options.onStepClick?.(index, options.routes![index]);