# 작업지시서 — 민감단(T_C) 전환·복귀 제어 UI 추가 (2026-06-06)

> **⚠️ 진단 결과 (diagnosis-checklist.md 기준, 2026-06-06)**
>
> ### 1. `MapConfig`에서 `TcReturnTcTarget`/`TcReturnTcBand` 누락 (MED)
>
> **문제**: `MapConfig` API 응답 매핑(`FeedforwardController.cs:199-233`)에서 `tcReturnTcTarget`, `tcReturnTcBand` 2개 누락. 나머지 5개는 매핑됨.
> **근거**: `FeedforwardController.cs:219-223` — `tcReturnRebTarget/Band`, `tcReturnDeltaAdRef/Band`, `tempLowLimit`은 포함되지만 `tcReturnTcTarget/Band` 없음.
> **영향**: UI 설정 폼 재로드 시 이 2개 필드의 값이 손실. (엔진 게이트는 ConfigStore→ColumnConfig에서 직접 읽으므로 게이트 동작에는 영향 없음.)
> **수정**: `MapConfig` 객체에 `tcReturnTcTarget`, `tcReturnTcBand` 2줄 추가.
>
> ### 2. 작업2 — `Mode`/`ModeReason` 이미 존재 (진단 오류 수정)
>
> `AdvisoryResult`에 `Mode`(FeedforwardModels.cs:131)와 `ModeReason`(:132)가 이미 존재하며 `MapColumn`에서 `mode`, `modeReason`으로 노출됨. 모드 배지(Normal/Recovering/Returning) + 사유 표시는 **지금 당장 구현 가능**. 실제로 없는 것은 `EnteredByTcLow`와 게이트 개별 진척(`rebInBand` 등)뿐이며, 이는 체크리스트(부가기능)에만 필요. 작업지시서가 이미 "advisory 응답에 Mode/사유 필드 있는지 확인, 없으면 확장 선행"이라 명시한 조건부 항목.
>
> ### 3. 작업3 — `StartFeedRamp` 업램프 전용 체크 (MED, 타당)
>
> **문제**: `FeedRampCalculator`는 하강을 완전 지원하지만, `StartFeedRamp` 핸들러(`FeedforwardController.cs:267-268`)가 `if (body.targetFeed <= adv.CurrentFeed) return BadRequest("업램프만 지원")`로 하강 차단.
> **영향**: 운전원이 하강 램프 시작 시 400 Bad Request.
> **수정**: 체크 제거 + `ff.js` 방향 자동 판정 + 확인 문구 방향별 변경.
>
> ### 요약
>
> | 작업 | 실제 상태 | 수정 필요 |
> |---|---|---|
> | 작업1 (설정 폼) | `MapConfig`에서 `TcReturnTcTarget/Band` 2줄 누락 | `FeedforwardController.cs` 2줄 추가 |
> | 작업2 (상태 감시) | `Mode`/`ModeReason` 이미 존재 → 모드 배지 즉시 구현 가능 | 게이트 체크리스트용 `EnteredByTcLow` 등 추가는 선택 |
> | 작업3 (하강 램프) | `StartFeedRamp` 업램프 전용 체크 존재 | `FeedforwardController.cs:267-268` 체크 제거 |
>
> ---

> 백엔드 완료(`작업플랜-민감단온도-전환복귀제어.md`): 엔진 상태기계·복귀 게이트 3버그 수정 + config 풀스택(DB/ConfigStore) 연결됨.
> 남은 것 = **운전원이 파라미터를 설정/감시하는 UI**. 대상 `wwwroot/panes/ff.html` · `wwwroot/js/ff.js`.

## 0. 현 상태
- 백엔드: `ColumnConfig`에 `TempLowLimit`·`TcReturnRebTarget/Band`·`TcReturnDeltaAdRef/Band`·`TcReturnTcTarget/Band` 존재. DB 왕복(`ff_column_config` 컬럼 + ConfigStore SELECT/INSERT/UPDATE) 완료.
- 엔진: `sigTLow`(T_C 하한 전환류 트리거) + 복귀 게이트(reb in-band & ΔT(A-D) 안정 & T_C in-band) + `EnteredByTcLow` 진입원인 분기 동작.
- UI: `ff-cfg-list`(설정 폼, ff.js 동적 렌더) + advisory 화면 존재. **새 필드·상태표시 미반영**.

## 작업 1 — 설정 폼에 민감단 파라미터 추가  [우선순위 1]
**대상**: `ff.js`의 `ffLoadConfig`/config 렌더(`ff-cfg-list`) + config 저장 API 바디.
**추가 입력 필드**(컬럼별):
- `TempLowLimit`(T_C 하한 트리거, ℃ raw. 비활성 -1e9)
- `TcReturnTcTarget`(T_C 목표온도 ℃, **reb-A와 다름**) · `TcReturnTcBand`(±폭, 기본 1.0)
- `TcReturnRebTarget`(reb-A 복귀목표) · `TcReturnRebBand`(기본 0.5)
- `TcReturnDeltaAdRef`(ΔT(A-D) 기준) · `TcReturnDeltaAdBand`(기본 0.4)
**검증**: 저장→재로드 시 값 유지(DB 왕복). NaN 필드는 빈칸 표시(비활성).
**주의**: ★`TcReturnTcTarget`은 T_C(민감단) 목표 — reb-A 목표와 혼동 금지(별 입력란·라벨 명확히). 미설정 시 T_C in-band 게이트 비활성(안전).
**제안 보조**: 온도프로파일 `c{prefix}_tempref.json`의 매칭제품 median을 target 기본값으로 자동제안 버튼(`/api/steam/tempprofile/{col}` 재활용).

## 작업 2 — 상태기계(ColumnMode) 감시 표시  [우선순위 2]
**대상**: ff advisory 화면 + `/api/ff/advisory` 응답(`AdvisoryResult.Mode` 등).
**표시**:
- 현재 모드 배지: **Normal / Recovering(전환류) / Returning(복귀램프)** — 색상 구분(정상 녹색·전환류 주황·복귀 파랑).
- 전환류 진입 시 사유(`SeverityText`: 온도LOW/온도HIGH/ΔP플러딩 등) + **진입원인이 T_C 하한인지**(`EnteredByTcLow`) 노출.
- 복귀 게이트 진척: reb in-band·ΔT(A-D) 안정·T_C in-band 각 충족 여부 체크리스트(운전원이 "왜 아직 복귀 안 하나" 파악).
**검증**: 모드 전이 시 배지·사유 실시간 갱신. (Mode/ModeReason 이미 advisory 응답에 존재.)

## 작업 3 — 하강 램프 UI  [우선순위 3]
**대상**: `ff-ramp`(램프 계산기) + `/api/ff/feed-ramp`.
**현 상태**: `FeedRampCalculator`가 상승/하강 양방향 구현됨. `StartFeedRamp` 업램프 전용 체크 제거됨. UI는 상승 전제.
**추가**: targetFeed < currentFeed 입력 시 **하강 램프**로 자동 인식, 방향 배지(↑상승/↓하강) + 하강 rate 표시. 확인 다이얼로그 문구 "올립니다"→방향별("내립니다").
**검증**: 하강 타겟 입력 시 하강 시간/rate 산출, 방향 표기 정확.

## 작업 4 (선택) — T_C 유지 advisory 표시
**대상**: STEAM advisory(steam.js) 또는 ff 화면.
**표시**: 현재 T_C vs target 편차, 모듈1 제안 steam OP(디커플링), 편차 추세. (모듈1 백엔드 구현 후.)

## 권장순서 / 의존
작업1(설정) → 작업2(상태감시) → 작업3(하강램프) → 작업4(선택, 모듈1 의존).
작업2는 `Mode`/`ModeReason`이 이미 advisory 응답에 존재 → 모드 배지·사유 표시 즉시 구현 가능. 게이트 개별 진척 체크리스트는 `AdvisoryResult`에 `EnteredByTcLow`/`RebInBand`/`DeltaAdStable`/`TcInBand` 필드 추가 후 구현.

## 주의(공통)
- advisory-only·개별 follow 존중(자동 write 강제 금지).
- 9·10차(C4 미연결)는 설정·백테스트만, 라이브 상태표시는 6차(C3) 우선.
- T_C target은 제품전환(bimodal) 시 재설정 필요 — tempref 제품 선택과 연동.
