Skip to content

Develop -> Main#440

Merged
xnlwe09 merged 141 commits into
mainfrom
develop
Jun 2, 2026
Merged

Develop -> Main#440
xnlwe09 merged 141 commits into
mainfrom
develop

Conversation

@xnlwe09

@xnlwe09 xnlwe09 commented Jun 2, 2026

Copy link
Copy Markdown
Member

개요

  • Develop -> Main 머지

작업사항

UI

Summary by CodeRabbit

Release Notes

  • New Features

    • 최근 본 회사 목록 추가
    • 모집공고 지역 필터 기능 추가
    • 회사/모집공고 정렬 옵션 추가
    • 북마크 섹션 추가
  • Chores

    • 애플리케이션 버전 2.4.0으로 업데이트
    • 개발 아키텍처 및 컨벤션 문서화
    • SwiftLint 및 git hook 자동화 설정 추가

leejh08 and others added 30 commits January 19, 2026 19:03
options를 dropdown을 사용하는 VC에서 배열로 받아 보여주도록 수정
전체 뷰와 Dropdown 사이의 간격을 DropdownView에서 관리하도록 수정
외부 터치 시 드롭다운 닫힘 기능 및 PublishRelay 추가
updateSortOption에서 fetch 실패 시의 에러 처리
🔗 :: (#1) 모집의뢰서 및 기업 정렬 드롭다운 추가
leejh08 and others added 25 commits April 10, 2026 14:05
- ios-harness: GREEN 승인 후 REFACTOR 단계 명시 (중복 제거, private 메서드 추출, 테스트 재통과 확인)
- ios-developer: REFACTOR 단계 가이드라인 추가

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- .claude/agents/ios-critic.md: 설계 의도 반박 전담 skeptical evaluator 에이전트
  - 설계 의도 반박, 엣지케이스 발굴, 대안 제시, 확장성 검토 4가지 관점
  - CHALLENGE/ACCEPT 판정 체계
- ios-harness: Phase 3를 개발→반박→검증 3단계로 개편
  - developer → critic → reviewer 순서 명시
  - 파일 소유권(One file, one owner) 섹션 추가
- ios-developer: 파일 소유권 규칙 추가 (소스 파일 수정 독점권)
- ios-reviewer: 파일 소유권 규칙 추가 (읽기 전용, _workspace만 쓰기)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- .claude/settings.json: Edit/Write 툴 사용 후 Swift 파일에 SwiftLint 자동 실행
- scripts/hooks/swiftlint-on-save.sh: 훅 실행 스크립트 (에이전트가 결과 보고 즉시 수정)
- .gitignore: .claude/settings.json 버전 관리 예외 추가

에이전트 코드 작성 시 즉시 lint → pre-commit hook에서 이중 차단

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- 자유 텍스트 요청 대신 PRD 양식(기능/API/네비게이션/엣지케이스/비고)으로 구조화
- 파악 가능한 항목은 자동 채움, 누락 항목만 사용자에게 질문
- 추정값은 (추정) 표시 후 확인 요청
- 인터뷰 완료 후 PRD 요약 사용자 확인 받고 Phase 2 진행

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…emplate

🔗 :: (#433) harness PRD 인터뷰 기반 피처 명세 도입
…ent_and_file_ownership

🔗 :: (#431) ios-critic 에이전트, 파일 소유권 규칙, PostToolUse SwiftLint hook 추가
- .gitignore: !.claude/docs/ + !.claude/settings.json 둘 다 유지
- ios-harness/skill.md: TDD(RED→GREEN) + critic(반박) + reviewer 통합
  Phase 3를 'TDD 개발-반박-검증 사이클'로 합침

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ok_and_gc_agent

🔗 :: (#429) pre-commit hook, GC 에이전트 및 에이전트 기반 TDD 도입
@coderabbitai

coderabbitai Bot commented Jun 2, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 3f419f4e-6d80-429e-851d-78ec1c3331b8

📥 Commits

Reviewing files that changed from the base of the PR and between f18f5ac and 3047215.

⛔ Files ignored due to path filters (3)
  • Projects/Modules/DesignSystem/Resources/Images/Icons.xcassets/Bookmark.imageset/Bookmark.svg is excluded by !**/*.svg
  • Projects/Modules/DesignSystem/Resources/Images/Icons.xcassets/Tabbar/Company Tab.imageset/company.svg is excluded by !**/*.svg
  • graph.png is excluded by !**/*.png
📒 Files selected for processing (110)
  • .claude/agents/ios-critic.md
  • .claude/agents/ios-developer.md
  • .claude/agents/ios-gc.md
  • .claude/agents/ios-reviewer.md
  • .claude/docs/architecture.md
  • .claude/docs/conventions.md
  • .claude/docs/hooks.md
  • .claude/settings.json
  • .claude/skills/ios-code-review/skill.md
  • .claude/skills/ios-feature-dev/skill.md
  • .claude/skills/ios-harness/skill.md
  • .github/CODEOWNERS
  • .gitignore
  • .swiftlint.yml
  • AGENTS.md
  • Projects/App/Support/Info.plist
  • Projects/Core/Sources/Steps/ApplyStep.swift
  • Projects/Core/Sources/Steps/CompanyDetailPreviousViewType.swift
  • Projects/Core/Sources/Steps/HomeStep.swift
  • Projects/Core/Sources/Steps/MyPageStep.swift
  • Projects/Core/Sources/Steps/RecruitmentDetailPreviousViewType.swift
  • Projects/Core/Sources/Steps/RecruitmentFilterStep.swift
  • Projects/Core/Sources/Steps/RejectReasonStep.swift
  • Projects/Data/Sources/DI/UseCaseAssembly.swift
  • Projects/Data/Sources/DTO/Companies/RecentCompanyListResponseDTO.swift
  • Projects/Data/Sources/DataSource/API/CompaniesAPI.swift
  • Projects/Data/Sources/DataSource/API/RecruitmentsAPI.swift
  • Projects/Data/Sources/DataSource/Remote/RemoteCompaniesDataSource.swift
  • Projects/Data/Sources/DataSource/Remote/RemoteRecruitmentsDataSource.swift
  • Projects/Data/Sources/Repositories/CompaniesRepositoryImpl.swift
  • Projects/Data/Sources/Repositories/RecruitmentsRepositoryImpl.swift
  • Projects/Domain/Documentation/Domain.docc/Domain.md
  • Projects/Domain/Documentation/Domain.docc/Tutorials/AddNewFeature/AddNewFeature.tutorial
  • Projects/Domain/Documentation/Domain.docc/Tutorials/AddNewFeature/Resources/01-notice-step.swift
  • Projects/Domain/Documentation/Domain.docc/Tutorials/AddNewFeature/Resources/02-notice-detail-step.swift
  • Projects/Domain/Documentation/Domain.docc/Tutorials/AddNewFeature/Resources/03-notice-detail-entity.swift
  • Projects/Domain/Documentation/Domain.docc/Tutorials/AddNewFeature/Resources/04-notices-repository.swift
  • Projects/Domain/Documentation/Domain.docc/Tutorials/AddNewFeature/Resources/05-fetch-notice-detail-usecase.swift
  • Projects/Domain/Documentation/Domain.docc/Tutorials/AddNewFeature/Resources/06-notice-api.swift
  • Projects/Domain/Documentation/Domain.docc/Tutorials/AddNewFeature/Resources/07-notice-detail-dto.swift
  • Projects/Domain/Documentation/Domain.docc/Tutorials/AddNewFeature/Resources/08-remote-notices-datasource.swift
  • Projects/Domain/Documentation/Domain.docc/Tutorials/AddNewFeature/Resources/09-notice-detail-reactor.swift
  • Projects/Domain/Documentation/Domain.docc/Tutorials/AddNewFeature/Resources/10-notice-detail-viewcontroller.swift
  • Projects/Domain/Documentation/Domain.docc/Tutorials/AddNewFeature/Resources/11-assembly-registration.swift
  • Projects/Domain/Documentation/Domain.docc/Tutorials/AddNewFeature/Resources/12-notice-detail-flow.swift
  • Projects/Domain/Documentation/Domain.docc/Tutorials/AddNewFeature/Resources/13-notice-flow-parent.swift
  • Projects/Domain/Documentation/Domain.docc/Tutorials/JOBIS.tutorial
  • Projects/Domain/Project.swift
  • Projects/Domain/Sources/Entities/RecentCompany/RecentCompanyEntity.swift
  • Projects/Domain/Sources/Enums/CompanySortType.swift
  • Projects/Domain/Sources/Enums/RecruitmentSortType.swift
  • Projects/Domain/Sources/Repositories/CompaniesRepository.swift
  • Projects/Domain/Sources/Repositories/RecruitmentsRepository.swift
  • Projects/Domain/Sources/UseCases/Companies/FetchCompanyListUseCase.swift
  • Projects/Domain/Sources/UseCases/Companies/FetchRecentCompanyListUseCase.swift
  • Projects/Domain/Sources/UseCases/Recruitments/FetchRecruitmentListUseCase.swift
  • Projects/Flow/Sources/Apply/ApplyFlow.swift
  • Projects/Flow/Sources/ChangePassword/ChangePasswordFlow.swift
  • Projects/Flow/Sources/ChangePassword/ConfirmPasswordFlow.swift
  • Projects/Flow/Sources/Company/CompanyFlow.swift
  • Projects/Flow/Sources/Home/HomeFlow.swift
  • Projects/Flow/Sources/MyPage/MyPageFlow.swift
  • Projects/Flow/Sources/MyPage/Review/WritableReviewFlow.swift
  • Projects/Flow/Sources/Recruitment/RecruitmentDetailFlow.swift
  • Projects/Flow/Sources/Recruitment/RecruitmentFilterFlow.swift
  • Projects/Flow/Sources/RejectReason/RejectReasonFlow.swift
  • Projects/Flow/Sources/Tabs/TabsFlow.swift
  • Projects/Flow/Sources/WinterIntern/WinterInternDetailFlow.swift
  • Projects/Flow/Sources/WinterIntern/WinterInternFlow.swift
  • Projects/Modules/DesignSystem/Resources/Images/Icons.xcassets/Bookmark.imageset/Contents.json
  • Projects/Modules/DesignSystem/Resources/Images/Icons.xcassets/Tabbar/Company Tab.imageset/Contents.json
  • Projects/Modules/DesignSystem/Sources/Dropdown/JobisDropdownCell.swift
  • Projects/Modules/DesignSystem/Sources/Dropdown/JobisDropdownView.swift
  • Projects/Modules/DesignSystem/Sources/Image/JobisIcon.swift
  • Projects/Modules/DesignSystem/Sources/Label/JobisRecruitingStatusLabel.swift
  • Projects/Modules/DesignSystem/Sources/UITabBarItem/JobisTabBarItem.swift
  • Projects/Presentation/Sources/Bookmark/BookmarkViewController.swift
  • Projects/Presentation/Sources/ChangePassword/ChangePasswordReactor.swift
  • Projects/Presentation/Sources/ChangePassword/ChangePasswordViewController.swift
  • Projects/Presentation/Sources/ChangePassword/ChangePasswordViewModel.swift
  • Projects/Presentation/Sources/Company/CompanyReactor.swift
  • Projects/Presentation/Sources/Company/CompanyViewController.swift
  • Projects/Presentation/Sources/CompanyDetail/CompanyDetailPreviousViewType.swift
  • Projects/Presentation/Sources/CompanyDetail/CompanyDetailReactor.swift
  • Projects/Presentation/Sources/CompanyDetail/CompanyDetailViewController.swift
  • Projects/Presentation/Sources/DI/Assembly/MainPresentationAssembly.swift
  • Projects/Presentation/Sources/DI/Assembly/SettingPresentationAssembly.swift
  • Projects/Presentation/Sources/Home/Components/Cell/BannerCollectionViewCell.swift
  • Projects/Presentation/Sources/Home/Components/Cell/RecentCompanyCollectionViewCell.swift
  • Projects/Presentation/Sources/Home/HomeReactor.swift
  • Projects/Presentation/Sources/Home/HomeViewController.swift
  • Projects/Presentation/Sources/Home/RecentCompany/RecentCompanyItem.swift
  • Projects/Presentation/Sources/MyPage/Components/BookmarkSectionView.swift
  • Projects/Presentation/Sources/MyPage/MyPageReactor.swift
  • Projects/Presentation/Sources/MyPage/MyPageViewController.swift
  • Projects/Presentation/Sources/Notice/NoticeDetailViewController.swift
  • Projects/Presentation/Sources/Recruitment/RecruitmentReactor.swift
  • Projects/Presentation/Sources/Recruitment/RecruitmentViewController.swift
  • Projects/Presentation/Sources/RecruitmentDetail/RecruitmentDetailReactor.swift
  • Projects/Presentation/Sources/RecruitmentFilter/RecruitmentFilterReactor.swift
  • Projects/Presentation/Sources/RecruitmentFilter/RecruitmentFilterViewController.swift
  • Projects/Presentation/Sources/WinterInternDetail/WinterInternDetailReactor.swift
  • Projects/Presentation/Sources/WinterInternDetail/WinterInternDetailViewController.swift
  • Projects/Presentation/Sources/WinterInternDetail/WinterInternDetailViewModel.swift
  • Projects/Presentation/Sources/WritableReview/WritableReviewReactor.swift
  • Projects/Presentation/Sources/WritableReview/WritableReviewViewController.swift
  • Projects/Presentation/Sources/WritableReview/WritableReviewViewModel.swift
  • Scripts/hooks/pre-commit
  • Scripts/hooks/swiftlint-on-save.sh
  • Scripts/setup-hooks.sh

Walkthrough

Core Steps/Flows/Presentation/Domain/Data에 정렬·지역·최근 기업 기능과 ReactorKit 전환을 반영하고, 탭 구조/라우팅을 갱신했습니다. DesignSystem 컴포넌트·DocC 튜토리얼·SwiftLint 설정·훅 스크립트·AGENTS 문서가 추가되었습니다. 앱 버전은 2.4.0으로 업데이트되었습니다.

Changes

네비게이션/필터·정렬/최근 기업 기능

Layer / File(s) Summary
정렬·지역 필터 확장
Projects/Core/Sources/Steps/*, Recruitment*Reactor.swift, Recruitment*Flow.swift, RecruitmentsAPI.swift, UseCases/Recruitments/*
Recruitment 필터에 region/sortType 추가, Step/Flow/Reactor/API/UseCase 전파.
회사 목록 정렬/탭 구조 개편
Company*Reactor.swift, Company*ViewController.swift, TabsFlow.swift, JobisTabBarItem.swift, JobisDropdown*
회사 목록 정렬 드롭다운 도입, 탭에 Company 추가, Bookmark 탭 제거.
최근 기업 섹션 추가
RecentCompany*(Domain/Data/Presentation), Home*
DTO/Entity/Repository/UseCase/DI와 Home 화면 섹션·셀 추가, 상세 진입 Step 연결.
Apply/RejectReason 시그니처 단순화
ApplyStep.swift, RejectReason*(Step/Flow), 관련 Flows
연관값 제거에 맞춰 Flows 라우팅/초기화 수정.
ReactorKit 전환(선택 화면)
ChangePassword*, WinterInternDetail*, WritableReview*
ViewModel 제거, Reactor 도입 및 DI/Flow 갱신.

문서/도구 구성

Layer / File(s) Summary
AGENTS/Skills/Docs 추가
.claude/agents/*, .claude/skills/*, .claude/docs/*, AGENTS.md
에이전트 역할/프로토콜/가이드 문서 및 아키텍처/컨벤션 정의.
DocC 튜토리얼
Projects/Domain/Documentation/Domain.docc/*
새 기능 추가 튜토리얼과 예시 리소스(Notice) 추가.
Lint/Hook/Ignore 설정
.swiftlint.yml, Scripts/hooks/*, .gitignore, .claude/settings.json
SwiftLint 규칙과 pre-commit/저장시 훅, ignore 규칙 정비.
버전/리소스
Info.plist, DesignSystem Assets/Icons
버전 2.4.0, 아이콘/컴포넌트 추가.

Sequence Diagram(s)

sequenceDiagram
  participant HomeVC
  participant HomeReactor
  participant UseCase as FetchRecentCompanyListUseCase
  participant Repo as CompaniesRepository
  participant Remote as RemoteCompaniesDataSource
  HomeVC->>HomeReactor: viewWillAppear
  HomeReactor->>UseCase: execute()
  UseCase->>Repo: fetchRecentCompanyList()
  Repo->>Remote: fetchRecentCompanyList()
  Remote-->>Repo: [RecentCompanyEntity]
  Repo-->>UseCase: [RecentCompanyEntity]
  UseCase-->>HomeReactor: [RecentCompanyEntity]
  HomeReactor-->>HomeVC: State.recentCompanyList 업데이트
Loading

Estimated code review effort

🎯 5 (Critical) | ⏱️ ~120 minutes

Possibly related issues

Possibly related PRs

Suggested labels

✨feat, ♻️refactor, 📝docs, 👾bug, 🧪test

Suggested reviewers

  • leejh08
  • circle0802

Poem

토끼는 탭을 뛰어 넘고 폴짝—
정렬을 흔들어 별을 섞고, 지역을 주머니에 쏙!
최근 기업, 반짝 카드에 담아
리액터 북- 북- 동작 준비 완료!
깃발은 2.4.0, 출발! 🐇✨

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch develop

@xnlwe09 xnlwe09 merged commit af0be33 into main Jun 2, 2026
2 of 3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants