pii-masker

요약. pii-masker: 자율 개선 회차 25회, 릴리즈 16건. 최근 릴리즈 v1.0.20 (자산 1개). 건강 A 14일: 릴리즈 16, 실패 0, 경고 0, 회귀 0

현황

저장소
https://github.com/hkjang/pii-masker
마지막 회차
2026-09-10 14:39 KST — 🚀 릴리즈 merged PR #17, released v1.0.20
최근 릴리즈
v1.0.20 — released · 자산 1개 (이전 v1.0.19: 1개) 전체 릴리즈 →

회차 이력

일시프로젝트결과
2026-09-10 14:39pii-masker배포 준비 완료 merged PR #17, released v1.0.20
2파일 +104/−1 · 테스트 1 — Report oversized upstream responses as their own error
2026-09-10 00:39pii-masker배포 준비 완료 merged PR #16, released v1.0.19
3파일 +95/−3 · 테스트 1 — Stop restarts from extending job file retention
2026-09-09 12:11pii-masker배포 준비 완료 merged PR #15, released v1.0.18
5파일 +435/−6 · 테스트 2 — Let running async jobs finish before shutting down
2026-09-09 10:48pii-masker배포 준비 완료 merged PR #14, released v1.0.17
3파일 +102/−5 · 테스트 1 — Keep document responses out of caches
2026-09-09 02:39pii-masker배포 준비 완료 merged PR #13, released v1.0.16
3파일 +237/−4 · 테스트 2 — Encode non-ASCII download file names per RFC 6266
2026-09-08 21:58pii-masker배포 준비 완료 merged PR #12, released v1.0.15
4파일 +120/−8 · 테스트 2 — Cap the number of jobs the history endpoint returns
2026-09-07 03:27pii-masker배포 준비 완료 merged PR #11, released v1.0.14
2파일 +147/−4 · 테스트 1 — Stream job results from disk instead of buffering them
2026-09-06 18:11pii-masker배포 준비 완료 merged PR #10, released v1.0.13
6파일 +390/−7 · 테스트 2 — Shut down gracefully and time out stalled connections
2026-09-05 16:57pii-masker병합 완료 resumed: merged PR #9
2026-09-05 16:47pii-masker배포 준비 완료 release-only, released v1.0.12
2026-09-05 16:24pii-masker검토 대기 CI no-ci, PR open PR #9
6파일 +393/−31 · 테스트 2 — Bound how many synchronous masks run at once
2026-09-05 06:02pii-masker배포 준비 완료 merged PR #8, released v1.0.11 +1 assets
2026-09-04 13:53pii-masker배포 준비 완료 merged PR #7, released v1.0.10 +1 assets
2026-09-04 11:05pii-masker변경 없음 assets-only v1.0.4, assets for v1.0.4 +1 assets
2026-09-04 11:03pii-masker변경 없음 assets-only v1.0.5, assets for v1.0.5 +1 assets
2026-09-04 11:02pii-masker변경 없음 assets-only v1.0.6, assets for v1.0.6 +1 assets
2026-09-04 11:00pii-masker변경 없음 assets-only v1.0.7, assets for v1.0.7 +1 assets
2026-09-04 10:58pii-masker변경 없음 assets-only v1.0.8, assets for v1.0.8 +1 assets
2026-09-04 06:58pii-masker변경 없음 assets-only, assets for v1.0.9 +1 assets
2026-09-04 00:11pii-masker배포 준비 완료 merged PR #6, released v1.0.9
2026-09-03 16:38pii-masker배포 준비 완료 merged PR #5, released v1.0.8
2026-09-03 09:46pii-masker배포 준비 완료 merged PR #4, released v1.0.7
2026-09-03 04:16pii-masker배포 준비 완료 merged PR #3, released v1.0.6
2026-09-02 21:55pii-masker배포 준비 완료 merged PR #2, released v1.0.5
2026-09-02 15:26pii-masker병합 완료 merged PR #1, release released

비용·사용량

최근 30세션
시각프로젝트단계시간비용토큰 입력/출력종료
14:39pii-masker릴리즈2분22$0.63507K / 6Ksuccess
14:36pii-maskerreview2분16$0.68489K / 8Ksuccess
14:34pii-masker개선4분31$1.561.3M / 15Ksuccess
00:39pii-masker릴리즈1분15$0.44237K / 5Ksuccess
00:37pii-maskerreview2분12$0.60283K / 8Ksuccess
00:35pii-masker개선4분29$1.781.4M / 16Ksuccess
12:11pii-masker릴리즈1분16$0.49316K / 5Ksuccess
12:09pii-maskerreview4분16$1.30668K / 18Ksuccess
12:04pii-masker개선13분60$4.344.3M / 40Ksuccess
10:48pii-masker릴리즈1분16$0.45261K / 5Ksuccess
10:46pii-maskerreview1분9$0.41253K / 4Ksuccess
02:38pii-masker릴리즈2분17$0.58376K / 6Ksuccess
02:36pii-maskerreview2분11$0.49212K / 7Ksuccess
02:34pii-masker개선4분24$1.481.0M / 16Ksuccess
21:58pii-masker릴리즈2분16$0.56407K / 5Ksuccess
21:55pii-maskerreview1분13$0.50273K / 5Ksuccess
21:54pii-masker개선3분27$1.651.4M / 13Ksuccess
03:27pii-masker릴리즈2분19$0.61421K / 5Ksuccess
03:25pii-maskerreview2분13$0.55272K / 7Ksuccess
03:23pii-masker개선3분21$1.18840K / 11Ksuccess
18:10pii-masker릴리즈2분17$0.55397K / 5Ksuccess
18:08pii-maskerreview2분12$0.66397K / 8Ksuccess
18:06pii-masker개선6분38$2.121.6M / 26Ksuccess
16:46pii-masker릴리즈1분19$0.59389K / 6Ksuccess
16:19pii-maskerreview4분15$0.81431K / 10Ksuccess
16:16pii-masker개선10분58$4.254.6M / 37Ksuccess
16:02pii-masker개선0분0$0.000 / 0unknown

아이디어 백로그 — 대기 7 / 전체 8

에이전트가 회차마다 재평가한다. 가치 높고 위험 낮은 대기 항목이 다음 회차 후보다.
아이디어가치/위험/크기상태메모갱신
동기 슬롯 대기열의 메모리 상한3/3/M대기슬롯을 기다리는 요청이 이미 읽은 업로드 바이트를 들고 있어 대기열 메모리는 여전히 무제한. 본문을 읽기 전에 슬롯을 잡거나 대기 요청 수 자체를 제한해야 하는데, 본문 읽기 중 슬롯을 점유하면 느린 클라이언트가 슬롯을 묶으므로 읽기 데드라인과 함께 설계 필요.2026-09-10
종료 시 interrupted로 표시된 job의 재개3/3/M대기입력 파일이 디스크에 남아 있으므로 기동 시 해당 job을 queued로 되돌려 다시 큐에 넣는 것이 가능하나, 무한 재시도 방지를 위한 시도 횟수 기록이 필요. 중단 상태가 디스크에 영속화되어 있으므로 시도 횟수 필드를 같은 레코드에 얹기 쉬움.2026-09-10
internal/config 나머지 순수 함수 단위 테스트2/1/S대기타임아웃 관련 3개는 있으나 normalizeAllowHosts, normalizeEndpointURL, normalizePIILang/Schema, envInt/envNonNegativeInt/envBool은 여전히 테스트 없음. t.Setenv로 Load()까지 검증 가능.2026-09-10
/v1/jobs/{id}/result에 HEAD 메서드 허용2/1/S대기server.go:85의 라우트가 GET만 등록되어 있어 다운로드 크기를 미리 확인하는 HEAD 프로브가 405를 받음. http.ServeContent는 이미 HEAD를 올바르게 처리하므로 Methods에 http.MethodHead 추가로 충분. 다른 GET 라우트도 함께 검토할 여지.2026-09-10
jobs.Store.load()가 디렉터리 이름과 job.json의 ID 불일치를 검증하지 않음2/1/S대기모든 쓰기 경로(writeFile/persistLocked)가 job.ID로 디렉터리를 정하는데 load()는 entry.Name() 디렉터리에서 읽은 job.ID를 그대로 키로 쓴다. 손상되거나 손으로 만든 job.json이 다른 ID를 담고 있으면 DeleteExpired가 엉뚱한 디렉터리를 지우고 원래 디렉터리는 영원히 남는다. 불일치 디렉터리를 건너뛰는 가드로 충분.2026-09-10
업로드 파일명 유니코드 정규화(NFC)2/2/S대기sanitizeUploadFilename이 정규화를 하지 않아 macOS 클라이언트가 보내는 NFD(자모 분리) 한글 이름이 그대로 디스크와 메타데이터에 기록됨. 시각적으로 같은 이름이 바이트로 달라 비교·재조회가 어긋나고, filename*로 그대로 되돌려 보내므로 왕복도 NFD로 고정됨. vendor에 이미 있는 golang.org/x/text/unicode/norm으로 NFC 적용 가능.2026-09-10
TestConnection 응답 본문 32KB 절단이 성공 메시지로 그대로 노출됨1/1/S대기client.go:224가 32KB로 자른 본문을 성공 시 ConnectionStatus.Message에 통째로 넣어, 프로브 응답이 큰 엔드포인트에서는 UI에 수십KB짜리 원문이 그대로 뿌려진다. 요약/길이 제한(summarizeResponseBody 재사용)으로 다듬을 여지.2026-09-10
업스트림 응답 8MB 절단 시 오해를 부르는 오류3/1/S완료client.go의 응답 읽기를 maxUpstreamResponseBytes+1로 바꿔 초과를 판별하고, 초과 시 decode_failed 대신 response_too_large(재시도 불가, 문서 분할/verbose 해제 힌트)를 반환. 4xx/5xx는 기존 상태 코드 분류를 우선. 단위 테스트 2개 추가.2026-09-10

원장 (에이전트가 남긴 기록)

2026-09-02

2026-09-02 (2회차)

2026-09-03

2026-09-03 (2회차)

2026-09-03 (3회차)

2026-09-04

2026-09-04 (2회차)

2026-09-05

← 대시보드 · 교훈 모음