From d8fa80e7bcaddf8ece4c4c527256dfe6981a2bbe Mon Sep 17 00:00:00 2001 From: toki Date: Mon, 6 Jul 2026 15:45:56 +0900 Subject: [PATCH] chore: clean up review files and update log_safety_test --- .../code_review_local_G04_0.log} | 28 ++++++++++---- .../01_openai_log_preview_guard/complete.log | 37 +++++++++++++++++++ .../plan_local_G04_0.log} | 0 apps/edge/internal/openai/log_safety_test.go | 23 ++++++------ 4 files changed, 68 insertions(+), 20 deletions(-) rename agent-task/{review_followup_alignment/01_openai_log_preview_guard/CODE_REVIEW-local-G04.md => archive/2026/07/review_followup_alignment/01_openai_log_preview_guard/code_review_local_G04_0.log} (67%) create mode 100644 agent-task/archive/2026/07/review_followup_alignment/01_openai_log_preview_guard/complete.log rename agent-task/{review_followup_alignment/01_openai_log_preview_guard/PLAN-local-G04.md => archive/2026/07/review_followup_alignment/01_openai_log_preview_guard/plan_local_G04_0.log} (100%) diff --git a/agent-task/review_followup_alignment/01_openai_log_preview_guard/CODE_REVIEW-local-G04.md b/agent-task/archive/2026/07/review_followup_alignment/01_openai_log_preview_guard/code_review_local_G04_0.log similarity index 67% rename from agent-task/review_followup_alignment/01_openai_log_preview_guard/CODE_REVIEW-local-G04.md rename to agent-task/archive/2026/07/review_followup_alignment/01_openai_log_preview_guard/code_review_local_G04_0.log index 0126404..14379ca 100644 --- a/agent-task/review_followup_alignment/01_openai_log_preview_guard/CODE_REVIEW-local-G04.md +++ b/agent-task/archive/2026/07/review_followup_alignment/01_openai_log_preview_guard/code_review_local_G04_0.log @@ -18,13 +18,13 @@ date=2026-07-06 > **[REVIEW AGENT ONLY]** 이 체크리스트는 코드리뷰 에이전트만 사용한다. > 구현 에이전트는 이 섹션을 수정하거나 체크하지 않는다. -- [ ] `코드리뷰 결과`에 `PASS`, `WARN`, `FAIL` 중 하나의 판정을 append한다. -- [ ] 판정과 Required/Suggested/Nit 분류가 서로 일치한다. -- [ ] active `CODE_REVIEW-*-G??.md`를 archive 로그로 이동한다. -- [ ] active `PLAN-*-G??.md`를 archive 로그로 이동한다. -- [ ] `.gitignore`의 Agent-Ops 관리 block을 확인한다. -- [ ] PASS이면 `complete.log`를 작성하고 active `.md` 파일을 남기지 않는다. -- [ ] PASS split 작업이면 이동 후 빈 active parent 정리 여부를 확인한다. +- [x] `코드리뷰 결과`에 `PASS`, `WARN`, `FAIL` 중 하나의 판정을 append한다. +- [x] 판정과 Required/Suggested/Nit 분류가 서로 일치한다. +- [x] active `CODE_REVIEW-*-G??.md`를 archive 로그로 이동한다. +- [x] active `PLAN-*-G??.md`를 archive 로그로 이동한다. +- [x] `.gitignore`의 Agent-Ops 관리 block을 확인한다. +- [x] PASS이면 `complete.log`를 작성하고 active `.md` 파일을 남기지 않는다. +- [x] PASS split 작업이면 이동 후 빈 active parent 정리 여부를 확인한다. active parent에는 sibling 작업이 남아 있어 유지했다. ## 계획 대비 변경 사항 - 계획에 `log_safety_test.go` 또는 `기존 OpenAI 테스트 파일`에 회귀 테스트 추가가 명시되어 있어 새 파일 `apps/edge/internal/openai/log_safety_test.go`로 작성했다. @@ -79,4 +79,16 @@ $ rg --sort path -n 'zap\.(String|Any)\("(prompt|content|reasoning|source|delta) Go 테스트 11개(기존 9개 + 새로 추가한 2개)가 모두 PASS했고, `rg` grep은 런타임 로그에 남은 preview zap field를 전혀 출력하지 않는다. 예상 결과와 일치. ## 코드리뷰 결과 -_리뷰 에이전트가 append한다._ \ No newline at end of file +### 2026-07-06 리뷰 판정 + +- 종합 판정: PASS +- 차원별 평가: + - correctness: Pass — OpenAI-compatible input/output/stream 로그에서 prompt/content/reasoning/source/delta preview 필드가 제거됐고, 내용 대신 길이/count 중심 메타데이터가 남아 있다. + - completeness: Pass — 계획 범위의 `chat_handler.go`, `responses_handler.go`, `stream.go`, `types.go`, 회귀 테스트 추가가 모두 반영됐다. + - test coverage: Pass — 패키지 테스트와 zap preview field 정적 검색이 통과했다. + - API contract: Pass — HTTP 응답, service submit payload, stream SSE 출력 계약 변경은 없다. + - code quality: Pass — 사용되지 않는 `previewString` 제거와 로그 helper 필드 정리가 일관적이다. 리뷰 중 `log_safety_test.go`의 주석/EOF newline만 비동작 보정했다. + - implementation deviation: Pass — 새 테스트 파일 사용과 `previewString` 완전 제거는 계획의 허용 범위 안이다. + - verification trust: Pass — 리뷰어가 `go test -count=1 ./apps/edge/internal/openai` 및 preview field `rg` 검증을 재실행했다. +- 발견된 문제: 없음 +- 다음 단계: PASS로 active plan/review를 로그화하고 `complete.log` 작성 후 task directory를 archive로 이동한다. diff --git a/agent-task/archive/2026/07/review_followup_alignment/01_openai_log_preview_guard/complete.log b/agent-task/archive/2026/07/review_followup_alignment/01_openai_log_preview_guard/complete.log new file mode 100644 index 0000000..3aaed85 --- /dev/null +++ b/agent-task/archive/2026/07/review_followup_alignment/01_openai_log_preview_guard/complete.log @@ -0,0 +1,37 @@ +# Complete - review_followup_alignment/01_openai_log_preview_guard + +## 완료 일시 + +2026-07-06 + +## 요약 + +OpenAI-compatible 로그 preview 제거 후속 작업을 1회 루프로 검토했고 최종 판정은 PASS다. + +## 루프 이력 + +| Plan | Review | Verdict | 메모 | +|------|--------|---------|------| +| `plan_local_G04_0.log` | `code_review_local_G04_0.log` | PASS | prompt/content/reasoning/source/delta preview 필드 제거, 길이/count 메타데이터 유지, 회귀 검증 통과 | + +## 구현/정리 내용 + +- `apps/edge/internal/openai/chat_handler.go`, `responses_handler.go`, `stream.go`의 OpenAI-compatible input/output/stream 로그에서 `*_preview` zap 필드를 제거했다. +- `prompt_len`, `content_len`, `reasoning_len`, `delta_len`, `source_len`, count/finish metadata 등 비내용 관측 필드는 유지했다. +- 사용처가 사라진 `previewString` helper를 제거했다. +- `apps/edge/internal/openai/log_safety_test.go`에 preview field 부재와 운영 메타데이터 유지 회귀 테스트를 추가했다. +- 리뷰 중 `apps/edge/internal/openai/log_safety_test.go`의 비동작 주석/EOF newline 정리를 반영했다. + +## 최종 검증 + +- `go test -count=1 ./apps/edge/internal/openai` - PASS; `ok iop/apps/edge/internal/openai 1.609s` +- `rg --sort path -n 'zap\.(String|Any)\("(prompt|content|reasoning|source|delta)_preview"' apps/edge/internal/openai` - PASS; 출력 없음 +- `rg --sort path -n 'previewString|_preview|prompt_preview|content_preview|reasoning_preview|source_preview|delta_preview' apps/edge/internal/openai -g '!log_safety_test.go'` - PASS; 출력 없음 + +## 잔여 Nit + +- 없음 + +## 후속 작업 + +- 없음 diff --git a/agent-task/review_followup_alignment/01_openai_log_preview_guard/PLAN-local-G04.md b/agent-task/archive/2026/07/review_followup_alignment/01_openai_log_preview_guard/plan_local_G04_0.log similarity index 100% rename from agent-task/review_followup_alignment/01_openai_log_preview_guard/PLAN-local-G04.md rename to agent-task/archive/2026/07/review_followup_alignment/01_openai_log_preview_guard/plan_local_G04_0.log diff --git a/apps/edge/internal/openai/log_safety_test.go b/apps/edge/internal/openai/log_safety_test.go index 88f7b91..8df9b68 100644 --- a/apps/edge/internal/openai/log_safety_test.go +++ b/apps/edge/internal/openai/log_safety_test.go @@ -167,14 +167,14 @@ func TestLogRetainsNonContentMetadata(t *testing.T) { // Each log line type should carry at least some non-content metadata. wantAnyFields := []string{ - "message_count", // chat input - "prompt_len", // chat input / responses input - "content_len", // chat output / stream closed - "reasoning_len", // chat output / stream closed - "finish_reason", // chat output + "message_count", // chat input + "prompt_len", // chat input / responses input + "content_len", // chat output / stream closed + "reasoning_len", // chat output / stream closed + "finish_reason", // chat output "tool_call_count", // chat output - "delta_len", // stream output chunk - "source_len", // stream suppressed + "delta_len", // stream output chunk + "source_len", // stream suppressed } // Check that each log line carried at least one operational (non-preview) @@ -253,10 +253,9 @@ func TestNoPreviewFieldsOnSensitiveValues(t *testing.T) { } } -// Ensure the test package compiles and the _preview zap field type -// would cause a compile error if someone adds zap.String("..._preview", ...) -// in the production code (the previewString function was removed from -// types.go because no production code calls it). +// Ensure the test package compiles after removing previewString. The rg-based +// verification command remains the authoritative guard against new _preview +// zap fields in production code. func TestCompileTimeNoPreviewFields(t *testing.T) { // This test intentionally empty — the rg-based check in the final // verification command is the authoritative regression gate. @@ -281,4 +280,4 @@ func TestLogOpenAICompatStreamOutputNoDeltaPreview(t *testing.T) { t.Errorf("logOpenAICompatStreamOutput unexpectedly emitted delta_preview") } } -} \ No newline at end of file +}