relio

요약. relio: 자율 개선 회차 28회, 릴리즈 12건. 최근 릴리즈 v1.11.19 (자산 1개). 건강 D 14일: 릴리즈 12, 실패 0, 경고 5, 회귀 3

현황

저장소
https://github.com/hkjang/relio
마지막 회차
2026-09-12 08:51 KST — ✅ 머지 merged PR #18 (approved)
최근 릴리즈
v1.11.19 — released · 자산 1개 (이전 v1.11.14: 1개) 전체 릴리즈 →

회차 이력

일시프로젝트결과
2026-09-12 08:51relio병합 완료 merged PR #18 (approved)
2026-09-11 18:11relio병합 완료 fix-round: merged PR #19
8파일 +131/−3 · 테스트 2 — build: let a fresh checkout compile before the frontend has been built
2026-09-11 12:49relio검토 대기 needs approval (risk=low, files=48), PR open PR #18
48파일 +1865/−1024 · 테스트 없음 — docs(guide): capture the strategic account plan with data in it
2026-09-11 08:32relio검증 실패 verify failed: 실패한 검증: go build ./... (exit 1)
47파일 +1858/−1024 · 테스트 없음 — docs: rebuild the user and admin guides around real screen captures
2026-09-10 15:43relio검토 대기 needs approval (risk=medium, files=3), PR open PR #17
3파일 +341/−42 · 테스트 1 — perf(intelligence): read the deal health facts once for the whole set
2026-09-10 01:10relio병합 완료 merged PR #16
2파일 +414/−81 · 테스트 1 — fix(intelligence): bound the amount and probability drop rules by their window
2026-09-09 13:11relio병합 완료 merged PR #15 (approved)
2026-09-09 12:41relio검토 대기 review held, PR open PR #15
9파일 +279/−22 · 테스트 4 — fix(intelligence): count D-days on the configured timezone's calendar
2026-09-09 03:15relio병합 완료 merged PR #14
12파일 +567/−9 · 테스트 2 — fix(settings): derive dates from the configured system.timezone
2026-09-08 22:19relio병합 완료 merged PR #13
4파일 +234/−5 · 테스트 2 — fix(audit): keep an event from being lost by the address it came from
2026-09-08 09:53relio배포 준비 완료 release-only, released v1.11.19
2026-09-07 11:44relio검토 대기 approved PR #12
2026-09-07 11:14relio검토 대기 approved PR #12
2026-09-07 10:59relio검토 대기 approved PR #12
2026-09-07 10:45relio검토 대기 approved PR #12
2026-09-07 04:09relio검증 실패 verify failed: secrets in diff
3파일 +193/−17 · 테스트 1 — fix(auth): spend the same password derivation on every login outcome
2026-09-06 19:19relio검토 대기 fix-round: guarded files, PR open PR #12, rollback PR
4파일 +194/−7 · 테스트 없음 — fix(release): upgrade from the newest release that was published
2026-09-06 19:02relio릴리즈 진행 중 merged PR #11, released v1.11.18, ASSETS MISSING (release workflow FAILED), queued for fix
6파일 +147/−11 · 테스트 2 — fix(api): read a bounded integer query parameter as the number sent
2026-09-05 08:12relio릴리즈 진행 중 merged PR #10, released v1.11.17, ASSETS MISSING
2026-09-05 07:33relio릴리즈 진행 중 merged PR #9, released v1.11.16, ASSETS MISSING
2026-09-04 16:19relio릴리즈 진행 중 merged PR #8, released v1.11.15, ASSETS MISSING
2026-09-04 15:28relio배포 준비 완료 merged PR #7, released v1.11.14
2026-09-04 00:50relio배포 준비 완료 merged PR #6, released v1.11.13
2026-09-03 17:17relio배포 준비 완료 merged PR #5, released v1.11.12
2026-09-03 10:16relio배포 준비 완료 merged PR #4, released v1.11.11
2026-09-03 04:47relio배포 준비 완료 merged PR #3, released v1.11.10
2026-09-02 22:29relio배포 준비 완료 merged PR #2, released v1.11.9
2026-09-02 16:17relio배포 준비 완료 merged PR #1, released v1.11.8

비용·사용량

최근 30세션
시각프로젝트단계시간비용토큰 입력/출력종료
18:08relioreview1분7$0.35189K / 4Ksuccess
18:07relio개선8분49$3.593.8M / 30Ksuccess
12:49relioreview3분24$1.831.6M / 10Ksuccess
12:47relio개선6분57$3.864.7M / 21Ksuccess
08:32relio개선23분103$10.5212.6M / 82Ksuccess
15:43relioreview5분26$1.561.3M / 17Ksuccess
15:38relio개선8분42$2.972.6M / 35Ksuccess
01:09relioreview3분16$0.85563K / 10Ksuccess
01:06relio개선5분36$2.281.9M / 25Ksuccess
12:41relioreview2분14$0.95476K / 10Ksuccess
12:37relio개선7분60$3.463.4M / 32Ksuccess
03:14relioreview4분22$1.29826K / 15Ksuccess
03:10relio개선11분83$4.795.2M / 44Ksuccess
22:18relioreview2분12$0.71432K / 7Ksuccess
22:16relio개선6분34$2.031.6M / 22Ksuccess
09:46relio릴리즈3분23$1.13855K / 12Ksuccess
04:09relio개선9분47$3.402.9M / 36Ksuccess
19:18relio개선9분45$3.253.2M / 31Ksuccess
18:42relio릴리즈2분19$0.90578K / 8Ksuccess
18:39relioreview3분12$0.73394K / 10Ksuccess
18:36relio개선6분45$2.402.2M / 26Ksuccess

아이디어 백로그 — 대기 14 / 전체 17

에이전트가 회차마다 재평가한다. 가치 높고 위험 낮은 대기 항목이 다음 회차 후보다.
아이디어가치/위험/크기상태메모갱신
ClientIP 가 X-Forwarded-For/Forwarded 를 읽지 않아 리버스 프록시 뒤에서 로그인 리미터가 프록시 주소 하나로 묶이고 감사 IP 가 무의미함4/2/M대기2026-09-11 가이드 작성 중 확인(internal/platform/httpx/httpx.go ClientIP 는 RemoteAddr 만 읽음). 신뢰 프록시 목록 없이 헤더를 믿으면 스푸핑이 되므로 관리자 설정(예: security.trusted_proxies)과 함께 붙여야 하고, 환경 변수 계약(4개)은 넓히지 않는다. 문서에는 현 동작을 그대로 적어 둠.2026-09-11
security.allowed_origins 설정은 관리자 화면에 있으나 Go 코드 어디에서도 읽지 않음 — 적용하거나 화면에서 제거3/1/S대기2026-09-11 확인: grep 결과 mcp.allowed_origins 만 internal/mcp/server.go 에서 읽힘. 001_initial.sql 시드와 admin 화면(보안 · 파일 · 접속)에는 존재. 관리자가 값을 넣어도 아무 효과가 없어 잘못된 안전감을 준다. ADMIN_GUIDE 설정 표에 '읽지 않음' 으로 적어 둠 — 고치면 문서도 갱신.2026-09-11
네 intelligence 필터의 Cursor 필드는 죽은 코드 — 커서 페이징을 붙이거나 제거3/1/M대기internal/intelligence/signals.go 의 SignalFilter·RiskFilter·InsightFilter·RecommendationFilter 가 Cursor 를 선언하지만 queries.go 의 어떤 질의도 쓰지 않고 crm_intelligence.go 의 어떤 핸들러도 채우지 않는다. clampLimit 상한 200. crm.Page/parseCursor 패턴이 있다.2026-09-11
DealsAtRisk·Coaching 은 열린 딜 200건만 보고 나머지는 조용히 빠짐3/2/M대기둘 다 ListOpportunities(Status:OPEN, Limit:200) 로 '가장 최근 갱신된' 200건만 받는다. 2026-09-10 에 묶음 채점이 왕복 7회로 싸졌으므로 커서로 페이지를 돌며 전체를 덮어도 비용이 감당된다 — 상한(예: 2000건)과 메모리·응답 크기를 함께 본다.2026-09-11
list_activities·get_contracts·list_quotations 등 나머지 MCP 목록 도구는 페이징 자체가 없음3/2/M대기서비스가 슬라이스만 돌려주어 상위 N건 뒤는 에이전트가 볼 수 없다. search_customers·list_opportunities 에만 커서가 있다(2026-09-04).2026-09-11
로컬 로그인이 꺼져 있을 때 /auth/login 이 403 과 401 로 bootstrap 계정 여부를 알려줌3/2/S대기internal/server/public.go: local_login_enabled=false 면 bootstrap 이 아닌 사용자명(없는 것 포함)은 403 local_login_disabled, bootstrap 만 401 로 넘어가 구분된다. 응답을 합치면 SSO 전용 인스턴스에서 사용자가 왜 막혔는지 모르게 되므로 UX 절충 필요.2026-09-11
CI 에 gofmt -l 검사 추가 (shellcheck 도 함께)2/1/S대기.github/workflows/ci.yml 의 Backend static analysis 단계 옆에 붙이면 된다. 지금은 포맷 위반이 CI 를 통과한다. scripts/ 에 bash 가 늘고 있다.2026-09-11
audit.Record 는 Exec 실패를 로그 한 줄로 흘림 — 운영자가 볼 수 있는 곳으로 올리기2/1/S대기2026-09-08 에 nullableJSON 과 ClientIP 는 고쳤으나 Record 자체의 실패 처리는 그대로. '감사 쓰기 실패' 를 Admin Command Center 진단에 노출하는 것이 남은 값이며 DB 의존이라 작업량이 더 크다.2026-09-11
minScore 등 다른 좁히기 필터에도 ClampQuery 적용 검토2/1/S대기crm_intelligence.go 의 minScore 는 fallback 0 이 필터를 끄는 expiringDays 와 같은 구조. year(fallback 0, min 2000) 처럼 fallback 이 sentinel 인 경우는 클램프가 의미를 바꾸므로 케이스별 판단.2026-09-11
관리자 가이드 부록의 캡처 절차가 compose 기본 포트 8080·기본 초기 비밀번호를 그대로 쓰라고 안내함 — 임시 포트·임시 비밀번호 override 예시로 바꾸기2/1/S대기2026-09-11 회차는 /tmp 의 compose override(127.0.0.1:18080, BOOTSTRAP_ADMIN_PASSWORD 를 openssl rand 로) 로 띄웠음. 부록에 그 방식을 적으면 8080 을 쓰는 다른 스택과 충돌하지 않고 compose.yaml 의 공개된 초기 비밀번호로 로그인하는 일도 없음. 문서만의 변경.2026-09-11
PR #18 리뷰가 남긴 screenshots.mjs 의 두 결함 — 헤더 주석이 '복원할 것이 없다' 고 하지만 rate limit 을 바꿨다 되돌리고, Chrome 후보 목록이 .find(Boolean) 이라 존재 확인 없이 첫 경로만 씀2/1/S대기PR #18 브랜치(auto/2026-09-11-1241)의 scripts/guide/screenshots.mjs:7 과 :46. 머지 뒤에 고친다 — 지금 main 에는 그 파일이 없다. fs.existsSync 로 후보를 걸러 첫 존재 경로를 쓰고, 없으면 RELIO_GUIDE_CHROME 을 요구하는 오류로 멈춘다. docs/index_en.html 의 가이드 설명 문구도 한국어 페이지처럼 갱신.2026-09-11
make test 와 Makefile smoke 의 정리 — smoke 타깃에 초기 비밀번호가 글자로 적혀 있고, test 타깃은 web build 없이 go test 를 먼저 돌림2/1/S대기Makefile smoke: ./scripts/offline-smoke.sh http://127.0.0.1:8080 admin ChangeMe-Relio-2026 — compose.yaml 의 초기 비밀번호를 그대로 적음. GUIDE-STANDARD 는 캡처·시드 스크립트에만 적용되지만 러너의 비밀정보 검사 대상이 될 수 있으니 환경 변수(예: RELIO_SMOKE_PASSWORD)로 받게 바꾼다. test 타깃의 순서 문제는 2026-09-11 anchor 로 해소되었으나 build 타깃처럼 web 의존을 명시하면 더 분명하다.2026-09-11
계약번호의 무작위 꼬리가 24비트뿐이라 하루 수백 건이면 충돌 가능2/2/S대기contractNumber 는 ids.HexToken(3). 하루 500건이면 약 0.75% 충돌. HexToken(4~5) 또는 충돌 시 재시도 — 번호 형식이 바뀌므로 기존 데이터·문서(ADMIN/USER_GUIDE 에 C-<날짜>-<식별자> 로 적힘)와의 정합 확인.2026-09-11
GetOpportunity 는 행이 없어도 시간대 조회와 건강도 계산을 계속 진행1/1/S대기internal/crm/service.go 의 GetOpportunity 가 scanOpportunity 의 err 확인 전에 s.Clock.DateAt 과 opportunityHealth 를 부른다. 동작 차이 없음, err 검사를 앞으로 옮기면 끝.2026-09-11
사용자·관리자 가이드를 실제 화면 캡처가 실린 완성본으로 다시 쓰기 (캠페인 guides-2026-09)5/1/M완료docs/USER_GUIDE.md·ADMIN_GUIDE.md 와 PDF, 캡처 32장(docs/assets/guide), 캡처 도구 scripts/guide/screenshots.mjs(전용 env var·DISPOSABLE 가드·rate limit 복원). admin-guide.md 대체 안내, HTML 사본 제거, README·랜딩 링크 정리. 커밋 880adef. | 08:11 회차 커밋 880adef 는 러너 검증 go build 가 internal/webui/dist 부재로 실패해 푸시되지 않았음. 12:41 회차가 a73db96 으로 cherry-pick 하고 web build 를 먼저 돌려 검증 통과. | 17:59 회차 확인: PR #18(auto/2026-09-11-1241) 로 열려 검증·CI·리뷰 통과, low-risk 파일 수 제한(48>12)으로 사람 승인 대기 중. 중복 PR 을 피하려 이 회차에는 다시 올리지 않음.2026-09-11
새 worktree 에서 go build ./... 가 web build 없이는 실패함 — internal/webui/dist 자리표시자 또는 검증 순서4/1/S완료2026-09-11 17:59 회차(수정 과제)에서 해결: internal/webui/dist/README 를 커밋해 embed 패턴이 빌드 전에도 매치되고, 같은 파일을 web/public/README 에 두어 vite(emptyOutDir) 가 비운 뒤 그대로 복사해 되돌림. .gitignore 는 /dist/ 와 internal/webui/dist/* + 예외로 분리. 두 사본의 바이트 동일·커밋 여부를 assets_test.go 와 check-static-assets.sh 가 검사. 숨어 있던 두 번째 의존(server 테스트가 실제 embed 의 index.html 요구)도 spaHandlerFor + fstest.MapFS 로 제거. 러너 순서(go build → go test → web build)로 새 checkout 에서 통과 확인.2026-09-11
캡처 도구가 전략 고객 계획을 채우지 못해 고객 360 의 계획 섹션이 빈 폼으로 찍힘1/1/S완료2026-09-11 해결: GetAccountPlan 은 행이 없어도 status=DRAFT 빈 템플릿을 돌려주므로 status 판정이 항상 건너뛰었음. 저장된 행만 갖는 id 로 판단하도록 바꾸고 customer-360-relationships.png 재촬영, 전략 고객 계획 패널 전용 customer-360-plan.png 를 새로 찍어 사용자 가이드 3.3 절에 실음. 커밋 9318481.2026-09-11

교훈 (깨졌던 변경)

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

2026-09-02

2026-09-02

2026-09-03

2026-09-03

2026-09-03

2026-09-04

2026-09-04

2026-09-04

2026-09-05

2026-09-05

2026-09-07

2026-09-09

2026-09-09

2026-09-10

2026-09-10

2026-09-11

2026-09-11

2026-09-11

← 대시보드 · 교훈 모음