Conversation
* feat: Discord 검수 알림 전송을 위한 DiscordNotifier 추가 * feat: 학점/어학 성적 등록 완료 시 Discord 검수 알림 전송 * feat: 멘토 신청 등록 완료 시 Discord 검수 알림 전송 * feat: 신고 등록 완료 시 Discord 검수 알림 전송 * fix: 환경 미지정 시 기본값을 local 대신 빈 문자열로 변경 * refactor: notifyReviewRequested를 notify로 이름 변경
* chore: codex 관련 설정 추가 * chore: post-edit-check 훅 결과를 올바르게 에이전트에게 전달하도록 * feat: 지원 대학 적재 스킬 추가 * chore: Cursor 에이전트 설정 추가 .claude/.codex와 동일한 hooks, skills, permissions 구성을 .cursor에 맞게 추가한다. Co-authored-by: Cursor <cursoragent@cursor.com> * chore: Codex 훅 이중 등록 및 스킬 경로 참조 정리 Codex 훅을 settings.json 단일 설정과 .codex/hooks 경로로 통일하고, skill 문서의 교차 경로 참조를 각 도구 디렉터리 기준으로 수정한다. Co-authored-by: Cursor <cursoragent@cursor.com> * feat: prompt university ingestion credentials * docs: strengthen university import skill * fix: load-universities 스킬의 stage API 호스트 오류 수정 SKILL.md와 ingest_universities.py가 프론트엔드 도메인(stage.solid-connection.com)을 API base URL로 지정하고 있어 /admin/** 요청이 전부 404로 실패했다. 실제 API 서버 호스트인 api.stage.solid-connection.com으로 수정. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QJSNGrdcvtczeRHUNAEcj3 * chore: 사용되지 않는 university ingestion 템플릿 CSV 제거 SKILL.md와 ingest_universities.py 어디에서도 참조되지 않는 orphan 파일이며, 원본 워크북을 템플릿화하지 말라는 스킬 지침과도 상충함 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011VkhLDubhDSovKNS2SxnQ8 * chore: review-pr 스킬 제거 Claude Code에 동일 기능의 내장 review 스킬이 기본 제공되어 중복 제거 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011VkhLDubhDSovKNS2SxnQ8 * fix: load-universities 스킬의 stage API 호스트 오류 수정 enforce_dev_url이 stage base URL만 허용해, SKILL.md에서 안내하는 local 환경 선택 시 refusing non-dev target 에러로 막히던 문제 해결 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011VkhLDubhDSovKNS2SxnQ8 --------- Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d62ebe025b
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| }) | ||
| counts["univ_apply_infos_created"] += 1 | ||
| else: | ||
| response = api.request_json("PATCH", f"/admin/univ-apply-infos/{existing_apply_info['id']}", payload) |
There was a problem hiding this comment.
Allow snapshot updates to clear nullable fields
When an approved snapshot leaves an existing nullable field blank, apply_payload sends null here, but AdminUnivApplyInfoService.updateUnivApplyInfo delegates to UnivApplyInfo.update, which ignores every null scalar value. The old value therefore remains, verification fails, and other changes to the row may already have committed; use replacement semantics or another API representation that can explicitly clear these fields.
Useful? React with 👍 / 👎.
| if not text: | ||
| return None | ||
| try: | ||
| return int(float(text)) |
There was a problem hiding this comment.
Reject fractional integers instead of truncating them
For integer-designated workbook fields, values such as 2.9 pass validation and become 2 because int(float(text)) truncates them. This silently changes capacities, choice limits, or IDs during an import instead of raising the promised “must be an integer” error; validate that the parsed numeric value is integral before converting it in all three copies of this runner.
Useful? React with 👍 / 👎.
| parser.add_argument("--admin-password", default=os.environ.get("SOLID_CONNECT_ADMIN_PASSWORD")) | ||
| parser.add_argument("--access-token", default=os.environ.get("SOLID_CONNECT_ADMIN_ACCESS_TOKEN")) |
There was a problem hiding this comment.
Keep admin secrets out of process arguments
Accepting the administrator password and bearer token as CLI options exposes them through shell history and process inspection, directly contradicting the adjacent skill's requirement that credentials and tokens never be placed on a command line. Require an interactive secret prompt or another non-argument, in-memory handoff instead, and remove the error message that recommends these flags.
Useful? React with 👍 / 👎.
| @Async | ||
| public void notify(DiscordNotificationType type, String applicantInfo) { |
There was a problem hiding this comment.
Prevent alert saturation from failing user submissions
When the shared async executor is saturated (it is bounded to 10 threads and a 50-item queue), scheduling this method throws TaskRejectedException synchronously before the method body or its try block runs. Consequently GPA/language-score submissions, mentor applications, and reports can fail or roll back solely because an optional Discord notification could not be queued—even when the webhook is blank—so handle executor rejection without propagating it to the calling transaction.
Useful? React with 👍 / 👎.
No description provided.