feat(개발): 확정 전 단계도 눌러서 이동 — B08·B09 접근 길 확보

B08 의 「확정 없이 다음으로」 단추가 B08 화면 안에 있어, 상세설계(B07)에서
B08 로 못 넘어가면 그 단추에 닿을 길이 없었음(닫힌 문 안에 열쇠).

- 단계 표시줄이 NOT_STARTED·STALE 을 막던 것을 개발환경에서만 품
- 열어 둔 단계는 「확정 전이라 값이 비어 보일 수 있음」을 툴팁으로 알림
- 잠금을 푸는 것이 아니라 가기만 하는 것 — 실제 우회는 B08 의 그 단추가
  서버(common_util_dev_unlock)로 하고, 운영에서는 ENVIRONMENT 로 거절

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-08 18:12:36 +09:00
co-authored by Claude Opus 5
parent 045355db80
commit f5cd898c16
+16 -1
View File
@@ -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]);