jikim

요약. jikim: 자율 개선 회차 12회, 릴리즈 8건. 최근 릴리즈 v0.2.11 (자산 2개). 건강 C 14일: 릴리즈 8, 실패 0, 경고 2, 회귀 1

현황

저장소
https://github.com/hkjang/jikim
마지막 회차
2026-09-12 18:14 KST — 🚀 릴리즈 merged PR #26, released v0.2.11
최근 릴리즈
v0.2.11 — released · 자산 2개 (이전 v0.2.10: 2개) 전체 릴리즈 →

회차 이력

일시프로젝트결과
2026-09-12 18:14jikim배포 준비 완료 merged PR #26, released v0.2.11
18파일 +2038/−16 · 테스트 4 — feat: let administrators attach a visitor tracking snippet under a nonce-backed CSP
2026-09-11 03:12jikim검토 대기 guarded files, PR open PR #25
60파일 +946/−269 · 테스트 1 — docs: add the user and admin guides with real screenshots
2026-09-10 20:10jikim배포 준비 완료 merged PR #24, released v0.2.9
6파일 +190/−11 · 테스트 1 — fix: report an unreachable PostgreSQL as sealed on /v1/sys/health
2026-09-10 12:31jikim배포 준비 완료 merged PR #23, released v0.2.8
7파일 +263/−11 · 테스트 2 — fix: separate database outages from rejected credentials and sessions
2026-09-09 15:47jikim검토 대기 review held, PR open PR #22
4파일 +225/−26 · 테스트 1 — fix: report failed capability checks as server faults, not denials
2026-09-09 15:41jikim실행 오류 hold: budget
2026-09-09 08:38jikim배포 준비 완료 merged PR #21, released v0.2.6
3파일 +144/−10 · 테스트 1 — fix: hide store internals from MCP tool errors
2026-09-09 01:29jikim배포 준비 완료 merged PR #18, released v0.2.5
5파일 +202/−15 · 테스트 2 — fix: map Transit store failures to their real status instead of 400
2026-09-08 20:41jikim배포 준비 완료 merged PR #17, released v0.2.4
6파일 +362/−9 · 테스트 1 — feat: support OpenBao Transit batch_input and batch_results
2026-09-07 01:41jikim검토 대기 guarded files, PR open PR #16
33파일 +414/−98 · 테스트 3 — release: 신뢰 Reverse Proxy 클라이언트 IP 판별을 v0.2.4로 릴리스
2026-09-06 15:47jikim배포 준비 완료 merged PR #15, released v0.2.3
3파일 +107/−10 · 테스트 1 — fix: reject mistyped security and general settings values
2026-09-05 03:52jikim배포 준비 완료 merged PR #14, released v0.2.2

비용·사용량

최근 30세션
시각프로젝트단계시간비용토큰 입력/출력종료
18:07jikim릴리즈4분27$1.871.7M / 13Ksuccess
18:03jikimreview4분18$1.601.0M / 16Ksuccess
17:59jikim개선21분97$11.6714.8M / 85Ksuccess
16:49jikim릴리즈9분43$2.923.1M / 21Ksuccess
03:12jikim개선23분127$14.5320.1M / 77Ksuccess
20:04jikim릴리즈2분23$1.17944K / 7Ksuccess
20:01jikimreview3분14$0.95529K / 13Ksuccess
19:58jikim개선7분54$3.924.3M / 29Ksuccess
12:24jikim릴리즈2분22$1.05843K / 6Ksuccess
12:21jikimreview4분20$1.17803K / 14Ksuccess
12:18jikim개선7분63$3.844.3M / 29Ksuccess
10:56jikim릴리즈6분36$1.741.8M / 10Ksuccess
15:46jikim개선6분49$2.892.8M / 25Ksuccess
08:31jikim릴리즈2분19$0.85639K / 6Ksuccess
08:28jikimreview3분21$0.95509K / 11Ksuccess
08:25jikim개선5분40$2.001.7M / 20Ksuccess
01:20jikim릴리즈2분21$1.01771K / 6Ksuccess
01:18jikimreview3분21$1.08738K / 11Ksuccess
01:15jikim개선5분33$1.891.6M / 19Ksuccess
20:34jikim릴리즈2분21$1.08810K / 7Ksuccess
20:31jikimreview4분16$1.18714K / 15Ksuccess
20:27jikim개선7분38$2.842.2M / 31Ksuccess
01:41jikim개선12분74$5.936.8M / 43Ksuccess
15:40jikim릴리즈2분23$1.07841K / 7Ksuccess
15:37jikimreview2분19$0.75432K / 8Ksuccess
15:35jikim개선5분38$1.971.7M / 18Ksuccess

아이디어 백로그 — 대기 13 / 전체 15

에이전트가 회차마다 재평가한다. 가치 높고 위험 낮은 대기 항목이 다음 회차 후보다.
아이디어가치/위험/크기상태메모갱신
감사 로그 보존(audit_retention_days) 자동 정리 구현3/3/M대기설정은 저장·검증되지만 실제 삭제 작업이 없다. UI가 프리뷰라고 명시하고 있어 정직성 문제는 아니지만 기능 공백이다. 관리자 가이드에도 '자동으로 지워지지 않으므로 매월 증가량을 확인하라'로 적었다. 삭제는 되돌릴 수 없으므로 배치 주기·드라이런·삭제 자체의 감사 기록 설계가 필요하다.2026-09-12
로그인 성공 판정 전에 rate limiter를 succeeded로 초기화하는 순서 정리2/1/S대기auth_handlers.go login과 openbao.go baoUserpassLogin 모두 Authenticate 직후 succeeded()를 부르고 그 뒤에 AllowLocalLogin을 확인한다. 로컬 로그인이 꺼진 계정에 올바른 비밀번호를 넣으면 실패 카운터가 초기화된다. succeeded() 호출을 CreateSession 직전으로 옮기면 된다. 2026-09-12 재확인: 그대로다(이번 회차는 캠페인 우선).2026-09-12
settings GET이 주입하는 파생 필드가 PUT 왕복 시 workflow 설정에 저장되는 문제 정리2/1/S대기resource_handlers.go settings()가 approval에 four_eyes·required_approvals·supported_targets를 주입하는데 updateSettings()는 *_configured와 supported_events만 삭제한다. 나머지는 workflow 설정 JSON에 적재되고 validateSetting이 미지의 키를 허용하므로 400 없이 DB에만 쓰레기 필드가 쌓인다. GET이 매번 덮어쓰므로 화면 증상은 없다. 2026-09-12 재확인: 그대로다.2026-09-12
관리 화면 전반의 'v0.2.0' 프리뷰 문구를 현재 버전 표기로 바꾸기2/1/S대기FeaturePage.tsx의 거의 모든 프리뷰 notice, SecretEditorPage.tsx 회전 정책 안내, SecretDetailPage.tsx, SettingsPage.tsx(일반 설정 설명·감사 보존·허용 네트워크·최초 비밀번호 변경)에 'v0.2.0은 …'이 남아 있다. 이 문구가 가이드에 실리는 캡처(secret-new.png, guide.png)에 그대로 보인다. APP_VERSION 참조나 '현재 버전' 표현으로 바꾸고 캡처를 다시 찍으면 된다. 2026-09-12 재확인: 그대로다.2026-09-12
모바일 fullPage 캡처가 너무 길어 갤러리·문서에서 읽을 수 없는 문제 정리2/1/S대기dashboard-mobile.png는 1024x7875(가로 대비 7.7배), admin-settings-mobile.png는 3785px이다. A4 한 쪽에 들어가는 최대 비율이 약 1.45라 두 문서 어디에도 실을 수 없어 가이드는 데스크톱 캡처만 썼다. 감사 로그 화면처럼 mobile.spec.ts도 viewport 높이 또는 clip으로 찍으면 가이드의 모바일 절을 만들 수 있다. 2026-09-12: 방문 추적 탭 캡처는 이 교훈대로 viewport 높이로 찍었다.2026-09-12
캡처 파이프라인(all-pages.spec.ts)에 방문 추적 탭 캡처를 정식 편입하고 admin-settings.png를 7개 탭 기준으로 다시 찍기2/1/S대기2026-09-12 신규. admin-settings-tracking.png는 이번에 일회성 Playwright 스크립트로 개발 빌드(0.2.10-dev)에서 찍었고 manifest에 required:false·fixture:true로 넣었다. 기존 admin-settings.png는 v0.2.9 기준 6개 탭이라 새 탭이 없다. E2E 전용 컨테이너에서 tracking 설정을 켜고 csp-report를 하나 보내 표가 보이는 상태로 찍은 뒤 원래 값(꺼짐)으로 되돌리는 케이스를 spec에 추가하면 릴리스마다 자동으로 갱신된다.2026-09-12
authorizeTransit이 없는 transit key의 decrypt를 permission denied로 보고하는 문제 정리2/2/S대기openbao.go authorizeTransit은 encrypt일 때만 TransitPermission의 ErrNotFound를 create capability 확인으로 흡수하고 decrypt는 (false, ErrNotFound)를 그대로 돌려준다. baoAllow → baoAccessFailure에서 403 permission denied가 되어 같은 파일 baoTransitFailure가 ErrNotFound를 400 encryption key not found로 매핑하는 것과 어긋난다. 호출자는 이미 경로 decrypt capability를 통과한 뒤라 key 부재를 알려도 노출 문제는 없다.2026-09-12
baoKVWrite가 SecretExistsByPath로 create·update capability를 고르면서 생기는 TOCTOU 정리2/2/S대기openbao.go baoKVWrite는 먼저 SecretExistsByPath로 존재 여부를 보고 capability를 create/update 중 하나로 고른 뒤 PutOpenBaoSecret을 부른다. 두 호출 사이에 다른 요청이 같은 path를 만들면 create만 가진 caller가 기존 key를 덮어쓸 수 있다. 두 capability 중 하나라도 있으면 통과시키고 실제 결과 버전으로 판정하거나 쓰기를 한 트랜잭션으로 합치는 편이 정확하다.2026-09-12
requestedOpenBaoVersion이 음수 version 쿼리를 오류 대신 latest로 처리하는 동작 정리2/2/S대기openbao.go requestedOpenBaoVersion은 version<1이면 0(latest)을 돌려준다. OpenBao는 잘못된 버전에 오류를 낸다. 현재 동작이 docs/guides/compatibility.md에 문서화돼 있어 문서와 코드를 함께 바꿔야 하고 클라이언트 호환 영향이 있으므로 differential suite와 함께 다루는 편이 낫다.2026-09-12
승인 워크플로가 켜진 상태의 검토·승인 화면 캡처 추가2/2/M대기approvals.png는 워크플로가 꺼진 기본 상태의 안내 화면이라, 가이드가 정작 검토자가 보는 대기 목록을 보여 주지 못한다. E2E 전용 컨테이너에서 PATCH /api/v1/settings로 워크플로를 켜고 일반 사용자 계정으로 요청을 만든 뒤 캡처하고 원래 값으로 되돌리면 된다. 기존 값을 먼저 읽어 복원해야 한다.2026-09-12
SPA 내부 이동 시 include_admin 제외가 처음 연 주소 기준으로만 적용되는 한계 보완2/2/M대기2026-09-12 신규. 스니펫은 SPA 셸에 한 번 실리므로 /dashboard로 들어온 뒤 화면 안에서 /admin/settings로 이동하면 계속 동작한다(가이드 3.7절에 명시). 서버가 셸에 data-tracking-exclude 경로 목록을 실어 주고 클라이언트 라우터 훅이 관리 경로 진입 시 tracker의 pageview 호출을 막는 식으로 보완할 수 있으나 제공자마다 API가 달라 momento만 우선 지원하는 편이 현실적이다.2026-09-12
Transit rewrap/datakey 등 후속 엔드포인트 확장2/3/M대기/v1/transit/rewrap/{key}는 회전 후 재암호화를 위해 실사용 빈도가 높고 기존 저장 계층(transit_key_versions)만으로 구현 가능하다. /v1/transit/keys/* 관리 API는 jikim 관리 API와 권한 모델이 겹치므로 신중히.2026-09-12
방문 추적 설정 조회를 짧은 TTL 캐시로 묶어 SPA 셸 요청마다 생기는 settings 조회 줄이기1/1/S대기2026-09-12 신규. decorateIndex가 셸 요청마다 store.TrackingConfig를 호출한다(정적 자산·API에는 없음). 페이지 로드당 한 번이라 부하는 작지만, 다른 설정 조회와 같이 수 초 TTL 캐시를 두면 DB 왕복을 없앨 수 있다. 캐시 때문에 저장 직후 반영이 늦어지는 점을 가이드에 적어야 한다.2026-09-12
캠페인 tracking-2026-09 — 관리자가 화면에서 방문 추적 스크립트를 붙이는 체계(nonce 기반 CSP·Momento 같은 오리진 프록시·차단 출처 기록)4/2/M완료2026-09-12 구현. internal/tracking, settings의 tracking 키, SPA 셸 nonce·정책, csp-report와 admin 위반 API, /momento/* 프록시, 관리 화면 방문 추적 탭, 가이드 3.7절과 PDF. 기본 꺼짐, 'unsafe-inline' 미사용. 실제 PostgreSQL·stub 수집기·Chromium으로 로드 확인. 커밋 67f0934.2026-09-12
settings.go의 데드 코드 var _ = pgx.ErrNoRows 제거1/1/S완료2026-09-12 방문 추적 캠페인에서 settings.go를 건드리며 함께 제거했다(pgx import도 정리). 커밋 67f0934.2026-09-12

교훈 (깨졌던 변경)

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

2026-09-05

2026-09-08

← 대시보드 · 교훈 모음