Skip to content

chore(release): dev → main 승격 차단 사유 추적 - #586

Draft
HyungminYoon1 wants to merge 2040 commits into
mainfrom
dev
Draft

chore(release): dev → main 승격 차단 사유 추적#586
HyungminYoon1 wants to merge 2040 commits into
mainfrom
dev

Conversation

@HyungminYoon1

@HyungminYoon1 HyungminYoon1 commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

목적

이 PR은 dev → main 승격을 즉시 수행하기 위한 PR이 아니라, 승격을 제한하는 통합·CI 문제를 지속적으로 추적하는 게이트 PR입니다.

  • dev의 최신 상태를 main에 승격할 수 있는지 원격 CI로 확인합니다.
  • 실패 항목의 직접 원인과 근본 원인, 담당 이슈를 한곳에서 추적합니다.
  • 필수 검사가 통과하기 전에는 강제 병합하지 않습니다.
  • dev가 갱신되면 PR head와 검사·승인 상태도 갱신되는 이동 기준선입니다.

고정 보존 기준선

PR head와 별개로, 2026-07-20 당시 시연 가능 기준은 다음 ref에 고정했습니다.

두 ref에는 삭제 및 non-fast-forward 갱신 방지 규칙이 활성화되어 있습니다.

현재 확인된 승격 차단 사유

2026-07-20 PR head 2fb09748 기준입니다. dev가 갱신되면 최신 CI 결과로 다시 판정합니다.

  • Shared 테스트: Alembic 최신 head를 고정 SHA로 가정한 테스트가 현재 단일 head와 불일치
  • Gateway/root 테스트 선택: root 테스트가 Workflow Engine 의존성 gevent를 요구하지만 선택된 CI 환경에 설치되지 않음
  • Python lint: 대규모 main...dev diff에서 Ruff 오류가 노출됨. import 정리뿐 아니라 undefined name 등 실제 오류 후보 포함
  • Deployment 정적 검사: EKS workflow의 Actionlint/ShellCheck 오류
  • Trusted CI Control: CI control 변경이 포함되어 현재 head에 대한 독립 승인 후 /recheck-ci-control 필요
  • 최신 head 필수 CI 통과
  • 시연 핵심 흐름 확인
  • 병합 직전 실제 PR head 확인

참고 실행:

담당 이슈

  • MBA-337: 미사용 EKS·GHCR workflow 정리 및 남은 deployment workflow Actionlint 정합성
  • MBA-353: Trusted CI Control의 GitHub API 5xx 복원력 및 재검사 상태 단일화
  • Alembic 고정 head 테스트, root selector/dependency ownership, Ruff 기준선 오류는 별도 DEV/CI 후속 이슈로 분리 필요

MBA-353은 일반 CI 실패 우회나 승인 정책 완화를 담당하지 않습니다.

운영 규칙

  1. dev에 새 커밋이 병합되면 최신 head의 CI 결과로 체크리스트를 다시 갱신합니다.
  2. head 변경으로 무효화된 승인이나 과거 CI 성공을 현재 근거로 사용하지 않습니다.
  3. 필수 검사를 우회하거나 실패를 허용한 채 강제 병합하지 않습니다.
  4. 모든 차단 사유가 해소되면 병합 직전 head와 보존 기준의 차이를 확인한 뒤 main 승격 여부를 결정합니다.

변경 유형

  • 버그 수정
  • 새로운 기능
  • 리팩토링
  • 문서 수정
  • 기타: dev → main 승격 게이트 추적

보호 리소스·외부 실행 경계

  • 적용 여부: [ ] 적용 [x] 비적용
  • 비적용 사유: 새로운 보호 리소스 계약을 추가하는 구현 PR이 아니라, 이미 dev에 병합된 변경의 통합 상태를 추적하는 PR입니다.

@HyungminYoon1
HyungminYoon1 marked this pull request as ready for review July 20, 2026 12:31

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2fb097482c

ℹ️ 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".

Comment on lines +60 to +61
- name: APP_AUTH_SECRET_LIFECYCLE_MODE
value: "disabled"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge EKS Gateway에 production 환경을 명시하세요

운영 배포에 새 보안 설정을 추가했지만 NODE_ENV=production은 설정하지 않았습니다. 확인한 .github/workflows/deploy-eks-gateway.yml은 이 manifest를 api-server 운영 배포에 그대로 적용하며, 현재 상태에서는 LoginSecuritySettings.from_environment()가 development 기본값을 사용해 독립 fingerprint keyring 없이 기동하고 require_connector_test_security_ready()도 production 전용 HMAC 검증을 우회합니다. 운영에서 의도한 fail-closed 보안 경계를 적용하도록 이 env 블록에 NODE_ENV=production과 필수 production secret 참조를 추가해야 합니다.

Useful? React with 👍 / 👎.

Comment thread docker/gateway/Dockerfile
Comment on lines +54 to +55
COPY apps/memory /app/apps/memory
COPY apps/workflow_engine /app/apps/workflow_engine

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Gateway 이미지 의존 소스를 배포 트리거에 포함하세요

Gateway 이미지가 이제 apps/memoryapps/workflow_engine 코드를 직접 포함하지만, 확인한 .github/workflows/deploy-eks-gateway.ymlon.push.paths는 여전히 apps/gateway/**, apps/shared/**, docker/gateway/**만 감시합니다. 따라서 memory 또는 workflow engine만 변경한 main 커밋은 Gateway 이미지를 다시 빌드하지 않아, 운영 API가 같은 릴리스의 오래된 memory/model-routing 코드를 계속 실행하게 됩니다. 이미지에 포함되는 두 경로를 Gateway 배포 트리거에도 추가해야 합니다.

Useful? React with 👍 / 👎.

Comment thread apps/shared/celery_app.py
Comment on lines +61 to +65
beat_schedule={
"security-alert-reconciliation": {
"task": "security_alert.reconcile",
"schedule": 60.0,
"options": {"queue": "log"},

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge EKS 운영 배포에 Celery Beat를 추가하세요

이 schedule은 Beat 프로세스가 실행되어야만 security_alert.reconcile, audit/notification outbox 처리, memory retention 및 knowledge recovery 작업을 큐에 발행합니다. 확인한 .github/workflows/deploy-eks-logger.ymlinfra/k8s/namespaces/default/ 전체에는 log Celery worker만 있고 Beat 리소스가 없으므로, 실제 EKS 배포에서는 이 주기 작업들이 한 번도 발행되지 않아 보안 경보와 audit 알림이 갱신되지 않고 실패한 ingestion/sync job도 복구되지 않습니다. Compose/Helm에 추가한 singleton Beat와 동등한 리소스를 EKS 배포 경로에도 포함해야 합니다.

Useful? React with 👍 / 👎.

Comment on lines +100 to +102
knowledgeWorker:
enabled: false
replicaCount: 2

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge 운영 환경에 Knowledge ingestion worker를 배포하세요

문서 등록 경로는 knowledge.document_ingestion.execute를 전용 knowledge 큐로 발행하지만 production Helm 값은 worker를 비활성화하며, 확인한 infra/k8s와 EKS deploy workflow 전체에도 apps.gateway.knowledge_worker를 실행하는 리소스가 없습니다. 따라서 운영에서 파일/API 문서를 추가하면 job과 Celery 메시지만 생성되고 소비자가 없어 계속 pending 상태로 남아 RAG 인덱싱 흐름이 완료되지 않습니다. Gateway migration 적용 후 이 worker를 활성화하는 배포 단계와 실제 EKS manifest를 함께 제공해야 합니다.

Useful? React with 👍 / 👎.

Comment thread apps/gateway/services/llm_service.py Outdated
Comment on lines +454 to +460
valid_credentials = (
db.query(LLMCredential).filter(LLMCredential.is_valid.is_(True)).all()
)
return [LLMCredentialResponse.model_validate(c) for c in creds]
readable_credentials = [
credential
for credential in valid_credentials
if has_llm_credential_permission(db, user_id, credential.id, "read")

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Credential 목록을 active organization으로 제한하세요

GET /llm/credentials는 active organization header를 해석하지 않은 채 모든 유효 credential을 조회한 뒤 사용자의 read 권한만 검사합니다. 여러 organization을 관리하거나 양쪽에서 grant를 받은 사용자가 organization A를 선택해도 B의 credential 이름과 preview가 같은 관리 화면에 섞이고, 이를 선택한 뒤 A header로 permission 작업을 수행하면 404가 발생해 credential 관리 흐름이 깨집니다. LLMService.get_user_credentials에 검증된 active organization ID를 전달하고 쿼리와 permission 판정을 해당 organization으로 제한해야 합니다.

Useful? React with 👍 / 👎.

@HyungminYoon1 HyungminYoon1 changed the title chore(release): dev 시연 기준을 main에 보존 chore(release): dev → main 승격 차단 사유 추적 Jul 20, 2026
@HyungminYoon1
HyungminYoon1 marked this pull request as draft July 20, 2026 13:03

Copy link
Copy Markdown
Contributor Author

PR 목적을 즉시 승격에서 dev → main 승격 차단 사유 추적으로 변경했습니다.

  • PR은 닫지 않고 Draft로 유지합니다.
  • 이동하는 dev head의 최신 CI 결과를 통합 게이트로 추적합니다.
  • 시연 가능 기준선은 2fb097482c5165ad9625262fc631af6a0f047a6d에 고정했습니다.
  • 보존 브랜치: release/demo-baseline-2026-07-20
  • 보존 태그: demo-baseline-2026-07-20
  • 두 ref 모두 삭제 및 non-fast-forward 갱신 방지 ruleset을 적용했습니다.
  • 현재 차단 사유와 담당 이슈는 PR 본문 체크리스트에 정리했습니다.

필수 검사 통과 전 강제 병합하지 않고, dev head가 바뀔 때마다 최신 검사 결과로 본문을 갱신합니다.

HyungminYoon1 and others added 25 commits July 21, 2026 20:54
feat(security): Provider 실행 capability 경계 도입
HyungminYoon1 and others added 30 commits July 29, 2026 08:23
refactor(memory): 공개 챗봇 대화 기록을 클라이언트 전달 방식으로 전환
feat: 쿠키 인증 API CSRF 경계 도입
perf(rag): 사전 계산 query embedding 기반 KB fan-out 병렬화
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.

4 participants