Skip to content

Latest commit

 

History

History
71 lines (52 loc) · 6.34 KB

File metadata and controls

71 lines (52 loc) · 6.34 KB

T7 — 교육 흐름과 협업 시뮬레이션

완료일: 2026-09-12

작업 범위

T6의 실제 SQLite·PostgreSQL Alembic runtime과 Lab UI 위에 다섯 lesson의 상태 기반 validator를 연결한다. 동일한 공통 base에서 Alice, Bob, Integration workspace를 복제하고, 두 actor의 revision 파일을 합쳐 실제 multiple-head 오류와 merge 해결을 재현한다. T8의 IndexedDB checkpoint, 새로고침 복구, ZIP archive는 포함하지 않는다.

구현 결과

  • init, 수동 revision, upgrade/downgrade, autogenerate 검토, Alice/Bob branch와 merge의 다섯 lesson을 같은 가이드 UI로 제공한다.
  • lesson 단계는 실제 Alembic 환경 파일, ScriptDirectory DAG, Inspector schema, alembic_version, 명령 전후 snapshot 전이와 구조화된 argv로 판정한다. migration 파일 본문의 특정 문자열을 성공 조건으로 사용하지 않는다.
  • init, 미적용 revision, upgrade/downgrade, autogenerate 생성·파일 검토·DB 적용과 multiple-head 오류 관찰 이력을 workspace별로 기록한다.
  • 자유 실습과 가이드 모드가 같은 AlembicRuntimeClient.runCommand()를 사용한다. 가이드는 명령 입력을 돕지만 결과를 대신 실행하거나 합성하지 않는다.
  • 협업 실습 시작 조건은 단일 workspace, 저장된 편집 상태, 하나의 file head와 동일한 DB current다. 네 runtime 한도를 채우는 다른 workspace가 있으면 내보내기·삭제 동선을 안내한다.
  • SQLite는 Alembic 파일과 실제 database 파일을 clone seed로 복제한다. PostgreSQL은 파일과 실제 PGlite 데이터 디렉터리 dump를 복제하며, 각 clone은 독립 Pyodide/PGlite Worker를 사용한다.
  • Alice와 Bob이 공통 base에서 각자 만든 revision 파일만 Integration workspace에 복사한다. Integration의 실제 graph가 multiple heads가 된 뒤 upgrade head 원본 오류, merge revision의 복수 부모, merge head의 실제 DB current까지 안내하고 판정한다.
  • 같은 revision 파일 경로 충돌은 자동 덮어쓰기 없이 중단한다. 실제 DDL 충돌과 같은 revision ID 문제도 Alembic/runtime 오류를 그대로 표시한다.
  • 협업 실습 초기화는 연결된 네 runtime을 함께 종료하고 새 단일 workspace로 돌아간다.
  • 협업 그룹 삭제는 연결된 네 runtime, 실제 DB와 체크포인트를 함께 제거하고 대체 workspace를 만들지 않는다.

변경 파일

  • lesson 정의·validator·가이드: src/lessons/lessons.ts, src/lessons/LessonGuide.tsx
  • UI와 스타일: src/App.tsx, src/styles.css
  • workspace 조율: src/lab/store.ts
  • clone protocol과 client: src/runtime/protocol.ts, src/runtime/alembic-runtime-client.ts
  • 실제 DB 복제: src/runtime/python/alembic_runtime.py, src/runtime/pglite.worker.ts
  • 검증: src/lessons/lessons.test.ts, src/lab/store.test.ts, src/runtime/protocol.test.ts, src/App.test.tsx, tests/e2e/lessons-collaboration.spec.ts
  • 문서: README.md, docs/SPEC.md, docs/TASKS.md, docs/T7.md

검증

프로젝트 루트에서 mise exec -- 환경으로 실행했다.

  • pnpm lint: 통과
  • pnpm typecheck: 통과
  • pnpm test: 8개 파일, 36개 테스트 통과
  • T7 대상 E2E: Chromium·Firefox·WebKit에서 SQLite/PostgreSQL 6개 시나리오 통과
  • pnpm test:e2e --workers=1: 기존 T1~T6 회귀를 포함해 57개 테스트 전체 통과 (5.0분)
  • pnpm build: production build와 25 MiB 정적 파일 게이트 통과. 28개 파일 중 최대 9.62 MiB

E2E는 각 DB 모드에서 다섯 lesson을 순서대로 완료한 뒤 공통 base 복제, Alice/Bob 독립 revision, Integration 파일 합치기, 실제 Multiple head revisions 오류, merge revision 생성, merge head upgrade와 최종 alembic_version 일치를 확인한다.

현재 한계

  • lesson 이력과 clone seed는 현재 탭 메모리에만 존재한다. 새로고침, Worker crash 후 복원과 학습 진행도 영속화는 T8 범위다.
  • 협업 실습은 Base, Alice, Bob, Integration 네 runtime을 동시에 유지하므로 단일 workspace보다 메모리를 더 사용한다.
  • “PR 파일 합치기”는 실제 Git 작업이 아니라 revision 파일 집합을 Integration Alembic script directory에 합치는 교육용 동작이다.
  • PGlite는 T8 전까지 memory:// instance를 사용한다. T7 clone은 dumpDataDir()/loadDataDir로 그 시점의 실제 DB만 복제한다.

2026-09-13 사용성 보완

  • CodeMirror host와 editor/scroller의 높이 경계를 명시해 긴 Python 파일을 편집 패널 안에서 세로로 스크롤할 수 있게 수정했다.
  • autogenerate lesson에 DeclarativeBase, Mapped, mapped_column, constraint naming convention을 사용하는 실무형 SQLAlchemy 2.x User 모델 전체 예제를 추가했다.
  • models.py 교체, 저장, autogenerate, 생성 migration 검토, upgrade 순서를 구체적으로 안내한다. 예제 자체를 SQLite와 PostgreSQL의 실제 autogenerate E2E에 사용한다.
  • 관련 UI E2E 15개가 Chromium·Firefox·WebKit에서 통과해 편집기 내부 스크롤과 두 DB의 실제 예제 migration을 확인했다.
  • 자유 실습에서도 발견할 수 있도록 alembic init이 만드는 models.py에 같은 User 모델의 주석 예제를 포함했다. 기본 metadata는 비워 두어 수동 revision 실습은 기존처럼 시작할 수 있다.
  • 가이드 명령 버튼과 화면 아래 터미널 사이의 긴 이동, 명령 입력 후 별도 실행이 필요하다는 피드백 부족은 후속 UX 태스크로 분리했다.

초기 T7 Commit 메시지: feat: 실제 DB 상태로 판정하는 Alembic lesson과 Alice/Bob 협업 실습 구현

사용성 보완 Commit 메시지: fix: 편집기 스크롤을 복구하고 자유 실습용 User 모델 예제 추가

2026-09-20 학습 흐름 정합성 보완

  • init의 models.py를 실행 가능한 기본 User 모델로 바꾸고 email 한 줄만 주석 처리했다.
  • 02에서 Alembic의 수동 revision이 빈 파일인 이유와 users(id, name) 생성·제거 예제를 안내한다.
  • 03 validator는 실제 users 테이블 생성·제거와 최종 head 재적용을 판정한다.
  • 04는 기존 users에 email을 추가하는 autogenerate만 완료로 인정하며, 전체 모델 복사 대신 한 줄 편집을 안내한다.
  • 가이드 닫기와 01~05 압축 탭을 고정하고 lesson 내용만 독립 스크롤한다.