From a0311c595741f395688b0fef38d01b4fcd472116 Mon Sep 17 00:00:00 2001 From: Yun Chan Date: Tue, 8 Sep 2026 23:28:06 +0900 Subject: [PATCH] =?UTF-8?q?=ED=9A=8C=EA=B8=B0=20=EB=AC=B4=EB=B0=9C?= =?UTF-8?q?=ED=99=94=200=ED=84=B4=20=EB=B6=84=EB=A6=AC,=20=EC=9E=90?= =?UTF-8?q?=EA=B8=B0=EC=98=88=EC=B8=A1=20=EB=9D=BD=20=EB=B6=88=EB=B3=80?= =?UTF-8?q?=EC=8B=9D=20=EB=B0=8F=20TDD=20=ED=9A=8C=EA=B7=80=20=EA=B2=80?= =?UTF-8?q?=EC=A6=9D=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .claude/agents/implementer.md | 27 + .claude/agents/researcher.md | 26 + .claude/agents/verifier.md | 27 + .claude/settings.json | 3 + .../1-Photo-1.jpg | Bin 47131 -> 0 bytes .../1-Photo-1.jpg | Bin 25018 -> 0 bytes .gitignore | 9 + AGENT.md | 8 + AGENTS.md | 179 + CLAUDE.md | 19 +- apps/api/app/auth_sessions.py | 91 +- apps/api/app/routes/admin.py | 46 +- apps/api/app/routes/eval.py | 12 +- apps/api/app/routes/sessions.py | 55 +- apps/api/app/routes/teacher.py | 20 +- apps/api/app/routes/voice.py | 8 +- .../services/calibration_transfer_store.py | 71 +- .../services/continuous_improvement_store.py | 24 +- .../app/services/deliberate_practice_store.py | 38 +- .../app/services/outcome_repository_values.py | 40 + apps/api/app/services/practice_competency.py | 22 + .../app/services/practice_runtime_observer.py | 19 +- apps/api/app/services/session_metrics.py | 7 +- .../services/supervision_research_store.py | 24 +- apps/api/app/services/voice.py | 87 +- apps/api/app/session_dashboard_projection.py | 358 + apps/api/app/session_evaluation_repository.py | 275 + apps/api/app/session_persistence.py | 365 +- apps/api/app/session_persistence_values.py | 100 + apps/api/app/session_projection.py | 35 + apps/api/app/session_read_model.py | 18 +- apps/api/app/session_turn_memory.py | 19 + .../app/test_calibration_transfer_store.py | 44 + .../app/test_calibration_validation_tdd.py | 316 + apps/api/app/test_dashboard_projection_tdd.py | 215 + apps/api/app/test_eval_routes.py | 12 +- apps/api/app/test_evaluation_persistence.py | 44 +- apps/api/app/test_feedback_policy.py | 6 +- apps/api/app/test_learner_dashboard.py | 62 +- apps/api/app/test_notifications.py | 6 +- apps/api/app/test_rbac_idor.py | 6 +- .../api/app/test_session_learning_producer.py | 2 +- apps/api/app/test_session_read_model.py | 3 +- apps/api/app/test_session_turn_persistence.py | 18 +- apps/api/app/test_teacher_dashboard.py | 20 +- .../engine.public.err.log.2026-08-07T2200.bak | 4 - .../engine.public.err.log.20260809-160042.bak | 4 - .../engine.public.out.log.2026-08-07T2200.bak | 2235 ------- .../engine.public.out.log.20260809-160042.bak | 150 - .../e2e/self-directed-learning-loop.spec.ts | 39 +- apps/web/e2e/session-mvp.spec.ts | 55 +- apps/web/e2e/voice-success.spec.ts | 4 +- apps/web/knip.json | 6 +- apps/web/src/lib/focusTrap.ts | 21 + apps/web/src/pages/Session.tsx | 423 +- .../admin/ContinuousImprovementCockpit.tsx | 88 +- .../session-review/AlliancePulseCard.tsx | 42 +- .../CalibrationTransferCard.tsx | 5 +- .../src/pages/session-review/allianceScale.ts | 7 + .../session/AllianceCheckpointPrompt.tsx | 11 +- apps/web/src/pages/session/session.css | 37 + .../web/src/pages/session/sessionViewModel.ts | 280 + docs/DEPLOYMENT.md | 4 +- docs/HANDOFF.md | 885 +-- docs/MASTERPLAN.md | 2 +- docs/MEMORY_KNOWLEDGE_PERSONA_DESIGN.md | 4 +- docs/README.md | 32 +- docs/TODO.md | 695 +- .../HANDOFF-before-cleanup.md | 872 +++ .../project-cleanup-2026-09-07/README.md | 13 + .../TODO-before-cleanup.md | 659 ++ .../backlog-2026-06-26-before-cleanup.md | 244 + .../handoff-goal-production-2026-08-29.md | 5 +- .../refactor-governance-2026-07-15.md | 0 .../generation-reprocess-results.json | 5870 ----------------- docs/dev_dashboard.html | 41 +- docs/guides/architecture.md | 21 +- docs/guides/local-development.md | 8 +- docs/guides/testing.md | 24 +- docs/ops/agent-work-packet-template.md | 77 + docs/ops/backlog-2026-06-26.md | 287 +- docs/ops/codex-agents/README.md | 37 + docs/ops/codex-agents/explorer.toml | 19 + docs/ops/codex-agents/researcher.toml | 21 + docs/ops/codex-agents/verifier.toml | 20 + docs/ops/codex-agents/worker.toml | 22 + docs/ops/deployment-pipeline.md | 26 +- docs/ops/e2e-full-sweep-2026-07-27.md | 2 + docs/ops/evidence/debug-before-composer.png | Bin 0 -> 630620 bytes docs/ops/evidence/diag-01-prestart.png | Bin 0 -> 965023 bytes docs/ops/evidence/diag-02-after-start.png | Bin 0 -> 965023 bytes docs/ops/evidence/diag-03-after-start.png | Bin 0 -> 278295 bytes .../headful-01-learner-home-initial.png | Bin 0 -> 535166 bytes .../headful-02-session-multi-turn.png | Bin 0 -> 621909 bytes .../evidence/headful-03-review-transcript.png | Bin 0 -> 472543 bytes .../headful-04-review-calibration-locked.png | Bin 0 -> 389238 bytes ...eadful-05-learner-home-after-completed.png | Bin 0 -> 533859 bytes ...ful-06-learner-home-zero-turn-verified.png | Bin 0 -> 535252 bytes .../req011-prediction-error-2026-09-07.png | Bin 0 -> 943870 bytes infra/db/init/11_calibration_transfer.sql | 7 + 100 files changed, 4884 insertions(+), 11210 deletions(-) create mode 100644 .claude/agents/implementer.md create mode 100644 .claude/agents/researcher.md create mode 100644 .claude/agents/verifier.md create mode 100644 .claude/settings.json delete mode 100644 .codex-remote-attachments/019f06de-a1f7-78f1-90b3-79ff50184333/e8834910-90ec-40b7-82c8-824b158439d3/1-Photo-1.jpg delete mode 100644 .codex-remote-attachments/019f16b1-aa14-72b3-b828-a202b055dd1a/f3bdca82-8850-4471-b95d-9e222db9b377/1-Photo-1.jpg create mode 100644 apps/api/app/services/outcome_repository_values.py create mode 100644 apps/api/app/services/practice_competency.py create mode 100644 apps/api/app/session_dashboard_projection.py create mode 100644 apps/api/app/session_evaluation_repository.py create mode 100644 apps/api/app/session_persistence_values.py create mode 100644 apps/api/app/session_projection.py create mode 100644 apps/api/app/session_turn_memory.py create mode 100644 apps/api/app/test_calibration_validation_tdd.py create mode 100644 apps/api/app/test_dashboard_projection_tdd.py delete mode 100644 apps/api/engine.public.err.log.2026-08-07T2200.bak delete mode 100644 apps/api/engine.public.err.log.20260809-160042.bak delete mode 100644 apps/api/engine.public.out.log.2026-08-07T2200.bak delete mode 100644 apps/api/engine.public.out.log.20260809-160042.bak create mode 100644 apps/web/src/lib/focusTrap.ts create mode 100644 apps/web/src/pages/session-review/allianceScale.ts create mode 100644 apps/web/src/pages/session/sessionViewModel.ts create mode 100644 docs/archive/project-cleanup-2026-09-07/HANDOFF-before-cleanup.md create mode 100644 docs/archive/project-cleanup-2026-09-07/README.md create mode 100644 docs/archive/project-cleanup-2026-09-07/TODO-before-cleanup.md create mode 100644 docs/archive/project-cleanup-2026-09-07/backlog-2026-06-26-before-cleanup.md rename docs/{ops => archive/project-cleanup-2026-09-07}/handoff-goal-production-2026-08-29.md (97%) rename docs/{ops => archive/project-cleanup-2026-09-07}/refactor-governance-2026-07-15.md (100%) delete mode 100644 docs/avatar-art/personas/generation-reprocess-results.json create mode 100644 docs/ops/agent-work-packet-template.md create mode 100644 docs/ops/codex-agents/README.md create mode 100644 docs/ops/codex-agents/explorer.toml create mode 100644 docs/ops/codex-agents/researcher.toml create mode 100644 docs/ops/codex-agents/verifier.toml create mode 100644 docs/ops/codex-agents/worker.toml create mode 100644 docs/ops/evidence/debug-before-composer.png create mode 100644 docs/ops/evidence/diag-01-prestart.png create mode 100644 docs/ops/evidence/diag-02-after-start.png create mode 100644 docs/ops/evidence/diag-03-after-start.png create mode 100644 docs/ops/evidence/headful-01-learner-home-initial.png create mode 100644 docs/ops/evidence/headful-02-session-multi-turn.png create mode 100644 docs/ops/evidence/headful-03-review-transcript.png create mode 100644 docs/ops/evidence/headful-04-review-calibration-locked.png create mode 100644 docs/ops/evidence/headful-05-learner-home-after-completed.png create mode 100644 docs/ops/evidence/headful-06-learner-home-zero-turn-verified.png create mode 100644 docs/ops/evidence/req011-prediction-error-2026-09-07.png diff --git a/.claude/agents/implementer.md b/.claude/agents/implementer.md new file mode 100644 index 0000000..04d9e28 --- /dev/null +++ b/.claude/agents/implementer.md @@ -0,0 +1,27 @@ +--- +name: implementer +description: 오케스트레이터가 확정한 설계와 작업 패킷(목표/비목표/계약/경계/완료 기준/검증 명령)대로 코드를 구현·리팩터·테스트 작성하는 개발 워커. 설계가 확정된 구현·수정 작업은 오케스트레이터가 직접 하지 말고 이 워커에게 위임한다. Use proactively for delegated implementation work with a written work packet. +disallowedTools: Agent +model: sonnet +effort: high +color: green +--- + +너는 오케스트레이터(Fable/Opus)가 스폰한 구현 워커다. 오케스트레이션 바이블(AGENTS.md B절)의 위임 규칙은 너에게 적용되지 않는다. 받은 작업 패킷을 직접 구현한다. + +규칙 +- 설계·인터페이스·계약·데이터 모델을 바꾸지 않는다. 바꿔야만 한다면 멈추고 이유와 대안을 보고한다. +- 패킷 범위 밖 파일을 건드리지 않는다. 다른 워커의 변경을 되돌리지 않는다. 다른 에이전트를 스폰하지 않는다. +- fallback, silent catch, mock 데이터, 테스트 스킵, 조건 완화로 통과를 위장하지 않는다. 실패는 실패로 보고한다. +- 임시 주석, 디버그 출력, TODO, 작업 내역 주석을 남기지 않는다. 주변 코드의 스타일과 관용구를 따른다. +- 완료 전에 패킷의 검증 명령을 실제로 실행하고 결과 원문을 보고한다. 검증 명령은 `AGENTS.md` B.10 표준 세트 기준이다. +- 이 저장소의 `AGENTS.md` §0(OS·PowerShell 5.1)·§2(검증 기준)·§3(한글·커밋 문구)을 따른다. +- 커밋·push는 패킷이 명시적으로 허용할 때만 한다. 커밋 메시지에 AI 작성 문구나 Co-Authored-By를 넣지 않는다. +- 한국어로 보고한다. + +보고 형식 +1. 변경 파일 목록 +2. diff 요약 (무엇을 왜) +3. 실행한 명령과 결과 원문 (통과/실패 수, 실패 시 오류 메시지) +4. 미해결 항목 / 의문점 +5. 설계 변경 요청 (있으면 이유와 대안) diff --git a/.claude/agents/researcher.md b/.claude/agents/researcher.md new file mode 100644 index 0000000..0bb7ba6 --- /dev/null +++ b/.claude/agents/researcher.md @@ -0,0 +1,26 @@ +--- +name: researcher +description: 웹 검색·공식 문서·upstream 소스·이슈/PR·논문을 스위핑해 출처와 함께 보고하는 읽기 전용 조사 워커. 대규모 조사, 웹서핑 조사, 논문 스위핑, 레퍼런스 비교가 필요할 때 오케스트레이터가 주제별로 여러 개 병렬로 사용한다. Use proactively for any research or documentation sweep instead of researching directly. +tools: WebSearch, WebFetch, Read, Grep, Glob, mcp__plugin_context7_context7__resolve-library-id, mcp__plugin_context7_context7__query-docs +disallowedTools: Write, Edit, NotebookEdit, Agent +model: haiku +effort: medium +maxTurns: 40 +color: cyan +--- + +너는 오케스트레이터(Fable/Opus)가 스폰한 조사 워커다. 오케스트레이션 바이블(AGENTS.md B절)의 위임 규칙은 너에게 적용되지 않는다. 받은 조사 주제를 직접 수행한다. + +규칙 +- 파일을 수정하지 않는다. 다른 에이전트를 스폰하지 않는다. 설계 결정을 하지 않는다. +- 모든 주장에 출처를 붙인다: URL, 문서 버전·날짜, 커밋·파일 경로. 출처 없는 내용은 "미확인"으로 표시한다. 기억만으로 "지원한다"고 쓰지 않는다. +- 현재성이 중요한 정보(버전, API, 가격, 정책, 릴리스 여부)는 확인 날짜를 명시한다. +- 상충하는 출처가 있으면 둘 다 보여주고 판단은 오케스트레이터에게 넘긴다. +- 논문·문서 스위핑은 항목마다 제목, 출처, 핵심 결론, 우리 문제와의 관련성을 각 한두 줄로 정리한다. +- 이 저장소의 `AGENTS.md` §0(OS·PowerShell 5.1)·§3(한글)을 따른다. 기술 용어와 식별자는 원문 그대로 둔다. + +보고 형식 +1. 요약 (5줄 이내) +2. 항목별 발견 (각각 출처 포함) +3. 상충하는 정보 / 불확실한 것 +4. 오케스트레이터의 결정이 필요한 질문 diff --git a/.claude/agents/verifier.md b/.claude/agents/verifier.md new file mode 100644 index 0000000..2754515 --- /dev/null +++ b/.claude/agents/verifier.md @@ -0,0 +1,27 @@ +--- +name: verifier +description: 빌드·테스트·린트·재현 명령을 실행하고 통과/실패 수와 오류 원문을 그대로 보고하는 검증 워커. 판정은 하지 않는다. 오케스트레이터가 구현 결과를 평가하기 전 증거 수집에 사용한다. Use after implementation to gather raw build/test evidence. +tools: Bash, Read, Grep, Glob +disallowedTools: Write, Edit, NotebookEdit, Agent +model: sonnet +effort: low +maxTurns: 30 +color: yellow +--- + +너는 오케스트레이터(Fable/Opus)가 스폰한 검증 워커다. 오케스트레이션 바이블(AGENTS.md B절)의 위임 규칙은 너에게 적용되지 않는다. 지정된 명령을 직접 실행하고 결과를 보고한다. + +규칙 +- 소스 코드를 수정하지 않는다(빌드 산출물·캐시 생성은 허용). 다른 에이전트를 스폰하지 않는다. +- 실패를 통과로 바꾸는 어떤 조치도 하지 않는다: 테스트 스킵, 조건 완화, 설정 변경, 재시도로 우연 통과. flaky가 의심되면 같은 명령을 한 번 더 실행해 재현 여부만 기록한다. +- 판정하지 않는다. 사실만 보고한다: 통과/실패 수, 실패 테스트명, 오류 메시지 원문(핵심 부분), 실행 시간, 환경(브랜치, 커밋, 툴 버전). +- 로그가 길면 실패 부분을 우선 인용하고 전체 로그는 파일로 저장해 경로를 보고한다. +- 이 저장소의 `AGENTS.md` §0(OS·PowerShell 5.1: `$LASTEXITCODE` 확인, 네이티브 stderr `2>&1` 금지)·§2(검증 기준)를 따른다. +- 한국어로 보고한다. + +보고 형식 +1. 실행 명령 (그대로) +2. 결과: 통과/실패 수, 종료 코드 +3. 실패 상세: 테스트명 + 오류 원문 +4. 환경과 재현 여부 +5. 전체 로그 경로 diff --git a/.claude/settings.json b/.claude/settings.json new file mode 100644 index 0000000..986a0f6 --- /dev/null +++ b/.claude/settings.json @@ -0,0 +1,3 @@ +{ + "subagentModel": "sonnet" +} diff --git a/.codex-remote-attachments/019f06de-a1f7-78f1-90b3-79ff50184333/e8834910-90ec-40b7-82c8-824b158439d3/1-Photo-1.jpg b/.codex-remote-attachments/019f06de-a1f7-78f1-90b3-79ff50184333/e8834910-90ec-40b7-82c8-824b158439d3/1-Photo-1.jpg deleted file mode 100644 index 71a0421a5ee7eba2d26e533fb580ac6ef71e35c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47131 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