세션 평가·라이브코치·교수자 분석 라운드 마감 + 문서 정리 + 코드품질 리팩터

- 누적 작업트리 커밋: 회기 평가 복구·durable 저장, 라이브 코치 이력/근거, 교수자 학생분석, 음성 비언어 메타, PII 마스킹, 운영 티켓/헬스 등
- 문서: 완료 기록 docs/archive/ 냉동 보관, docs/ 단일 인덱스(docs/README.md)+통합 TODO(docs/TODO.md)로 정리
- 리팩터(행위 보존): Stage enum SSOT(taxonomy 소유·state_machine re-export), store recent/masked_turns 중복 제거, speaker_ko_label 단일 헬퍼, _list_sessions N+1 제거(state/turns 배치 + 턴평가 하이드레이션 배치)
- 검증: 백엔드 pytest 352 passed, _list_sessions E2E chromium-single-run 2 passed
This commit is contained in:
Yun Chan 2026-07-02 02:50:36 +09:00
parent 7c41c3ce79
commit 778e8526d4
108 changed files with 6457 additions and 455 deletions

View file

@ -820,6 +820,7 @@
}
.pf-analysis__chart,
.pf-analysis__stages,
.pf-analysis__personas,
.pf-analysis__timeline{
min-width:0;
border:1px solid var(--paper-2);
@ -877,6 +878,135 @@
font-size:var(--fs-xs);
font-weight:700;
}
.pf-persona-drill{
display:flex;
flex-direction:column;
max-height:min(580px,62vh);
overflow:auto;
scrollbar-gutter:stable;
}
.pf-persona-group{
min-width:0;
border-top:1px solid var(--paper-2);
}
.pf-persona-group:first-child{
border-top:0;
}
.pf-persona-group__summary{
width:100%;
min-width:0;
display:grid;
grid-template-columns:44px minmax(160px,1fr) minmax(260px,.92fr) auto;
gap:10px;
align-items:center;
padding:12px;
border:0;
background:transparent;
color:inherit;
font:inherit;
text-align:left;
cursor:pointer;
}
.pf-persona-group__summary:hover,
.pf-persona-group.is-open .pf-persona-group__summary{
background:var(--bg-surface-2);
}
.pf-persona-group__summary:focus-visible{
outline:2px solid var(--accent);
outline-offset:-2px;
}
.pf-persona-group__code{
width:38px;
height:34px;
display:grid;
place-items:center;
border-radius:var(--radius-sm);
color:var(--accent-deep);
background:var(--accent-tint);
font-family:var(--font-num);
font-size:12px;
font-weight:830;
}
.pf-persona-group__main{
min-width:0;
display:grid;
gap:4px;
}
.pf-persona-group__main b{
color:var(--text-strong);
font-size:var(--fs-sm);
line-height:1.35;
overflow:hidden;
text-overflow:ellipsis;
white-space:nowrap;
}
.pf-persona-group__main small{
color:var(--text-muted);
font-size:12px;
line-height:1.35;
overflow:hidden;
text-overflow:ellipsis;
white-space:nowrap;
}
.pf-persona-group__metrics{
min-width:0;
display:grid;
grid-template-columns:repeat(4,minmax(58px,1fr));
gap:7px;
}
.pf-persona-group__metrics span{
min-width:0;
display:grid;
gap:3px;
}
.pf-persona-group__metrics small{
color:var(--text-muted);
font-size:11px;
line-height:1.2;
}
.pf-persona-group__metrics b{
min-width:0;
color:var(--text-strong);
font-family:var(--font-num);
font-size:15px;
line-height:1.15;
white-space:nowrap;
overflow:hidden;
text-overflow:ellipsis;
}
.pf-persona-group__open{
display:inline-flex;
align-items:center;
justify-content:center;
gap:4px;
min-height:30px;
padding:0 8px;
border:1px solid var(--hair);
border-radius:var(--radius-sm);
color:var(--accent-deep);
background:var(--accent-tint);
font-size:var(--fs-xs);
font-weight:760;
white-space:nowrap;
}
.pf-persona-group__summary:hover .pf-persona-group__open{
border-color:var(--accent);
}
.pf-persona-sessions{
margin:0 12px 12px 56px;
border:1px solid var(--paper-2);
border-radius:var(--radius-sm);
overflow:hidden;
background:var(--bg-surface);
}
.pf-persona-sessions .pf-timeline-row{
grid-template-columns:34px minmax(150px,1fr) minmax(200px,.82fr) minmax(104px,.42fr) auto;
padding:10px;
}
.pf-persona-sessions .pf-timeline-row__step{
width:28px;
height:28px;
}
.pf-timeline{
max-height:min(520px,58vh);
overflow:auto;
@ -1378,6 +1508,16 @@
.pf-analysis__metrics span:nth-child(n+4){
border-top:1px solid var(--hair);
}
.pf-persona-group__summary{
grid-template-columns:44px minmax(0,1fr) auto;
}
.pf-persona-group__metrics{
grid-column:2 / 4;
grid-row:2;
}
.pf-persona-sessions .pf-timeline-row{
grid-template-columns:34px minmax(0,1fr) minmax(190px,.85fr) auto;
}
.pf-timeline-row{
grid-template-columns:34px minmax(0,1fr) minmax(190px,.85fr) auto;
}
@ -1461,6 +1601,31 @@
.pf-stage-item:nth-child(n+3){
border-top:1px solid var(--hair);
}
.pf-persona-drill{
max-height:560px;
}
.pf-persona-group__summary{
grid-template-columns:38px minmax(0,1fr);
align-items:start;
}
.pf-persona-group__metrics,
.pf-persona-group__open{
grid-column:2;
}
.pf-persona-group__metrics{
grid-row:auto;
grid-template-columns:repeat(4,minmax(0,1fr));
}
.pf-persona-group__open{
justify-self:start;
}
.pf-persona-sessions{
margin:0 10px 10px 48px;
}
.pf-persona-sessions .pf-timeline-row{
grid-template-columns:34px minmax(0,1fr);
align-items:start;
}
.pf-timeline{
max-height:560px;
}
@ -1607,6 +1772,28 @@
.pf-stage-item:nth-child(n+2){
border-top:1px solid var(--hair);
}
.pf-persona-group__summary{
grid-template-columns:1fr;
}
.pf-persona-group__code{
width:auto;
min-width:38px;
justify-self:start;
padding:0 10px;
}
.pf-persona-group__metrics,
.pf-persona-group__open{
grid-column:1;
}
.pf-persona-group__metrics{
grid-template-columns:repeat(2,minmax(0,1fr));
}
.pf-persona-sessions{
margin:0 8px 8px;
}
.pf-persona-sessions .pf-timeline-row__metrics{
grid-template-columns:1fr;
}
.pf-timeline-row__metrics{
grid-template-columns:1fr;
}