Repository navigation
feat: 비개발 문서 분석 1차 구현 - #35
danjee2009 wants to merge 5 commits into
Conversation
ed2f45f to
b11f1e8
Compare
|
@codex review |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b11f1e84b8
ℹ️ 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".
| summaries = any(reading.summaries.get(f"{document.id}/p{page.number}") for page in document.pages) | ||
| if len(direct.strip()) >= 50 or vision or summaries: # noqa: PLR2004 |
There was a problem hiding this comment.
Do not count non-citable summaries as readable
When a required visual document produces only a summary—such as when both reads have low legibility and return an empty transcript—this predicate treats the document as readable even though summaries are explicitly excluded from evidence. The pipeline then invokes profile generation and may report INSUFFICIENT_EVIDENCE, or even succeed from optional repository evidence, instead of returning UNREADABLE_DOCUMENT before generation as required; readability should require direct text, table content, or a vision transcript.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
05ea43e에서 반영했습니다. _ensure_readable에서 읽기 요약 조건을 빼서, 직접 추출 텍스트·표(50자 이상)나 비전 전사가 없으면 필수 문서는 UNREADABLE_DOCUMENT로 생성 전에 끝납니다. 요약만 있는 경우의 회귀 테스트를 추가했고(수정 전 실패 확인), 전체 검사 807 passed입니다.
인용할 수 없는 읽기 요약을 읽기 가능 판정에서 빼서, 요약만 나온 필수 문서는 종합 데이터 생성 전에 UNREADABLE_DOCUMENT로 끝나게 한다(Codex 리뷰 P2). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#42(PDF 텍스트 복구)와 #35(비개발 문서 분석 1차)의 충돌을 해소한다. - dto: ProfileJobRequest 문서 필드와 profile v2, documentExtraction 보고서를 함께 둔다. 실패 코드는 UNREADABLE_DOCUMENT와 DOCUMENT_* 3종을 모두 유지한다. - dispatch: 개발 경로 첫 PDF에 품질 검사·복구·정제 단계를 적용하고, 추가 개발 문서는 원문 추출 뒤 정제만 거친다. 실패 코드 분기와 보고서 첨부를 합친다. - ioc: 문서 분석 처리기와 복구 단계를 모두 주입한다. DocumentExtract는 정제 규칙이 옮겨 간 Stage2TextClean을 받는다. - docs/api.md: 두 계약을 모두 반영하고 복구·보고서 적용 범위와 코드 구분을 적는다. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
danjee2009
left a comment
There was a problem hiding this comment.
검토 범위: 비개발 문서 추출·가림 처리, 근거 검증, 프로필 생성 및 질문 사이클 연결. 전체 PR diff와 관련 파이프라인 경계를 확인했습니다. 테스트는 다시 실행하지 않았으며, 확인한 범위에서 추가 지적 사항은 없습니다.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 7625a23f46
ℹ️ 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".
| return any( | ||
| part.startswith((".env", "id_rsa")) or part.endswith((".tfstate", ".tfvars", ".tfvars.json", ".pem", ".key")) | ||
| for part in Path(path).parts |
There was a problem hiding this comment.
Normalize path parts before filtering sensitive files
When a repository contains a case-variant secret filename such as .ENV.production, ID_RSA, or SERVER.PEM, these case-sensitive checks do not recognize it. The file consequently remains in path_index, allowing the exploration model to request its contents and potentially send credentials to the external model; normalize each path component (for example with casefold()) before applying the prefix and suffix checks.
Useful? React with 👍 / 👎.
| except (AnthropicTextClientError, ValueError, RuntimeError): | ||
| logger.warning("nondev.page_reader.unread document=%s page=%s", document.id, page.number) | ||
| return None, False |
There was a problem hiding this comment.
Retry transient page-read failures
When the initial page-read call raises AnthropicTextClientError, ValueError, or RuntimeError, this returns needs_reread=False, so _read_region skips the advertised second attempt and immediately marks the page unread. A one-off exhausted API or runtime failure can therefore reject an otherwise readable visual-only required document as UNREADABLE_DOCUMENT; return a retry indication for recoverable initial-call failures, while still stopping after the reread attempt.
Useful? React with 👍 / 👎.
질문 사이클 충돌 해소: - rules/tools: main의 세트별 범위(set_numbers)와 #35의 직무별 문자열 카테고리를 함께 둔다. - generate: main의 SOLO 세트별 분할·잘림 재시도 구조를 기준으로 비개발 v2 경로를 얹는다. v2는 지금처럼 사이클 전체를 한 번에 만들고, 바뀐 _call(응답 객체·job_id)에 맞춰 토큰 한도로 잘리면 같은 요청을 새 대화로 다시 보낸다. v2 세트별 분할은 적용하지 않았다. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 비개발 저장소 트리 필터가 .ENV, ID_RSA, SERVER.PEM처럼 대소문자만 다른 비밀 파일도 거른다. - 페이지 읽기 호출이 실패하면 명세(처리 3)대로 확대 재읽기를 1회 하고, 재읽기까지 실패하면 미판독으로 둔다. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
#52(일반 직군 6종)가 이 PR(7625a23)을 통합했으므로 닫습니다.
🤖 Generated with Claude Code |
비개발 6직무의 문서가 기존 개발 포트폴리오 요약 경로로 처리되면 단일 그림·벡터 구성도·표의 원문 근거가 빠집니다. 문서 분석 1차 명세(07)에 따라 종류가 있는 PDF 최대 5개·합계 50쪽을 읽고, 검증한 인용으로 profile v2와 원질문 사이클을 연결합니다.
동작
unreadPages, profile 입력 예산 축약은droppedPages로 기록합니다. 텍스트 가리기·원문 인용 일치·서버 출처 우선순위로 근거를 검증합니다. 요약·관계만으로는 인용을 인정하지 않습니다./profile의jobRole/documents/supplements, 직무별 필수 문서·GitHub 규칙,UNREADABLE_DOCUMENT, profile v2 콜백을 연결합니다. 저장된 재료로만 비개발 질문 사이클을 생성합니다.docs/document-analysis-v1.md, 서버 계약은docs/api.md에 기록했습니다.검증
uv run ruff check --no-fix src testsuv run ruff format --check src testsuv run mypy src testsuv run lint-imports: 2개 계약 유지uv run pytest tests -q: 786 passed, 1 skipped선행 조건과 범위
de97fcf) 위로 rebase하고 base를 main으로 바꿨습니다. rebase 후 다시 확인한 결과 ruff·format·mypy·import-linter를 통과했고pytest tests -q806 passed, 1 skipped입니다. #40의 개발 회귀 골든도 변경 없이 통과합니다.Resolves #33