OpenMath은 PR 기반 개발 흐름을 따른다. main 브랜치에 직접 푸시하지 않는다.
pnpm installpnpm install 시 husky가 자동으로 git hooks를 설치한다. 이후 commit/push 시 다음이 자동 실행된다:
| 시점 | 도구 | 검사 |
|---|---|---|
pre-commit |
lint-staged | 변경된 TS 파일 typecheck, 변경된 Python 파일 ruff lint |
pre-push |
husky | main 브랜치 직접 push 차단, Node/Python 전체 테스트 |
commit-msg |
husky | 커밋 메시지 첫 줄 72자 이하 |
hook을 우회해야 할 정당한 사유가 있으면 --no-verify 사용. 단, 이는 예외 상황에만.
main # 항상 배포 가능한 상태
├── feat/<scope>-<short-name> # 새 기능
├── fix/<scope>-<short-name> # 버그 수정
├── chore/<scope>-<name> # 리팩토링, 설정, 의존성
└── docs/<name> # 문서 변경
예시:
feat/agent-curriculum-strategy-loaderfix/math-engine-rational-parsingchore/ci-add-coverage-upload
- main에서 새 브랜치 분기
- 작업 + 테스트
- 로컬 검증 통과 확인
pnpm -F @openmath/agent typecheck pnpm -F @openmath/agent test cd packages/math-engine && uv run pytest
- push 후 PR 생성
- CI 통과 후 merge (리뷰는 권장이지만 강제는 아님)
명령형 영어. 첫 줄은 50자 이내, 본문은 한국어 OK.
Add curriculum strategy YAML loader
[9수XX-YY] 형식의 성취기준코드를 파싱하고
대응되는 출제 전략 YAML 을 메모리에 캐싱한다.
- TypeScript:
strict: true.as any,@ts-ignore금지. - Python: ruff (
E,F,I,UP룰셋). - 주석은 코드로 표현 못하는 의도/제약/수학식만.
- 새 기능 → 단위 테스트 동반
- 외부 시스템 통합 → integration 테스트
- 버그 수정 → 회귀 테스트 추가
PR 마다 다음이 자동 실행된다:
node-tests: typecheck + vitest unitpython-tests: ruff + pytestintegration-tests: 실제 Python 서버 spawn 후 e2e
전부 통과해야 merge 가능.
main 브랜치는 GitHub 측에서도 보호된다:
- PR 없이 직접 push 불가 (admin bypass 제외)
- CI 전부 통과 필수
- review approval은 권장 (강제 아님; 팀 규모상 옵셔널)
- force push, branch 삭제 금지
로컬 git hook은 1차 방어선이고, GitHub branch protection이 최종 차단선이다.