a88323716ded944227b0f1ac44f2345de3a8b2f0
Stage 1 + 2 통합 구현 — 사용자 피드백 반영:
manager / principal / lead / junior 계층 구조 추가.
부장이 복잡도를 판단해서 팀을 동적으로 꾸린다.
Design:
- .plans/design/hierarchy.md — 전체 설계 문서 (점수/tier/plan/escalation)
Prisma schema:
- SubTask (계층 트리 + 역할/모델/state/complexity)
- SubTaskEvent (JSONL 스타일 이벤트 로그)
rails (core):
- src/hierarchy/roles.ts — 4역할 기본 config + 모델 매핑
manager/principal: gpt-5.4 / glm-5.1
lead: gpt-codex-5.3 / glm-5
junior: glm-5-turbo / gpt-5
- src/hierarchy/complexity.ts — 규칙 기반 스코어러 (7 factors, 0-100)
- src/hierarchy/planner.ts — tier → DecompositionPlan (trivial/simple/moderate/complex/massive)
+ concurrency budget 강제
- src/hierarchy/store.ts — Prisma CRUD + tree builder
- src/handoff/http-transport.ts — 실제 HTTP transport (MockTransport 대체)
- src/handoff/build.ts — config + env 기반 transport 빌더
(env RAILS_TRANSPORT_MODE + RAILS_AGENT_{STAGE}_HOST 오버라이드)
- src/server/http.ts — sub-task 엔드포인트 4개 추가
POST /api/sub-tasks
PATCH /api/sub-tasks/:id
POST /api/sub-tasks/:id/events
GET /api/pipelines/:id/sub-tasks (tree view)
sister-agent (new sub-project):
- sister-agent/ — 각 LXC 에 배포될 Node.js 데몬
- src/types.ts, roles.ts, complexity.ts, planner.ts
- src/spawn.ts — executeInvocation: 복잡도 점수 → plan → spawn 트리
simulation mode (현재는 work 를 delay 로 시뮬레이트, LLM 연동은 후속)
- src/rails-client.ts — sub-task / event push
- src/server.ts — POST /invoke 엔드포인트 (port 18801)
LXC 리소스 실측 기반 기본 concurrency:
104/106/107: 8 concurrent sub-agents
105 (narang, build 중): 6
검증: tsc --noEmit ✓ | vitest 105/105 ✓ | rails build ✓ | sister-agent build ✓
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
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가지 원칙
- 결정론적 라우터 — LLM 판단이 아니라 XState FSM으로 자매 간 전이
- Sprint Contract 강제 — DoD를 Zod 스키마로 정의, validator가 pass/fail 판정
- Skill 강제 진입 — skill bypass를 hook으로 감지해 차단
- 상태 전이 기반 핸드오프 — 멘션은 사용자 알림 전용, 자매 간 통신은 FSM 상태
- 재시도/에스컬레이션 — timeout 자동 재시도, N회 실패 시 사용자 에스컬레이션
- 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 완성 예정) |
문서
docs/migration-guide.md— 레거시 → rails 이전 가이드docs/operations.md— 운영 가이드 (PM2, 로그, DB)docs/discord-setup.md— Discord 봇 연동 + marker 프로토콜.plans/OVERVIEW.md— 프로젝트 전체 개요.plans/failure-audit.md— F1–F6 실패 감사.plans/design/— 설계 문서 9종.plans/sprints/— 스프린트 상세
라이선스
MIT
Languages
TypeScript
95.7%
Shell
3.3%
Dockerfile
0.7%
JavaScript
0.3%