docs: add full phase roadmap to dashboard

This commit is contained in:
Yun Chan 2026-06-26 15:38:00 +09:00
parent bf6c313027
commit 22ee0c6b89

View file

@ -103,6 +103,38 @@
.list { display:grid; gap:10px; margin:0; padding:0; list-style:none; }
.list li { display:grid; grid-template-columns:10px minmax(0,1fr); gap:10px; color:var(--ink-2); font-size:13px; }
.list li:before { content:""; width:6px; height:6px; margin-top:8px; border-radius:50%; background:var(--accent); }
.roadmap {
display:grid;
grid-template-columns:repeat(5,minmax(0,1fr));
gap:12px;
align-items:stretch;
}
.phase-card {
min-width:0;
background:var(--surface);
border:1px solid var(--hair);
border-radius:12px;
padding:16px;
box-shadow:0 1px 2px rgba(28,42,42,.05);
}
.phase-card.current { border-color:color-mix(in srgb, var(--accent) 42%, var(--hair)); background:linear-gradient(180deg, var(--accent-tint), var(--surface) 58%); }
.phase-card.next { border-color:color-mix(in srgb, var(--warn) 35%, var(--hair)); }
.phase-top { display:flex; align-items:center; justify-content:space-between; gap:10px; margin-bottom:10px; }
.phase-id { font:760 13px/1 var(--num); color:var(--accent-deep); }
.phase-card h3 { margin:0; font-size:15px; line-height:1.35; }
.phase-card p { margin:8px 0 0; color:var(--ink-2); font-size:12px; }
.phase-list { display:grid; gap:6px; margin:12px 0 0; padding:0; list-style:none; }
.phase-list li { color:var(--ink-2); font-size:12px; line-height:1.45; }
.phase-list li b { color:var(--ink); font-weight:700; }
.source-note {
margin-top:14px;
padding:14px 16px;
border:1px solid var(--hair);
border-radius:12px;
background:var(--paper-2);
color:var(--ink-2);
font-size:13px;
}
code { font-family:var(--num); font-size:12px; background:var(--paper-2); padding:2px 6px; border-radius:6px; }
.wide { grid-column:1 / -1; }
.commands { display:grid; gap:10px; }
@ -116,6 +148,7 @@
main { width:min(100% - 28px, 1180px); padding-top:28px; }
.hero { grid-template-columns:1fr; }
.grid { grid-template-columns:1fr; }
.roadmap { grid-template-columns:1fr; }
}
@media (max-width:520px) {
.summary { grid-template-columns:1fr; }
@ -127,14 +160,14 @@
<body>
<header>
<div class="brand"><span class="mark" aria-hidden="true"></span><span>Vignette 개발 대시보드</span></div>
<div class="stamp">2026-06-26 15:18 KST</div>
<div class="stamp">2026-06-26 15:35 KST</div>
</header>
<main>
<div class="hero">
<div>
<div class="kicker">team lead review</div>
<h1>Phase 0는 <em>검증 가능한 운영 안전장치와 E2E 안정화</em>까지 마무리됐다.</h1>
<h1>전체 로드맵 기준 현재 위치는 <em>Phase 0 종료 직전</em>다.</h1>
<p class="lead">
이번 세션은 seed persona 결합 제거, 비개발 fail-closed 설정, compose OAuth 주입,
admin 모바일 overflow 수정, persona 인증 경계 보강, 전체 Playwright 재통과, 공개 API prod 전환까지 완료했다.
@ -145,6 +178,7 @@
Cloudflare Pages production 배포 `0fe8f3cc`도 완료했고, 커스텀 도메인이 새 asset을 서빙하는 것을 확인했다.
과거 Mao/Haru Live2D demo 자산은 repo와 번들에서 제거했고, `/live2d/*` 운영 경로는 404로 차단했다.
로컬 프로세스는 prod API 8001, engine gateway 9099, cloudflared tunnel 1개만 남기고 dev API와 임시 Vite preview를 내렸다.
다만 이 HTML은 지금까지 Phase 0 상태판처럼 쓰였고, 아래에 Phase 1 이후 전체 계획을 보강했다.
공개 Google OAuth 실제 `/turn` 증명만 storageState 캡처 후 남아 있다.
</p>
</div>
@ -153,11 +187,75 @@
<div class="metric"><span>Pages Production</span><b>0fe8f3cc</b></div>
<div class="metric"><span>Public API</span><b>prod OK</b></div>
<div class="metric"><span>Backend unittest</span><b>20 OK</b></div>
<div class="metric"><span>App Commit</span><b>543d48c</b></div>
<div class="metric"><span>Decision</span><b>조건부 GO</b></div>
<div class="metric"><span>Roadmap</span><b>P0-P3</b></div>
<div class="metric"><span>Decision</span><b>P0 조건부</b></div>
</div>
</div>
<section>
<div class="section-head">
<div>
<h2>전체 개발 로드맵</h2>
<p>`docs/MASTERPLAN.md`와 `docs/redteam/MASTERPLAN_REVISIONS.md`를 합친 팀장 판단용 단계표</p>
</div>
</div>
<div class="roadmap">
<article class="phase-card current">
<div class="phase-top"><span class="phase-id">Phase 0</span><span class="tag doing">closing</span></div>
<h3>기반 정렬 / 운영 안전장치</h3>
<p>인프라, 인증 경계, fail-closed, 공개 배포, 회귀 테스트 안정화.</p>
<ul class="phase-list">
<li><b>상태:</b> 대부분 완료, 공개 `/turn` proof만 남음</li>
<li><b>검증:</b> build + backend 20 + Playwright 72</li>
<li><b>운영:</b> prod API 8001, engine 9099, tunnel 1개</li>
</ul>
</article>
<article class="phase-card next">
<div class="phase-top"><span class="phase-id">Phase 1</span><span class="tag doing">next</span></div>
<h3>MVP 코어 루프</h3>
<p>1 페르소나 상담, 실제 턴 저장, 회기말 피드백, 저항 엔진 검증.</p>
<ul class="phase-list">
<li><b>DoD:</b> 로그인 → P1 상담 완주 → 피드백 수신</li>
<li><b>추가:</b> 음성 왕복 1턴 PoC 포함</li>
<li><b>증거:</b> cost/turn DB 적재 + openness 곡선 대조</li>
</ul>
</article>
<article class="phase-card">
<div class="phase-top"><span class="phase-id">Phase 2a</span><span class="tag info">planned</span></div>
<h3>3역할 / OAuth / 페르소나</h3>
<p>학습자, 교수자, 관리자 권한 분리와 페르소나 확장.</p>
<ul class="phase-list">
<li><b>DoD:</b> 타인 session 직접 접근 403</li>
<li><b>범위:</b> OAuth BFF, RBAC, 교수 검수 루프</li>
<li><b>주의:</b> visible_to와 인간 권한은 별도 레이어</li>
</ul>
</article>
<article class="phase-card">
<div class="phase-top"><span class="phase-id">Phase 2b</span><span class="tag info">planned</span></div>
<h3>음성 캐스케이드</h3>
<p>STT → 엔진 → TTS 왕복, WSS/터널 안정성, barge-in 로깅.</p>
<ul class="phase-list">
<li><b>DoD:</b> 50분 WSS 끊김 실측</li>
<li><b>범위:</b> Deepgram STT, OpenAI TTS, voice preset</li>
<li><b>리스크:</b> 실시간 레이턴시는 실측 전 완료 표기 금지</li>
</ul>
</article>
<article class="phase-card">
<div class="phase-top"><span class="phase-id">Phase 3</span><span class="tag info">planned</span></div>
<h3>교육용 파일럿 / 효과성</h3>
<p>수련생 파일럿, 사전사후 효과 측정, 재귀학습 데이터셋 산출.</p>
<ul class="phase-list">
<li><b>DoD:</b> 20명 완주 + KPI 충족</li>
<li><b>측정:</b> SUS, 자기효능감, κ/ICC, 환각률</li>
<li><b>정정:</b> IRB 게이트가 아니라 데이터 활용동의/개인정보 게이트</li>
</ul>
</article>
</div>
<div class="source-note">
정정 기준: `MASTERPLAN` 원본의 IRB 신청/승인 게이트는 `MASTERPLAN_REVISIONS` 기준으로 제거한다. Phase 2는 2a(3역할/OAuth/페르소나)와 2b(음성 캐스케이드)로 분리하고, Phase 1 DoD에는 얇은 음성 왕복 1턴 PoC를 포함한다.
</div>
</section>
<section>
<div class="section-head">
<div>
@ -382,7 +480,7 @@ powershell -NoProfile -ExecutionPolicy Bypass -File scripts\start-public-runtime
<ul class="list">
<li>`frontenddesign` 스킬은 현재 세션에 없었다. 다음 세션에서 보이면 먼저 사용하고, 없으면 `docs/DESIGN_CONCEPT.md`를 따른다.</li>
<li>학습자 홈과 active session UX는 사용자가 강하게 불만을 말한 영역이다. fake 기록/통계 금지, 0회 기록은 실제 서버 세션 0개 기반 빈 상태로 유지, active session 전체화면/무문서스크롤 유지.</li>
<li>worktree는 원래부터 dirty다. 관련 없는 변경을 되돌리지 말 것.</li>
<li>추적 파일 기준 worktree는 깨끗하게 유지한다. `.env`, 로그, `node_modules` 같은 ignored runtime 파일은 운영/개발 상태로만 취급하고 커밋하지 않는다.</li>
<li>OAuth secret은 출력하지 말 것. 실제 secret은 환경 파일/인프라 설정에만 둔다.</li>
</ul>
</section>