# v0.1.279 — tower-lamp P1.1 데이터 모델 + Add Tower Lamp 명령

- 버전: v0.1.279
- 분류: 48th stable seal (v0.1.366) 일괄 봉인 사이클
- 다운로드: [factory00-windows-x64-v0.1.279.zip](../../downloads/archive/factory00-windows-x64-v0.1.279.zip) (archive 보존)
- 캡처: [qa-screenshots/v0.1.279/](../../qa-screenshots/v0.1.279/)

---

## 협업자 spec tower-lamp P1 진입 (QA-073 명시 착수 요청)
협업자 PM께서 가장 명시적으로 착수 요청해 주신 spec입니다(QA-073). 4종세트 완비 + 출력부 카테고리 정식 승격 상태이며, 전체 ~400라인을 cycle-critic-review.md 룰 한도 준수를 위해 3 사이클로 분할 진입합니다.
| 사이클 | 범위 | 라인 |
|---|---|---|
| **v0.1.279 (이번)** | 데이터 모델 + Add 명령 | ~150 |
| v0.1.280 | Inspector UI (LampCount + 채널별 색상/Blink) | ~150 |
| v0.1.281 | Modbus 구독 Bridge + Emission 효과 + Signal Sim 수동 | ~100 |

## 이번 사이클 (v0.1.279) 변경

### 1. 데이터 모델 신규
Assets/Scripts/Outputs/TowerLampComponent.cs (신규)`csharpnamespace Factory00.Outputs
{
    [System.Serializable]
    public class TowerLampChannel
    {
        public int   Position    = 0;
        public Color Color        = Color.red;
        public bool  IsBlink      = false;
        [System.NonSerialized] public bool IsOn = false;   // 런타임
    }
    [System.Serializable]
    public class TowerLampComponent
    {
        public string Id              = System.Guid.NewGuid().ToString();
        public int    LampCount       = 4;                  // 1~4
        public List Channels = new();        public float  BlinkRateHz     = 1.0f;
        public string DriverInstanceId = System.Guid.NewGuid().ToString();
        // 기본 4채널 R/Y/G/B 자동 초기화
    }
}
`
### 2. 이벤트 신규
Assets/Scripts/Events/TowerLampEvents.cs (신규) — TowerLampStateChangedEvent readonly structAssets/Scripts/Events/EventBus.cs — OnTowerLampStateChanged event + Publish(TowerLampStateChangedEvent) overload
### 3. Part.TowerLamps 리스트
Assets/Scripts/Core/Part.cs에 List TowerLamps 필드 추가. 다른 컴포넌트 리스트(Sensors / Actuators / VacuumEjectors 등)와 동일 패턴.
### 4. Ribbon Model 탭 Add Tower Lamp 명령
`xml           tooltip="선택 부품 각각에 TowerLamp 1개 부착 (4채널 R/Y/G/B, Modbus 신호 연동)"/>
`선택 부품에 TowerLampComponent 1개 부착(이미 있으면 skip). 다중 선택 시 부착/skip 카운트 토스트.

### 4대 불변 원칙 검토 (spec §2)
| 원칙 | 판정 |
|---|---|
| ① 임포트 전용 | [완료] UI 조작만, 모델링 없음 |
| ② 경량 물리 | [완료] 물리 없음, Emission 재질 효과만 |
| ③ 비코딩 UX | [완료] Inspector + 우클릭 메뉴로만 조작 (v0.1.280에서 Inspector UI 추가) |
| ④ 이벤트 기반 | [완료] TowerLampStateChangedEvent + ModbusSignalChangedEvent 구독 (v0.1.281에서 구독자 추가) |
---

## 변경 파일
- Assets/Scripts/Outputs/TowerLampComponent.cs (신규) — TowerLampChannel + TowerLampComponent- Assets/Scripts/Events/TowerLampEvents.cs (신규) — TowerLampStateChangedEvent- Assets/Scripts/Events/EventBus.cs — Publish overload + event- Assets/Scripts/Core/Part.cs — TowerLamps 리스트 필드 추가- Assets/UI/Components/Ribbon.uxml — model-add-tower-lamp 버튼- Assets/Scripts/Game/Factory00Bootstrap.cs — Add Tower Lamp 핸들러 (~25라인)- ProjectSettings/ProjectSettings.asset — bundleVersion 0.1.278 -> 0.1.279---

## 검증 절차
1. Model 탭 -> Add Tower Lamp 버튼 표시 확인
2. 선택 부품 1개 + 클릭 -> "Tower Lamp 1개 부착 (4채널 R/Y/G/B · Inspector는 다음 사이클)" 토스트
3. 같은 부품에 재클릭 -> "이미 부착" skip
4. 다중 선택 + 클릭 -> 부착/skip 카운트 토스트
5. Inspector UI는 v0.1.280에서 추가 예정 (현재는 데이터만 부착)
---

## 다음 사이클 예정
- **v0.1.280** — TowerLamp Inspector UI (LampCount 슬라이더 + 채널별 색상 드롭다운 + Blink 토글 + BlinkRateHz 슬라이더)- **v0.1.281** — Modbus 구독 Bridge + Emission 효과 (URP _EMISSION keyword + _EmissionColor HDR) + Signal Sim 수동 제어- **v0.1.282** — .twn 직렬화 통합 (TowerLamps 리스트 저장/복원) + critic 검토- **43rd stable seal** — v0.1.273~282 누적 후 봉인 예정


---

## 봉인 참조

본 사이클은 **48th stable seal (v0.1.366, 2026-05-24)** 일괄 봉인에 포함됨.

- journal: [2026-05-24-v0.1.298-366-48th-stable-seal.md](../../journal/2026-05-24-v0.1.298-366-48th-stable-seal.md)
- alias zip: [factory00-windows-x64-v0.1.366-stable.zip](../../downloads/factory00-windows-x64-v0.1.366-stable.zip) (170 MB)
