aiportal-front

요약. aiportal-front: 자율 개선 회차 19회, 릴리즈 0건. 최근 릴리즈 없음. 건강 C 14일: 릴리즈 0, 실패 0, 경고 0, 회귀 1

현황

저장소
https://github.com/hkjang/aiportal-front
마지막 회차
2026-09-10 19:15 KST — ✅ 머지 merged PR #14, release skipped
최근 릴리즈
skipped — skipped
사유
릴리즈 이력이 전혀 없는 저장소입니다. 태그 0개(git tag / git for-each-ref 로 확인, refs/tags 자체가 없음), GitHub Release 없음, .github/workflows 없음, CHANGELOG.md·docs/RELEASE*.md 등 릴리즈 노트 없음, 릴리즈/패키징 스크립트(scripts/, Makefile, *.sh) 없음. package.json 의 version 은 Vite 스캐폴드 기본값 "0.0.0" 이고 first commit(ab700ba, 2026-09-03) 이후 14개 PR 동안 한 번도 변경된 적이 없으며 private:true 라 레지스트리 배포 대상도 아닙니다. README.md 의 '버전 기록' 표에 있는 유일한 행(0.0.1 / 2025-01-01 / 초기 릴리스)은 저장소 first commit 보다 앞선 날짜의 문서 보일러플레이트로, 실제 릴리즈와 대응하지 않고 갱신된 적도 없습니다. 배포는 .gitlab-ci.yml 이 main 브랜치 push 에 반응해 빌드 후 PVC 로 복사하는 연속 배포 방식이며 태그(CI_COMMIT_TAG)에 반응하는 잡이 전혀 없습니다(docs/08-GitLab-CICD-가이드.md 의 태그 rules 는 문법 예시일 뿐 실제 파이프라인에 없음). 따라서 버전 체계·태그 형식·릴리즈 노트 양식을 새로 정하는 것은 사람의 판단이 필요하므로 아무것도 만들지 않고 건너뜁니다.

회차 이력

일시프로젝트결과
2026-09-10 19:15aiportal-front병합 완료 merged PR #14, release skipped
7파일 +340/−22 · 테스트 3 — fix: 열린 앱 저장 레코드 표기 불일치 및 임베딩 파일명 복원 공용화
2026-09-10 11:23aiportal-front병합 완료 merged PR #13, release skipped
5파일 +83/−49 · 테스트 1 — fix: 대화저장 상세의 기본앱 비동기 처리 오류 및 봇 식별자 파싱 공용화
2026-09-09 15:15aiportal-front병합 완료 merged PR #12, release skipped
3파일 +246/−31 · 테스트 1 — fix: 기본앱 조회 실패 처리 및 마운트 시 중복 API 호출 제거
2026-09-09 07:00aiportal-front병합 완료 merged PR #11, release skipped
4파일 +296/−8 · 테스트 1 — fix: 공용 저장소 사용자 캐시 로그아웃 잔존 및 storage 예외 방어
2026-09-09 00:11aiportal-front병합 완료 merged PR #10, release skipped
6파일 +485/−32 · 테스트 2 — fix: 인증/채팅세션 저장소 방어 및 탭 동기화 플래그 충돌 수정
2026-09-08 21:07aiportal-front병합 완료 merged PR #9 (approved), release skipped
2026-09-08 21:06aiportal-front병합 완료 merged PR #8 (approved), release skipped
2026-09-08 19:20aiportal-front검토 대기 needs approval (risk=medium, files=5), PR open PR #9
5파일 +408/−79 · 테스트 1 — fix: 노트북/업무도구 목록 캐시 사용자 간 잔존 및 조회 실패 수정
2026-09-08 16:11aiportal-front검토 대기 needs approval (risk=medium, files=2), PR open PR #8
2파일 +577/−52 · 테스트 1 — fix: OCR 사용 횟수 초기화 누락 및 상태 스토어 정합성 수정
2026-09-07 10:39aiportal-front병합 완료 merged PR #6 (approved), release skipped
2026-09-07 10:37aiportal-front병합 완료 merged PR #5 (approved), release skipped
2026-09-07 08:59aiportal-front병합 완료 merged PR #7, release skipped
3파일 +330/−47 · 테스트 1 — fix: 로그아웃 후 사용자 정보 잔존 및 탭 간 동기화 누락 수정
2026-09-06 23:47aiportal-front검증 실패 verify failed: secrets in diff
2파일 +447/−60 · 테스트 1 — fix: 토큰 재발급 인터셉터 리프레시 락 누수 수정 및 단위 테스트 추가
2026-09-06 12:11aiportal-front검토 대기 CI no-ci, PR open PR #6
2파일 +370/−31 · 테스트 1 — fix: 첨부파일 용량 안내 문구 옵션 반영 및 업로드 오류 오판 수정 및 단위 테스트 추가
2026-09-06 02:03aiportal-front검토 대기 CI no-ci, PR open PR #5
2파일 +185/−8 · 테스트 1 — fix: 마크다운 렌더링 코드블록/표 래퍼 속성 유실 및 외부 링크 하드닝
2026-09-05 00:31aiportal-front병합 완료 merged PR #4, release skipped
2026-09-04 05:45aiportal-front병합 완료 merged PR #3, release skipped
2026-09-03 22:04aiportal-front병합 완료 merged PR #2, release skipped
2026-09-03 13:47aiportal-front병합 완료 merged PR #1, release skipped

비용·사용량

최근 30세션
시각프로젝트단계시간비용토큰 입력/출력종료
19:15aiportal-front릴리즈1분14$0.44262K / 5Ksuccess
19:13aiportal-frontreview5분20$1.48964K / 19Ksuccess
19:08aiportal-front개선8분54$3.573.7M / 33Ksuccess
11:23aiportal-front릴리즈1분10$0.39227K / 4Ksuccess
11:21aiportal-frontreview4분24$1.23873K / 14Ksuccess
11:17aiportal-front개선5분47$2.352.3M / 20Ksuccess
15:15aiportal-front릴리즈1분11$0.39231K / 4Ksuccess
15:13aiportal-frontreview2분13$0.80442K / 10Ksuccess
15:10aiportal-front개선5분26$1.801.4M / 20Ksuccess
07:00aiportal-front릴리즈1분12$0.40183K / 4Ksuccess
06:58aiportal-frontreview3분20$0.82499K / 10Ksuccess
06:56aiportal-front개선5분29$1.841.3M / 22Ksuccess
00:11aiportal-front릴리즈1분11$0.41262K / 3Ksuccess
00:10aiportal-frontreview3분17$0.86605K / 9Ksuccess
00:07aiportal-front개선7분37$2.351.9M / 28Ksuccess
21:07aiportal-front릴리즈1분9$0.29149K / 3Ksuccess
21:06aiportal-front릴리즈1분11$0.38197K / 3Ksuccess
19:20aiportal-frontreview4분17$1.09671K / 14Ksuccess
19:17aiportal-front개선7분36$2.171.6M / 29Ksuccess
16:11aiportal-frontreview3분14$0.97582K / 10Ksuccess
16:08aiportal-front개선9분29$2.481.7M / 35Ksuccess
10:39aiportal-front릴리즈1분8$0.34153K / 3Ksuccess
10:37aiportal-front릴리즈1분10$0.33179K / 3Ksuccess
08:59aiportal-front릴리즈1분12$0.46242K / 5Ksuccess
08:58aiportal-frontreview2분13$0.80366K / 9Ksuccess
08:55aiportal-front개선5분32$1.891.5M / 22Ksuccess
23:47aiportal-front개선7분39$2.532.0M / 30Ksuccess
12:07aiportal-frontreview2분8$0.55259K / 7Ksuccess
12:05aiportal-front개선5분28$1.551.0M / 21Ksuccess
01:59aiportal-frontreview3분15$0.96578K / 12Ksuccess

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

에이전트가 회차마다 재평가한다. 가치 높고 위험 낮은 대기 항목이 다음 회차 후보다.
아이디어가치/위험/크기상태메모갱신
mitt 이 package.json 직접 의존성에 없음3/1/S대기src/utils/eventBus.js:1 이 mitt 을 import 하지만 package.json dependencies 에 없고 package-lock 에는 전이 의존성으로만 존재한다. 상위 패키지가 mitt 을 떼면 빌드가 깨진다. 2026-09-10 재확인: 여전히 미해결. dependencies 명시 + lock 갱신만 하면 되는 저위험 작업.2026-09-10
serviceCode 리터럴 표기 불일치 상수화(myNoteBook / MyNotebook / multiModal)3/2/S대기myNoteBookStorage 는 2026-09-08 에 대소문자 무시 비교로 고쳤지만 PopWorkFlow.vue:118 ('myNoteBook'), MyAgentList.vue:307 ('MyNotebook'), appList.js:192 ('multiModal') 이 각각 정확 일치 비교를 하고 있어 같은 종류의 조회 실패가 남아 있다. constants.js 에 SERVICE_CODE 를 두고 대소문자 무시 매처를 공유하면 정리된다. 서버가 어느 표기를 주는지 확정되지 않아 비교를 느슨하게 하는 방향으로만 접근해야 한다.2026-09-10
ESLint + Prettier 도입3/2/M대기탭·스페이스 혼재(ocrStatusCheckStore.js·markdown.js·myNoteBookStorage.js·useOpenAppStroage.js 는 스페이스, 나머지 utils/storage 는 탭)로 초기 diff 노이즈가 커서 계속 보류. 도입한다면 포맷 커밋과 규칙 커밋을 분리해야 한다.2026-09-10
Header.vue 가 OCR 사용 여부와 무관하게 마운트 즉시 3초 폴링 시작3/3/M대기Header.vue:47-50 이 앱 진입 시 무조건 loadStatus() + startPolling(3000) 을 호출해, OCR 을 한 번도 쓰지 않은 사용자도 /tools/ocr/status 를 3초마다 호출한다. 미완료 항목이 있을 때만 폴링을 시작하도록 바꾸면 되지만 배지 표시 회귀 검증이 필요하다.2026-09-10
globalLoading 참조 카운트 부재로 병렬 요청 중 스피너 조기 종료3/3/S대기src/utils/globalLoading.js 의 isLoading 이 boolean 이라 A/B 두 요청이 겹칠 때 B 가 먼저 stopLoading 하면 A 진행 중에도 스피너가 사라진다. 카운터로 바꾸면 start/stop 짝이 안 맞는 호출부에서 스피너가 영영 안 사라질 위험이 있어 호출부 전수 확인(20곳 이상)이 선행돼야 한다. export 된 timeoutMs(600000) 는 모듈 안에서 아무 데도 쓰이지 않는다.2026-09-10
빌드 산출물 단일 청크 6.2MB 코드 스플리팅(manualChunks)3/3/M대기2026-09-10 빌드에서도 index-*.js 6,221kB (gzip 1,697kB) 로 동일. mermaid 관련은 이미 동적 청크로 분리돼 있고 monaco-editor/pdfjs-dist/milkdown 이 본체에 남아 있다. 초기 로딩 경로 회귀 위험이 있어 검증 방법이 필요하다.2026-09-10
mapAppToCard(type='prompt') 결과에 to 가 없어 프롬프트 카드 클릭 무반응3/3/S대기src/utils/common.js 의 prompt 분기는 id/title/desc/text/label 만 만들고 to 를 넣지 않는다. GlobalSearch 프롬프트 카드에 이동 대상이 없는 설계인지 확인 필요.2026-09-10
parseUtcToKstDate 의 +9h 이중 적용 정리3/4/S대기로컬 타임존이 KST 일 때 +9h 가 이중 적용된다. 운영 표시값에 광범위한 영향이 있어 계속 보류. 서버가 UTC/KST 중 무엇을 주는지 확인이 선행돼야 한다.2026-09-10
chatTransitionStorage 만료/형식 방어 보강2/1/S대기readChatTransitionData 는 try/catch 로 크래시는 없지만 timestamp 가 없는 레코드는 영구히 만료되지 않고, JSON.parse 결과가 배열이면 그대로 반환해 Chat/Index.vue:717 이 routeSentFiles 폴백 대신 빈 배열을 쓰게 된다. 2026-09-10 재확인: 코드 변동 없음. commonStorage 쪽 정규화 패턴을 옮기면 된다. 실사용 크래시는 확인되지 않아 가치는 낮음.2026-09-10
buildSettingActions support 모드에서 isSimpleBotBool 미전달 시 액션 중복 노출2/1/S대기ButtonSetting.vue 의 visibleActions 는 show === undefined 를 노출로 처리하지만, support 모드를 쓰는 SupportList/MyAgentList 는 둘 다 ref(false) 로 초기화된 isSimpleBot 을 넘기고 ServiceList/InfoSearchList 는 mode 가 고정이라 support 분기에 닿지 않는다. 현재 실사용 영향 없음. !!isSimpleBotBool 정규화 + 모드별 회귀 테스트는 여전히 유효한 하드닝.2026-09-10
ChatStorageDetail.copyAnswer 가 복사를 두 번 실행하고 토스트를 두 번 띄운다2/1/S대기src/views/ChatStorage/ChatStorageDetail.vue:678-699 에서 try 블록 안에서 fallbackCopy 로 복사·토스트를 한 뒤, 아래 '폴백' 주석 코드가 같은 fallbackCopy 를 한 번 더 실행해 토스트가 두 번 뜬다(클립보드 API 를 쓰던 시절의 잔재로 보임). 뒤쪽 블록만 지우면 되는 저위험 정리지만 UI 확인이 있으면 좋다.2026-09-10
getAppInfo 의 'all' 폴백이 SIDEMENU_APP_LIST 대신 APP_LIST 에 캐싱2/2/S대기appList.getAppInfo 는 serviceMenu='all' 일 때 SIDEMENU_APP_LIST 를 읽는데, 사이드메뉴 목록에 없는 앱이라 재조회할 때는 fetchAndCacheAppList(serviceMenu='all', cacheKey='all_{userId}') 가 APP_LIST 쪽에 저장한다. 다음 호출에서 그 캐시를 아무도 읽지 않아 같은 앱에 진입할 때마다 /app/list 재조회가 발생한다. 2026-09-10 발견. 캐시 키를 맞추면 되지만 두 API 의 응답 shape 이 달라(getSideList 는 평탄, appListGet 은 serviceCode 행) 섞어 저장해도 되는지 확인이 필요하다.2026-09-10
useDateRangeFilter 의 시작일>종료일 보정 누락 및 테스트 공백2/2/S대기src/utils/common.js 의 watch 는 endDate < startDate 인 경우만 보정하고 역방향은 두지만, useDateRangeFilter 를 import 하는 .vue 가 하나도 없어 현재 사용자 영향이 없다. 사용처가 생기면 우선순위 상승.2026-09-10
열린 앱(openApp/openAppDoc) 저장 레코드 표기 불일치 정규화 및 임베딩 파일명 복원 공용화4/2/M완료useOpenAppStroage 가 { appId, prjId, appName, _raw }(Sidemenu/appUpdateLog) 와 서버 원본({ app_id, ... })(appList.getAppInfo) 두 표기를 섞어 저장해, 원본이 저장되면 Sidemenu.gotoChatMain 의 심플봇 임베딩 재확인이 건너뛰어졌다. normalizeOpenAppRecord/normalizeOpenAppDoc 으로 쓰기·읽기 모두 정규화하고, |__| 파일명 역변환을 common.parseStoredFileName 으로 합쳤다. 테스트 29건 추가(총 382건).2026-09-10

교훈 (깨졌던 변경)

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

2026-09-03

2026-09-03

2026-09-04

2026-09-05

2026-09-06

2026-09-06

2026-09-07

2026-09-08

2026-09-08

2026-09-09

2026-09-09

2026-09-09

2026-09-10

2026-09-10

← 대시보드 · 교훈 모음