# 작업지시서 — STEAM SP를 FF 추종 프레임에 통합 (2026-06-06)

> 설계 `docs/학습형제어-오퍼레이터모방-플랜.md`, 메모리 `learned-control-operator-imitation.md`.
> 관련 `docs/작업지시서-operator-assist-웹패키징.md`(웹 시각화는 그쪽).

## 목적
SteamAdvisor(steam=f(feed,product,T_C)→OP)를 **기존 FF 추종-WriteGuard 파이프에 한 행으로** 통합.
FF가 FEED·STREAM SP는 제안하나 **STEAM 제안이 비어있음**(SteamOp를 모니터로만 읽음) — 그 빈자리를 채움.

## 현 자산 (재활용, 중복금지)
- `ColumnConfig.SteamOpTag`(이미 존재, TICA-x111A.OP), `PvSnapshot.SteamOp`(읽기만).
- `FeedforwardSupervisor`(advisory 생성), `FeedforwardWriteGuard`(SP/OP 쓰기 보호), `FfTrackingStore`(추종/로깅), 개별 follow 토글.
- `SteamAdvisor.Predict(feed,product,tC)→{RecOp, RecSteam, Confidence, Ood, Mode}`(완성).

## 단계
1. **모델 합류**: `AdvisoryResult`에 `SteamRecommendedOp`/`SteamRecommendedFlow`/`SteamConfidence`/`SteamOod` 추가. `FeedforwardSupervisor`가 PvSnapshot의 feed(FICQ-x101)/product(x118)/T_C(TI-x111C)로 `SteamAdvisor.Predict` 호출 → advisory에 실음.
2. **SP→밸브 연계**: RecOp = `SteamOpTag`(TICA-x111A.OP) write 대상. 현장 MANUAL → TICA를 MAN 유지하고 OP 직접 write(온도PID 미경유, 현장 불신 존중). RecSteam은 표시용.
3. **추종선택+안전**: STEAM도 stream처럼 "추종 ON/OFF" 1행 추가. `FeedforwardWriteGuard`에 SteamOp 쓰기 대상 등록(rate-limit·클램프·데드밴드). OOD/비-PROD → 추종 자동 보류(폴백). 기본 advisory_only.
4. **로깅**: `FfTrackingStore`에 권장OP vs 실제OP 기록(shadow 신뢰리포트).
5. **컬럼별 모델**: ColumnConfig에 `SteamModelPath` 추가(컬럼별 c{prefix}_model.json). 6-1차 first-cut.

## 검증기준
- 6-1차 advisory에 STEAM 행 표시(권장OP+신뢰도). 추종 OFF시 write 0.
- 추종 ON + in-envelope: WriteGuard 통과해 OP write, rate-limit 준수.
- OOD/STARTUP: "범위밖→수동" 폴백, write 차단.

## 주의
- ★closed-loop 강제 금지(메모리: 조건 실변동중). 오퍼레이터 승인·개별 follow 존중.
- TICA MAN 모드 확인 후 OP write(AUTO면 온도SP 경유 — 별 옵션).
- range는 realtime PV_HighRange/LowRange live(xlsx 하드코딩 금지).
- 6차만 C3 online → first-cut 6차. 9·10차(C4 미연결)는 백테스트만.

## 권장순서
①AdvisoryResult+Supervisor 합류 → ②WriteGuard 등록+follow 토글 → ③UI 행 → ④로깅. ①②는 웹패키징과 독립 병행 가능.
