fix(align V1): edge fail hint 간소화 + step 3 회귀 차단

1) hint 텍스트에서 채널 정보 제거:
   "Slide up slightly ↑  (ch3 short)" → "Slide up slightly ↑"
   "Slide down slightly ↓  (ch0 short)" → "Slide down slightly ↓"
   사용자 피드백 — 채널 번호 표시 빼고 방향만.

2) edge 만 fail (CV·lrPass·rPeakOk 통과) 인 경우 GREEN 유지:
   기존: 방향 화살표면 무조건 nextPhase = VERTICAL → step indicator 3 → 1 회귀.
   변경: edgeOnlyFail 시 stayGreen=true → nextPhase = GREEN, step 3 유지.
   이유: edge 비대칭은 mm 단위 미세조정 — 전체 vertical 재시작 불필요.
   CV/lrPass 가 진짜 어긋난 경우는 기존대로 VERTICAL 회귀.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-06-18 11:16:24 +09:00
parent c3817c9f80
commit fea5879cdc
@@ -1935,11 +1935,11 @@ private fun computePlacementGuide(
} }
// Edge 비대칭 — ch3 짧음 (센서 너무 아래) → 위로 미세 조정 // Edge 비대칭 — ch3 짧음 (센서 너무 아래) → 위로 미세 조정
!edgePass && edgeAsym > 0 -> { !edgePass && edgeAsym > 0 -> {
adjustHint = "Slide up slightly ↑ (ch3 short)"; adjustIcon = "arrow.up" adjustHint = "Slide up slightly ↑"; adjustIcon = "arrow.up"
} }
// Edge 비대칭 — ch0 짧음 (센서 너무 위) → 아래로 미세 조정 // Edge 비대칭 — ch0 짧음 (센서 너무 위) → 아래로 미세 조정
!edgePass && edgeAsym < 0 -> { !edgePass && edgeAsym < 0 -> {
adjustHint = "Slide down slightly ↓ (ch0 short)"; adjustIcon = "arrow.down" adjustHint = "Slide down slightly ↓"; adjustIcon = "arrow.down"
} }
gradient > 0.3 -> { gradient > 0.3 -> {
adjustHint = "Slide down ↓"; adjustIcon = "arrow.down" adjustHint = "Slide down ↓"; adjustIcon = "arrow.down"
@@ -1966,8 +1966,11 @@ private fun computePlacementGuide(
} }
} }
} }
// 구체적 방향(↑↓←→)이면 VERTICAL 복귀, 아니면 GREEN 유지 // 구체적 방향(↑↓←→)이면 보통 VERTICAL 복귀, 아니면 GREEN 유지.
val stayGreen = adjustIcon == "checkmark.circle" // 단 edge 만 fail(CV·lr 통과)인 케이스는 mm 단위 미세조정이라
// GREEN 그대로 유지 — step indicator 3 → 1 회귀 방지.
val edgeOnlyFail = !edgePass && cv <= cvThr && lrPass && rPeakOk
val stayGreen = adjustIcon == "checkmark.circle" || edgeOnlyFail
val nextPh = if (stayGreen) PlacementPhase.GREEN else PlacementPhase.VERTICAL val nextPh = if (stayGreen) PlacementPhase.GREEN else PlacementPhase.VERTICAL
return PlacementGuideResult(adjustHint, adjustIcon, 50, cv, false, lrDev, lrPass, return PlacementGuideResult(adjustHint, adjustIcon, 50, cv, false, lrDev, lrPass,
phase = PlacementPhase.GREEN, nextPhase = nextPh) phase = PlacementPhase.GREEN, nextPhase = nextPh)