Skip to content

docs: 릴리즈 메타데이터 후속 정리#19

Merged
swift-man merged 3 commits into
mainfrom
codex/release-metadata-follow-up
Jul 7, 2026
Merged

docs: 릴리즈 메타데이터 후속 정리#19
swift-man merged 3 commits into
mainfrom
codex/release-metadata-follow-up

Conversation

@swift-man

Copy link
Copy Markdown
Owner

Summary

  • VERSION.txt를 추가해 현재 릴리즈 버전 0.9.1을 파일로 추적하도록 했습니다.
  • CHANGELOG.md를 생성해 0.9.0, 0.9.1 릴리즈 변경 사항을 정리했습니다.
  • GeneratingDocumentationSiteVERSION.txt를 DocC bundle version 기본값으로 읽도록 개선했습니다.
  • swift package dump-symbol-graph 단계에 timeout을 추가해 DocC 생성이 무한정 멈추지 않도록 했습니다.
  • timeout 이후 오래된 .build/.../symbolgraph 산출물이 재사용되는 일을 막기 위해, symbol graph 생성 전에 기존 LaunchingView symbol graph를 삭제하도록 했습니다.
  • .reviewbot.ymlCHANGELOG.mdVERSION.txt를 포함해 릴리즈 메타데이터도 리뷰 대상에서 빠지지 않도록 했습니다.

Review Notes

  • README는 기존 요청대로 리뷰봇 대상에 남겨두고, generated DocC output인 docs/**, *.doccarchive/**는 계속 제외했습니다.
  • 이번 후속에서 의미 있는 수정 포인트는 DocC 생성 안정화입니다. 기존 스크립트는 symbol graph 생성이 멈추면 릴리즈 검증이 대기할 수 있었고, 실패 후에도 이전 symbol graph가 남아 있으면 오래된 문서 산출물을 사용할 여지가 있었습니다.
  • 이번 변경은 해당 위험을 timeout과 stale symbol graph 제거로 정리합니다.

Test Plan

  • swift test 통과: Swift Testing 12개 테스트 성공
  • ./GeneratingDocumentationSite 통과: swift build, symbol graph 생성, DocC 변환, 정적 docs/ 생성 완료
  • ruby -e 'require "yaml"; YAML.load_file(".reviewbot.yml")' 통과
  • git diff --check 통과

VERSION.txt를 추가해 현재 릴리즈 버전을 파일로 추적하도록 했습니다.

CHANGELOG.md를 생성해 0.9.0과 0.9.1 릴리즈 변경 사항을 정리했습니다.

GeneratingDocumentationSite가 VERSION.txt를 DocC bundle version의 기본값으로 읽도록 하고, symbol graph 생성 단계에 timeout과 기존 symbol graph 정리를 추가해 오래된 산출물을 사용하지 않도록 보강했습니다.

.reviewbot.yml에 CHANGELOG.md와 VERSION.txt를 포함해 릴리즈 메타데이터도 코드리뷰 대상에서 빠지지 않도록 했습니다.

@codex-review-bot codex-review-bot 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.

릴리즈 메타데이터 추가와 DocC 생성 스크립트 안정화 방향은 타당합니다. VERSION.txt를 기본 bundle version 소스로 두고, symbol graph 재사용을 막기 위해 기존 산출물을 지우는 흐름도 변경 의도와 맞습니다. 다만 timeout 발생 시 swift package dump-symbol-graph가 생성한 하위 프로세스까지 정리되지 않을 수 있어 CI/로컬에서 작업이 계속 남는 문제가 생길 수 있습니다.

좋은 점

  • 릴리즈 버전을 VERSION.txt로 분리해 README/DocC 스크립트와 릴리즈 메타데이터의 기준점을 명확히 한 점
  • DocC 생성 전에 기존 symbol graph와 출력물을 제거해 오래된 산출물이 섞일 가능성을 줄인 점
  • .reviewbot.yml에 릴리즈 메타데이터와 문서 생성 스크립트를 포함해 후속 변경도 리뷰 대상에 들어오게 한 점

🔴 반드시 수정할 사항

  • GeneratingDocumentationSite의 timeout 처리에서 부모 프로세스만 종료하고 하위 프로세스 그룹은 정리하지 않아, timeout 이후에도 Swift 빌드/컴파일 하위 프로세스가 계속 실행될 수 있습니다.

💡 권장 개선 사항

  • DUMP_SYMBOL_GRAPH_TIMEOUT_SECONDS가 숫자가 아닐 때 현재는 test 비교식에서 셸 오류로 종료될 수 있으므로, 사용자에게 명확한 오류 메시지를 주는 검증을 추가하면 운영성이 좋아집니다.

기술 단위 코멘트 1건은 각 라인에 별도 표시됩니다.


리뷰 모델: gpt-5.5

Comment thread GeneratingDocumentationSite Outdated
while kill -0 "$command_pid" 2>/dev/null; do
if [ "$elapsed_seconds" -ge "$timeout_seconds" ]; then
echo "error: command timed out after ${timeout_seconds}s: $*" >&2
kill "$command_pid" 2>/dev/null || true

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[Major] 문제 → timeout 시 kill "$command_pid"는 백그라운드로 띄운 직접 자식 프로세스만 종료합니다. swift package dump-symbol-graph가 내부에서 띄운 빌드/컴파일 하위 프로세스가 남으면, 스크립트는 124로 반환해도 CI runner나 로컬 머신에서 작업이 계속 돌며 다음 빌드와 리소스를 경합할 수 있습니다. 제안 → 명령을 별도 프로세스 그룹으로 실행하고 timeout 시 프로세스 그룹 전체를 종료하거나, macOS CI에서 사용 가능한 timeout/gtimeout 도입 여부를 확인해 하위 프로세스까지 정리되도록 처리하는 편이 안전합니다.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

수정 완료했습니다. 40fc95c에서 timeout 시 직접 자식 프로세스만 종료하던 흐름을 보강해, background job을 별도 process group으로 실행하고 timeout 발생 시 TERMKILL 순서로 process group 종료를 시도하도록 변경했습니다. 같은 커밋에서 timeout 값 숫자 검증도 추가했습니다.

@claudecode-pr-review-bot

Copy link
Copy Markdown

⚠️ Claude Review — 리뷰 엔진 실패

이 PR 은 자동 리뷰를 완료하지 못했습니다 (full 모드 실패 → diff-only 모드 재시도까지 실패).

  • 마지막 시도 모드: diff
  • 컨텍스트 파일 수: 4
    모델 한도 해제 정보
  • Claude Opus 4.6 (Thinking) #1: 2h2m21s
  • Claude Opus 4.6 (Thinking) #2: 96h59m15s
  • Claude Opus 4.6 (Thinking) #3: 129h33m14s

조치 제안

  1. CLAUDE_MAX_INPUT_TOKENS 를 모델 실제 윈도우보다 작게 조정 (예: 150000) → 큰 PR 은 자동 diff 모드로 떨어집니다.
  2. 더 큰 컨텍스트 윈도우의 모델로 CLAUDE_MODEL 변경.
  3. 서버 로그(stderr 전체) 를 확인해 모델/CLI 측 메시지 검증.

@gemini-pr-review-bot gemini-pr-review-bot 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.

이번 PR은 릴리즈 관련 메타데이터 파일들을 추가하고 문서 사이트 생성 스크립트인 GeneratingDocumentationSite의 안정성을 높이기 위한 변경 사항을 포함하고 있습니다. 특히 symbol graph 생성 단계의 무한 대기를 방지하기 위해 timeout 처리를 추가한 점이 긍정적입니다. 다만 스크립트 실행 디렉토리 검증 및 경로 변수 치환 시 구분자 중복 방지 처리를 보완할 필요가 있습니다.

좋은 점

  • GeneratingDocumentationSite 스크립트에서 swift package dump-symbol-graph 명령 실행 시 발생할 수 있는 무한 대기 현상을 직접 구현한 timeout 로직으로 제어한 점이 훌륭합니다.
  • .reviewbot.yml 설정 파일에 누락되었던 CHANGELOG.md와 VERSION.txt 등의 메타데이터 파일을 추가하여 변경 사항이 꼼꼼하게 검증되도록 구성한 점이 좋습니다.

개선할 점

  • GeneratingDocumentationSite 스크립트는 프로젝트 루트 디렉토리에 존재하는 .build나 docs 폴더의 생성 및 삭제 동작을 수행하므로, 실행 시점에 Package.swift 파일의 존재 여부를 검증하는 안전장치를 추가하면 엉뚱한 경로에서 스크립트가 오작동하는 위험을 예방할 수 있습니다.

기술 단위 코멘트 1건은 각 라인에 별도 표시됩니다.

(주: 다음 2개 코멘트는 PR diff 범위 밖이라 본문에 모았습니다.)

드롭된 라인 지적

  • GeneratingDocumentationSite:87 — [Major] HOSTING_BASE_PATH 환경변수가 단일 슬래시(/)로 설정되어 오는 경우, 하단의 perl 정규식 치환에 의해 //favicon.ico 또는 //js/ 와 같이 이중 슬래시로 변경되어 프로토콜 상대 경로로 잘못 해석되는 문제가 생길 수 있습니다. 기본 경로가 단일 슬래시일 때를 대비한 예외 처리나 경로 결합 시의 구분자 중복 방지 처리를 추가해 주시기 바랍니다.
  • GeneratingDocumentationSite:99 — [Minor] perl 실행 시 사용된 -0 옵션은 파일 전체를 단일 레코드로 메모리에 한 번에 로드하므로, 파일 크기가 매우 클 경우 불필요한 시스템 리소스 낭비를 유발할 수 있습니다. 단순 행 끝 공백 제거는 파일 전체를 버퍼링하지 않는 행 단위 처리 방식으로도 충분히 구현 가능하므로 리팩터링을 고려해 보시기 바랍니다.

리뷰 생성 모델: Gemini 3.5 Flash (High) #1

return 124
fi

sleep 1

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[Minor] sleep 1 명령을 반복 호출하는 루프 기반의 시간 측정 방식은 프로세스 스케줄링 오버헤드로 인해 실제 설정된 timeout 시간보다 다소 늦게 감지가 이루어질 수 있습니다. 엄밀한 정밀도가 요구되는 작업은 아니나, 실제 대기 시간과 약간의 오차가 발생할 수 있음을 인지할 필요가 있습니다.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

검토했습니다. 지적 자체는 맞지만 이 스크립트의 timeout은 strict real-time 보장이 아니라 무한 대기 방지 목적이라 sleep 1 루프의 소폭 지연은 수용 가능한 수준으로 판단했습니다. 대신 timeout 값 검증과 process group 종료를 추가해 실제 운영 리스크가 있는 부분을 수정했습니다.

@mlx-review-bot mlx-review-bot 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.

MLX 리뷰

이 PR은 LaunchingView의 릴리즈 변경 사항을 기록하는 CHANGELOG.md 파일을 추가하고, 버전 정보를 VERSION.txt로 분리하여 배포 스크립트에서 동적으로 로드하도록 수정했습니다. 또한 DocC 문서 생성 스크립트에 타임아웃 처리 기능을 추가하여 빌드 과정에서 무한 대기 문제를 방지했습니다.

라인 단위 코멘트

  • 라인 단위로 남길 개선 사항은 발견되지 않았습니다.

사용된 모델: mlx-community/Qwen3-30B-A3B-Instruct-2507-8bit

reviewbot이 지적한 timeout 시 하위 프로세스 잔존 가능성을 줄이기 위해 background job을 별도 process group으로 실행하고, timeout 발생 시 TERM 후 KILL 순서로 group 종료를 시도하도록 보강했습니다.

DUMP_SYMBOL_GRAPH_TIMEOUT_SECONDS가 숫자가 아닐 때 명확한 오류를 출력하도록 검증을 추가했습니다.

Package.swift와 DocC catalog 존재 여부를 확인해 스크립트가 패키지 루트가 아닌 경로에서 출력물을 삭제하거나 생성하지 않도록 방지했습니다.

HOSTING_BASE_PATH=/ 입력 시 정적 리소스 경로가 //로 변하지 않도록 정규화하고, JS trailing whitespace 정리는 행 단위 perl 처리로 변경했습니다.

@codex-review-bot codex-review-bot 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.

릴리즈 메타데이터 추가와 DocC 생성 스크립트 보강 방향은 전반적으로 적절합니다. 이전 라운드에서 지적된 하위 프로세스 종료 문제와 timeout 값 검증, 실행 위치 검증은 이번 변경에서 상당 부분 반영되었습니다. 다만 timeout이 발생해도 현재 스크립트가 경고만 출력하고 이후 DocC 변환을 계속 진행할 수 있어, 릴리즈 문서 생성 안정화라는 변경 목적과 맞지 않는 위험이 남아 있습니다.

좋은 점

  • VERSION.txt를 DocC bundle version 기본값으로 연결해 릴리즈 버전 기준을 파일로 분리한 점
  • DocC 생성 전 기존 symbol graph와 출력물을 삭제해 오래된 산출물 재사용 가능성을 줄인 점
  • timeout 값과 Package.swift 존재 여부를 초기에 검증해 스크립트 실패 원인을 더 명확히 한 점
  • timeout 종료 시 프로세스 그룹을 대상으로 TERM/KILL을 시도하도록 이전 리뷰의 핵심 위험을 반영한 점

🔴 반드시 수정할 사항

  • GeneratingDocumentationSite에서 symbol graph 생성 timeout 발생 시에도 경고만 남기고 계속 진행할 수 있습니다. timeout은 정상적인 부분 실패가 아니라 산출물 완전성을 보장할 수 없는 상태이므로, 124 반환은 즉시 실패 처리해야 합니다.

💡 권장 개선 사항

  • dump-symbol-graph의 일반적인 non-zero 종료를 계속 허용해야 한다면, timeout과 그 외 실패를 분리해 timeout만 fatal로 처리하는 테스트 또는 스크립트 검증을 추가하는 편이 좋습니다.

기술 단위 코멘트 1건은 각 라인에 별도 표시됩니다.


리뷰 모델: gpt-5.5

Comment thread GeneratingDocumentationSite Outdated
find "$PACKAGE_BUILD_PATH" -path "*/symbolgraph/$TARGET_NAME*.symbols.json" \
-exec rm -f {} \;

if ! run_with_timeout "$DUMP_SYMBOL_GRAPH_TIMEOUT_SECONDS" \

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[Major] 문제 → run_with_timeout이 timeout 시 124를 반환해도 이 분기는 모든 non-zero 종료를 동일하게 경고로만 처리하고 계속 진행합니다. 영향 → timeout으로 dump-symbol-graph가 중단된 경우 일부 symbol graph만 남아도 이후 find 검사를 통과해 불완전한 DocC 산출물을 만들거나 배포할 수 있습니다. 제안 → run_with_timeout의 종료 코드를 변수에 담아 124이면 즉시 exit 124로 실패시키고, 정말 허용해야 하는 일반 non-zero 종료만 기존처럼 경고 후 symbol graph 존재 여부를 확인하도록 분리해 주세요.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

수정 완료했습니다. c5b3211에서 run_with_timeout의 종료 코드를 분리해 124 timeout이면 즉시 exit 124로 실패하도록 변경했습니다. 이제 timeout 상태에서는 일부 symbol graph가 남아도 DocC 변환 단계로 진행하지 않습니다.

@gemini-pr-review-bot gemini-pr-review-bot 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.

이번 PR은 릴리즈 버전 관리 및 문서 생성을 위한 메타데이터 파일들을 추가하고, DocC 문서 사이트 생성 스크립트(GeneratingDocumentationSite)의 프로세스 그룹 기반 타임아웃 처리와 이중 슬래시 경로 문제를 성공적으로 개선했습니다. 이전 리뷰 피드백이 완성도 높게 반영되어 스크립트 오작동 가능성을 차단하고 안정성을 확보했습니다.

좋은 점

  • GeneratingDocumentationSite 스크립트에서 set -m을 활성화하여 백그라운드 프로세스를 독립된 프로세스 그룹으로 실행하고, 타임아웃 발생 시 자식 프로세스뿐만 아니라 프로세스 그룹 전체를 종료하도록 구현하여 좀비 빌드 프로세스의 누수를 방지한 점
  • 이전 리뷰 피드백을 반영하여 HOSTING_BASE_PATH가 슬래시(/)인 경우 STATIC_HOSTING_BASE_PATH를 빈 문자열로 처리해 경로 변환 시 이중 슬래시가 발생하는 예외 상황을 안전하게 차단한 점
  • 여러 .js 파일에 대해 행 끝 공백 제거 작업을 처리할 때 무거운 -0 옵션을 제거하여 불필요한 전체 버퍼링 없이 행 단위로 메모리를 효율적으로 사용하도록 리팩터링한 점

리뷰 생성 모델: Gemini 3.5 Flash (High) #2

@mlx-review-bot mlx-review-bot 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.

MLX 리뷰

이 PR은 LaunchingView 라이브러리의 버전 관리 및 문서 생성 스크립트를 개선하며, 최소 지원 플랫폼을 상향하고 Store 관찰 방식을 현대화했습니다. 변경 사항은 CHANGELOG.md에 명확히 기록되었고, 문서 생성 스크립트는 버전 파일 기반 동작과 타임아웃 처리를 강화했습니다.

반드시 수정할 사항

  • terminate_command TERM 이후 sleep 2terminate_command KILL를 호출하지만, 이는 run_with_timeout 내부에서 kill -TERM을 실행한 후 바로 kill -KILL를 시도하는 방식과 동일합니다. 그러나 run_with_timeoutcommand_pid를 직접 종료하는 것이 아니라, kill -TERM을 실행한 후 wait를 통해 종료를 기다리며, sleep 2kill -KILL를 실행합니다. 이는 kill -KILLcommand_pid의 자식 프로세스를 포함하지 않으며, swift package dump-symbol-graph가 내부적으로 띄운 하위 프로세스가 남아 있을 수 있음을 의미합니다.

권장 개선사항

  • while kill -0 "$command_pid" 2>/dev/null; do 루프 내에서 sleep 1을 반복 호출하는 방식은 프로세스 스케줄링 오버헤드로 인해 실제 설정된 타임아웃 시간보다 다소 늦게 종료가 감지될 수 있습니다.

개선된 점

  • VERSION.txt 파일 추가로 버전 정보의 일관성과 자동화된 관리가 가능해졌습니다.
  • GeneratingDocumentationSite 스크립트에 타임아웃 처리 로직이 추가되어, 장시간 실행되는 명령어에 대한 안정성이 향상되었습니다.

라인 단위 코멘트

  • 자동 리뷰에서 2개의 라인 단위 개선 사항을 남겼습니다.

사용된 모델: mlx-community/Qwen3-30B-A3B-Instruct-2507-8bit

while kill -0 "$command_pid" 2>/dev/null; do
if [ "$elapsed_seconds" -ge "$timeout_seconds" ]; then
echo "error: command timed out after ${timeout_seconds}s: $*" >&2
terminate_command TERM "$command_pid"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[Major] Problem: terminate_command TERM 이후 sleep 2terminate_command KILL를 호출하지만, 이는 run_with_timeout 내부에서 kill -TERM을 실행한 후 바로 kill -KILL를 시도하는 방식과 동일합니다. 그러나 run_with_timeoutcommand_pid를 직접 종료하는 것이 아니라, kill -TERM을 실행한 후 wait를 통해 종료를 기다리며, sleep 2kill -KILL를 실행합니다. 이는 kill -KILLcommand_pid의 자식 프로세스를 포함하지 않으며, swift package dump-symbol-graph가 내부적으로 띄운 하위 프로세스가 남아 있을 수 있음을 의미합니다. Why it matters: 하위 프로세스가 남아 있으면 CI 환경이나 로컬 머신에서 리소스 경합, 메모리 누수, 빌드 실패 등의 문제가 발생할 수 있으며, 이는 지속적인 빌드 실패나 시스템 불안정을 초래할 수 있습니다. Suggested fix: run_with_timeout 내부에서 command_pid를 포함한 프로세스 그룹 전체를 종료하도록 kill -TERMkill -KILL-$command_pgid로 실행해야 하며, set -m이 활성화된 상태에서 command_pgid를 정확히 추출하는 것이 중요합니다. 현재 terminate_commandcommand_pgidps -o pgid= -p로 추출하고 있으나, set -m이 활성화된 상태에서 command_pid의 프로세스 그룹 ID를 정확히 얻을 수 있도록 보장해야 합니다. Confidence: High

Confidence score: 0.95

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

검토 후 추가 수정했습니다. c5b3211에서 job control 기반 실행을 제거하고, perl -MPOSIX=setsid로 감시 대상 명령을 별도 session/process group에서 실행하도록 변경했습니다. terminate_commandps -o pgid= -p "$command_pid"로 얻은 PGID에 대해 TERM/KILL을 보내므로 하위 프로세스 정리 대상이 명확해졌습니다. DUMP_SYMBOL_GRAPH_TIMEOUT_SECONDS=1로 timeout 124 반환 및 관련 SwiftPM 프로세스 미잔존도 확인했습니다.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

이 지적은 현재 코드에는 맞지 않는 것으로 보입니다. start_commandsetsid() 후 명령을 실행하고, terminate_commandps -o pgid=로 얻은 프로세스 그룹에 kill -TERM "-$command_pgid"kill -KILL "-$command_pgid"를 보내므로 직접 자식만 종료한다는 전제는 현재 구현과 다릅니다.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

이 지적은 terminate_command의 동작 흐름을 오해한 것으로 보입니다. 현재 스크립트는 start_command 실행 시 setsid()를 사용해 독립된 세션을 구성하며, ps 명령으로 추출한 command_pgid를 이용해 그룹 전체(-$command_pgid)에 TERM 및 KILL 시그널을 정상 전달하고 있습니다. 따라서 자식/하위 프로세스가 유실되지 않고 안전하게 종료되므로 추가 조치 없이 유지해도 괜찮습니다.

return 124
fi

sleep 1

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[Minor] Problem: while kill -0 "$command_pid" 2>/dev/null; do 루프 내에서 sleep 1을 반복 호출하는 방식은 프로세스 스케줄링 오버헤드로 인해 실제 설정된 타임아웃 시간보다 다소 늦게 종료가 감지될 수 있습니다. Why it matters: 이는 타임아웃 정밀도에 약간의 오차를 초래하며, 특히 빌드 시간이 중요한 CI 환경에서 지연된 종료가 누적될 수 있습니다. Suggested fix: timeout 명령어를 사용하거나, sleep 대신 usleep 또는 nanosleep을 사용해 더 정밀한 지연을 구현하는 것이 가능합니다. 그러나 현재 스크립트는 macOS 기반 환경에서 timeout 명령어를 사용할 수 없으므로, usleep를 사용하는 것이 현실적인 대안입니다. Confidence: Medium

Confidence score: 0.85

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

검토했습니다. timeout 정밀도 지적은 사실이지만 이 스크립트의 목적은 초 단위 hard real-time 제어가 아니라 DocC 생성이 무한 대기하지 않도록 막는 것입니다. macOS 기본 환경에 없는 timeout/gtimeout 의존성을 추가하지 않는 쪽이 더 낫다고 판단해 유지했습니다.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

동의합니다. 작성자분께서 남겨주신 것처럼 해당 타임아웃 처리는 실시간 수준의 정밀한 스케줄링을 위함이 아니라 무한 루프나 블로킹 현상을 방지하는 목적이 크기 때문에, 단순한 sleep 1 루프 오버헤드는 배포 워크플로 및 시스템 리소스 상 수용 가능한 수준입니다.

@swift-man

Copy link
Copy Markdown
Owner Author

코드리뷰 검토 결과입니다.

  • GeneratingDocumentationSite timeout 시 하위 프로세스가 남을 수 있다는 지적: 실제 수정 필요로 판단했고 40fc95c에서 process group 단위 TERM/KILL 정리로 수정했습니다.
  • DUMP_SYMBOL_GRAPH_TIMEOUT_SECONDS 숫자 검증 지적: 실제 개선 사항으로 판단했고 40fc95c에서 명확한 오류 메시지를 추가했습니다.
  • 프로젝트 루트가 아닌 경로에서 스크립트가 실행될 수 있다는 지적: 실제 개선 사항으로 판단했고 Package.swift 및 DocC catalog 존재 검증을 추가했습니다.
  • HOSTING_BASE_PATH=/ 입력 시 정적 리소스 경로가 //로 바뀔 수 있다는 지적: 실제 edge case로 판단했고 root base path를 빈 문자열로 정규화하도록 수정했습니다.
  • JS trailing whitespace 제거의 perl -0 메모리 지적: 현재 DocC 산출물 규모에서는 과장된 리스크지만, 행 단위 처리로 간단히 대체 가능해 함께 수정했습니다.
  • sleep 1 루프의 timeout 정밀도 지적: 사실이지만 이 스크립트의 목적은 strict deadline이 아니라 무한 대기 방지라 낮은 영향으로 판단했습니다. 별도 코드 변경은 하지 않고 thread에 판단 근거를 남겼습니다.
  • Claude review engine 실패 댓글: 코드 결함이 아니라 리뷰 인프라/모델 한도 이슈입니다. 이 PR의 코드 수정 대상으로 보지 않았습니다.

수정 후 로컬에서 swift test, ./GeneratingDocumentationSite, git diff --check, .reviewbot.yml YAML 파싱을 다시 통과시켰습니다. 새 커밋 push로 CI가 다시 실행됩니다.

dump-symbol-graph timeout은 불완전한 symbol graph를 만들 수 있는 상태이므로 경고로 넘기지 않고 즉시 실패하도록 변경했습니다.

timeout 감시 대상 명령은 Perl setsid를 통해 별도 session/process group에서 실행해 하위 프로세스 종료 대상이 명확하도록 정리했습니다.

DUMP_SYMBOL_GRAPH_TIMEOUT_SECONDS=1 검증에서 exit 124 반환과 SwiftPM 관련 프로세스 미잔존을 확인했고, 정상 ./GeneratingDocumentationSite 실행도 통과했습니다.
@swift-man

Copy link
Copy Markdown
Owner Author

추가 코드리뷰 검토 결과입니다.

  • dump-symbol-graph timeout을 경고로 넘기면 불완전한 symbol graph로 DocC 변환이 진행될 수 있다는 지적은 실제 수정 필요로 판단했습니다. c5b3211에서 timeout exit code 124를 별도 처리해 즉시 실패하도록 변경했습니다.
  • process group 종료 보장은 기존 job control 방식보다 명확하게 하기 위해 perl -MPOSIX=setsid 기반 실행으로 바꿨습니다. 감시 대상 명령은 별도 session/process group에서 실행되고, timeout 시 해당 PGID에 TERM/KILL을 보냅니다.
  • DUMP_SYMBOL_GRAPH_TIMEOUT_SECONDS=1 ./GeneratingDocumentationSite로 timeout fatal 경로가 exit 124를 반환하는 것을 확인했고, 관련 SwiftPM/dump-symbol-graph 프로세스가 남지 않는 것도 확인했습니다.
  • 정상 경로는 다시 swift test, ./GeneratingDocumentationSite, git diff --check를 통과했습니다.

수정 커밋: c5b3211

@codex-review-bot codex-review-bot 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.

릴리즈 메타데이터 추가와 DocC 생성 스크립트 보강은 PR 설명의 목적과 잘 맞습니다. 이전 라운드에서 지적된 timeout 후 계속 진행 문제도 124를 즉시 실패 처리하도록 반영되어, stale symbol graph 재사용 위험은 낮아졌습니다. 현재 변경 범위에서 머지를 막을 만한 버그나 데이터 손실 위험은 확인하지 못했습니다.

좋은 점

  • VERSION.txt를 DocC bundle version 기본값으로 사용해 릴리즈 버전 기준을 파일로 분리한 점
  • DocC 생성 전에 기존 symbol graph, docs 출력물, doccarchive를 정리해 오래된 산출물이 섞일 가능성을 줄인 점
  • dump-symbol-graph timeout을 124로 분리해 timeout 발생 시 문서 생성을 중단하도록 만든 점

💡 권장 개선 사항

  • 스크립트 timeout 로직은 로컬 셸 함수라 Swift 테스트로 직접 검증하기 어렵지만, 후속으로 작은 셸 테스트나 CI dry-run 시나리오를 추가하면 회귀 방지에 도움이 됩니다.

리뷰 모델: gpt-5.5

@mlx-review-bot mlx-review-bot 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.

MLX 리뷰

이 PR은 LaunchingView의 릴리즈 변경 사항을 기록하는 CHANGELOG.md 파일을 추가하고, VERSION.txt를 생성하며, DocC 문서 생성 스크립트 GeneratingDocumentationSite의 버전 관리 및 타임아웃 처리를 개선했습니다. 특히, dump-symbol-graph 명령의 타임아웃 처리를 프로세스 그룹 단위로 강화하고, 입력 값 검증을 추가하여 빌드 환경의 안정성을 높였습니다.

라인 단위 코멘트

  • 라인 단위로 남길 개선 사항은 발견되지 않았습니다.

사용된 모델: mlx-community/Qwen3-30B-A3B-Instruct-2507-8bit

@gemini-pr-review-bot gemini-pr-review-bot 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.

이번 PR은 릴리즈 메타데이터를 추가하고 문서 생성 스크립트인 GeneratingDocumentationSite의 실행 안정성 및 프로세스 타임아웃 처리를 강화했습니다. 이전 리뷰 피드백을 적극적으로 반영하여 프로세스 그룹 단위의 종료 처리와 경로 정규화 예외 처리를 훌륭하게 완비하였습니다. 전반적인 코드 품질과 예외 처리가 매우 안정적입니다.

좋은 점

  • GeneratingDocumentationSite 스크립트에서 setsid와 ps 명령을 조합하여 백그라운드 프로세스 그룹 전체를 타임아웃 발생 시 안전하게 강제 종료(TERM/KILL)하도록 보강한 점
  • Launching 리듀서 내에서 Firebase Remote Config 조회 중 중복 요청 발생 시 hasPendingFetch 변수를 사용해 비동기 흐름의 레이스 컨디션을 정교하게 차단한 점

개선할 점

  • GeneratingDocumentationSite 스크립트 내에서 빌드 부산물인 JS 파일들의 공백을 perl 정규식으로 직접 가공하는 것보다, 소스 단계에서 Prettier 등의 린터/포매터를 적용해 포맷팅 일관성을 사전에 보장하는 설계가 중장기 빌드 스크립트 유지보수에 더 유리할 수 있습니다.

리뷰 생성 모델: Gemini 3.5 Flash (High) #2

@swift-man

Copy link
Copy Markdown
Owner Author

최신 리뷰까지 재검토했습니다.

  • codex-review-bot 최신 리뷰: APPROVED. timeout 124 fatal 처리 반영 확인됨.
  • mlx-review-bot 최신 리뷰: APPROVED. 라인 단위 추가 개선 사항 없음.
  • gemini-pr-review-bot 최신 리뷰: COMMENTED. Prettier 등 소스 단계 포매터 적용 제안은 DocC가 생성한 JS 산출물에 대한 장기 의견으로 보이며, 이 PR의 스크립트 안정화 범위에서는 실제 수정 필요 사항으로 보지 않았습니다. 현재는 생성된 JS의 trailing whitespace만 후처리하는 목적이므로 유지합니다.
  • 남은 timeout 정밀도 thread는 sleep 1 기반 감시가 strict real-time 목적이 아니므로 낮은 영향으로 판단했습니다. 무한 대기 방지, timeout fatal 처리, process group 종료는 반영되어 있습니다.

현재 기준으로 추가 수정이 필요한 리뷰 항목은 없다고 판단합니다.

@swift-man swift-man merged commit 998f0a8 into main Jul 7, 2026
1 check passed
@swift-man swift-man deleted the codex/release-metadata-follow-up branch July 7, 2026 05:11
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.

1 participant