이랑이 1f518c0c54 feat(server): HTTP API for orchestration (/pipelines/*, /health)
rails serve 가 이제 실제 HTTP 서버를 띄움:
- GET  /health
- GET  /pipelines?limit=N
- POST /pipelines        — 파이프라인 생성만
- POST /pipelines/start  — 생성 + E2E 실행 (현재 mock 만)
- GET  /pipelines/:id    — 상태 + 타임라인
- POST /pipelines/:id/abort — 강제 종료

node built-in http 만 사용 (추가 의존성 없음).
Zod 로 요청 바디 검증. Graceful shutdown (SIGINT/SIGTERM).

하랑이(오케스트레이터) 가 이 API 를 찔러 파이프라인을 기동할 수 있음.
2026-04-10 16:10:39 +09:00

hanarang-rails

4자매가 달릴 결정론적 레일 — HaNaRang Rails

hanarang-harness의 후계작. 기존 하네스가 "권고 기반 파이프라인"이라 자매들이 레일을 벗어나 끊기고 엇갈리던 문제를 강제 기반 결정론 파이프라인으로 재설계한다.

왜 다시?

hanarang-harness에서 발견된 6가지 실패 모드:

코드 증상 원인
F1 하네스 skill bypass — 자매가 worker 혼자 스폰하고 처리 skill 진입 강제 없음
F2 DoD 자동 강제 실패 — build 통과 = 완료로 간주 sprint contract / validator 없음
F3 QA 단계 누락 — 사용자가 수동으로 다랑이 호출 자동 라우팅 없음
F4 핸드오프 멘션 불안정 — 잘못된 자매 호출 Lobster 분기가 LLM에 의존
F5 중간 끊김 — request-timed-out 반복, xhigh 무한대기 재시도/fallback 정책 없음
F6 환경 검증 누락 — "서버에 Docker 없음" 으로 skip 용인 환경 전제 검사 없음

6가지 원칙

  1. 결정론적 라우터 — LLM 판단이 아니라 XState FSM으로 자매 간 전이
  2. Sprint Contract 강제 — DoD를 Zod 스키마로 정의, validator가 pass/fail 판정
  3. Skill 강제 진입 — skill bypass를 hook으로 감지해 차단
  4. 상태 전이 기반 핸드오프 — 멘션은 사용자 알림 전용, 자매 간 통신은 FSM 상태
  5. 재시도/에스컬레이션 — timeout 자동 재시도, N회 실패 시 사용자 에스컬레이션
  6. QA 체크리스트 강제 — 스프린트 타입별 템플릿, 다랑이가 체크박스 다 채워야 pass

아키텍처 개요

사용자 (디스코드)
    │
    ▼
┌────────────────────────────────────┐
│     hanarang-rails orchestrator    │
│  (XState FSM + SQLite + validator) │
└──────────────────┬─────────────────┘
                   │
       ┌───────────┼───────────┬───────────┐
       ▼           ▼           ▼           ▼
   ┌──────┐   ┌──────┐   ┌──────┐   ┌──────┐
   │ 하랑  │   │ 나랑  │   │ 다랑  │   │ 이랑  │
   │Planner│   │ Impl │   │  QA  │   │Deploy│
   └──────┘   └──────┘   └──────┘   └──────┘
       │           │           │           │
       └───────────┴─ OpenClaw spawn ──────┘
                   │
                   ▼
            ┌────────────┐
            │ Discord 알림│ ← 사용자 알림 전용
            └────────────┘

기술 스택

레이어 선택
런타임 Node 22 + TypeScript (strict)
상태 머신 XState v5
스키마 Zod
영속화 SQLite (better-sqlite3)
프로세스 execa + AbortController
CLI citty
로그 pino
디스코드 discord.js v14
테스트 Vitest

상태

v0.1.0 — Sprint 000~007 완료. 6가지 실패 모드 전부 코어에서 해결.

105 테스트 통과. CLI 13 서브커맨드. 마이그레이션 도구 + QA 6 템플릿 포함.

빠른 시작

# 설치
bash install.sh --repo <repo-url> --dir /path/to/rails
cd /path/to/rails

# 환경 확인
pnpm rails doctor

# .env 설정 후 DB 마이그레이션
cp .env.example .env
# DATABASE_URL 등 채우기
pnpm prisma migrate deploy

# Mock 모드로 E2E 스모크 테스트
pnpm rails run hello-world --mock -r "Try a pipeline"
pnpm rails status

CLI 서브커맨드

명령 용도
rails start 파이프라인 생성
rails run [--mock] E2E 실행
rails status [id] 상태 조회 + 타임라인
rails resume <id> escalated → idle 재개
rails abort <id> 강제 종료
rails contract generate/freeze/validate/show Sprint Contract 관리
rails qa run/show/templates QA 템플릿 실행
rails skill-context create/show/clear 스킬 강제 진입
rails skill-trace show/blocked 도구 사용 감사 로그
rails doctor 환경 헬스체크
rails scaffold 신규 프로젝트 .plans/ 생성
rails migrate from-hanarang-harness <path> 레거시 하네스 스캔
rails serve 오케스트레이터 서버 (v0.2 완성 예정)

문서

라이선스

MIT

Description
HaNaRang Rails — 결정론적 4자매 파이프라인 하네스 (FSM + Sprint Contract + 강제 핸드오프)
Readme MIT 1.2 MiB
Languages
TypeScript 95.7%
Shell 3.3%
Dockerfile 0.7%
JavaScript 0.3%