Backend:
- src/rails/rails.service.ts — HTTP client for rails API (read-only)
- src/rails/rails.controller.ts — REST under /api/rails/* (JwtGuard 보호)
GET /pipelines, /pipelines/:id, /pipelines/:id/sub-tasks, /health
POST /pipelines/start, /pipelines/:id/abort
- src/rails/rails.scheduler.ts — 2초마다 rails poll → EventEmitter2 broadcast
- src/rails/rails.module.ts — module + DI
- events.gateway.ts — rails.* 이벤트 핸들러 3종 (Socket.IO 'rails:*')
- app.module.ts — RailsModule 등록
Frontend:
- lib/useRailsSocket.ts — Socket.IO 훅 (rails:pipelines / pipeline:updated / subtasks)
- components/rails/PipelineList.tsx — 좌측 파이프라인 카드 목록
- components/rails/SubTaskTree.tsx — 우측 계층 트리 뷰
role 별 색상 (manager/principal/lead/junior)
state 별 dot + running pulse 애니메이션
duration / model 표시
- app/rails/page.tsx — 라이브 대시보드 페이지
좌: 파이프라인 목록 + Start 폼
우: 선택된 파이프라인의 sub-task 트리
- components/common/Sidebar.tsx — '레일' 메뉴 추가
기존 hanarang-dashboard 의 UX/테마 그대로 재사용 (CSS variables).
인증은 기존 JwtGuard 그대로 적용.
검증: backend nest build ✓ | frontend next build ✓ (turbopack)
다음: Dev 서버에 배포 + 첫 라이브 파이프라인 구동 확인.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>