Initial commit: OpenClaw 워크스페이스 버전관리 시작

설정·스크립트·스킬·문서·큐레이션 메모리 추적.
시크릿(credentials/identity)·런타임 상태(state/logs/sessions/sqlite)·
백업(clobbered/bak)·dream 캐시는 .gitignore로 제외.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
hyowons
2026-06-04 15:10:57 +09:00
commit 549545bde6
199 changed files with 49671 additions and 0 deletions
@@ -0,0 +1,34 @@
# Session: 2026-04-23 09:43:17 UTC
- **Session Key**: agent:budget:telegram:direct:8443122995
- **Session ID**: 3f1bf1d1-0e8f-4727-a0aa-9c978aafa272
- **Source**: telegram
## Conversation Summary
user: Conversation info (untrusted metadata):
```json
{
"chat_id": "telegram:8443122995",
"message_id": "4",
"sender_id": "8443122995",
"sender": "snowoyh bang",
"timestamp": "Thu 2026-04-23 15:36 GMT+9"
}
```
Sender (untrusted metadata):
```json
{
"label": "snowoyh bang (8443122995)",
"id": "8443122995",
"name": "snowoyh bang",
"username": "snowoyh"
}
```
/start
assistant: [[reply_to_current]] 안녕하세요, 관리자님. 골디입니다 📒
후잉 가계부 자동 입력과 미분류/실패 건 점검을 도와드릴게요.
원하시면 바로 최근 동기화 상태부터 확인해드릴 수 있어요.
@@ -0,0 +1,63 @@
# Session: 2026-04-24 02:20:55 UTC
- **Session Key**: agent:budget:telegram:direct:8443122995
- **Session ID**: ab1e7f96-32ba-4b44-8597-f483b3cb7b0f
- **Source**: telegram
## Conversation Summary
user: A new session was started via /new or /reset. Execute your Session Startup sequence now - read the required files before responding to the user. If BOOTSTRAP.md exists in the provided Project Context, read it and follow its instructions first. Then greet the user in your configured persona, if one is provided. Be yourself - use your defined voice, mannerisms, and mood. Keep it to 1-3 sentences and ask what they want to do. If the runtime model differs from default_model in the system prompt, mention the default model. Do not mention internal steps, files, tools, or reasoning.
Current time: Thursday, April 23rd, 2026 - 6:43 PM (Asia/Seoul) / 2026-04-23 09:43 UTC
assistant: 안녕하세요, 관리자님. 저는 골디📒예요 — 가계부 자동 입력이랑 정리, 누락·중복 확인까지 차분하게 챙겨드릴게요. 오늘은 무엇을 정리해볼까요?
user: Conversation info (untrusted metadata):
```json
{
"chat_id": "telegram:8443122995",
"message_id": "15",
"sender_id": "8443122995",
"sender": "snowoyh bang",
"timestamp": "Thu 2026-04-23 18:45 GMT+9"
}
```
Sender (untrusted metadata):
```json
{
"label": "snowoyh bang (8443122995)",
"id": "8443122995",
"name": "snowoyh bang",
"username": "snowoyh"
}
```
현재 자산이 얼마지?
assistant: 관리자님, 현재 **자산 합계는 384,879,110원**이에요.
참고로 같은 시점에 **부채 1,521,811원**, 그래서 **순자산(자본) 383,357,299원**으로 보여요.
원하시면 제가 바로 **자산 항목별로**도 깔끔하게 풀어서 보여드릴게요.
user: Conversation info (untrusted metadata):
```json
{
"chat_id": "telegram:8443122995",
"message_id": "17",
"sender_id": "8443122995",
"sender": "snowoyh bang",
"timestamp": "Thu 2026-04-23 18:46 GMT+9"
}
```
Sender (untrusted metadata):
```json
{
"label": "snowoyh bang (8443122995)",
"id": "8443122995",
"name": "snowoyh bang",
"username": "snowoyh"
}
```
어떻게 알아냇어?
assistant: 관리자님 후잉 장부에 직접 연결해서 **오늘 기준 잔액 조회**로 확인했어요.
자산/부채/자본을 후잉 OpenAPI에서 불러오는 방식이라, 제가 임의 계산한 값이 아니라 **현재 장부 기준 합계**예요.
원하시면 다음엔 **어느 계정이 얼마인지**까지 같이 바로 보여드릴게요.
@@ -0,0 +1,26 @@
# 2026-04-24
## whooing-sync 대개편
1. **스케줄러 launchd 전환**
- OpenClaw cron `후잉 가계부 동기화` (agentTurn 기반, 매 실행 LLM 세션 부팅) → launchd 로 이관. LLM 호출 0 건으로 월 ~70M 토큰 절감.
- plist: `~/Library/LaunchAgents/ai.openclaw.budget.whooing-sync.plist`, 매시 0/15/30/45 분.
- FDA 허용 대상: `/opt/homebrew/bin/imsg`.
2. **parsers.py**
- `parse_shinhan_bank` 신규 (+8215778000). 포맷: `[Web발신]\n신한MM/DD HH:MM\n계좌\n(입금|출금) 금액\n잔액 NNN\n 메모`.
- `PARSERS` 키 정정: `+8215447200``+8215447000` (신한카드 실제 발신번호).
3. **whooing_sync.py**
- `SKIP_PATTERNS``"인증번호"` 추가.
- `detect_pairs()` 신규 + main 루프 재구성. 입↔출 5 분 윈도우 동일 금액 페어를 1 건의 structured 자산 이체로 합성. 짝 없는 최근 5 분 이내 입출금은 hold (다음 cron 재시도). 상수 `PAIR_WINDOW_SECONDS=300`, `HOLD_GRACE_SECONDS=300`.
- 요약 라인에 `transfer N건` 추가.
4. **account_map 정리**
- `+8215447000` (신한카드) 등록, `confirmed: false` (사용 내역 없을 때까지 유지).
- `+8215778000` (신한은행) `confirmed: true`.
5. **오늘 거래 수동 재등록 (후잉 UI 삭제 후)**
- 4/24 아동수당 100,000 / 해긴 4월급여 5,778,800 — 수익 입금.
- 하나→카뱅 2,000,000 + 100,000 — 자산 이체.
- 하나→신한 10,000 — 자산 이체 (페어 매칭 대상이었음).
@@ -0,0 +1,4 @@
# 2026-04-30
- 하나은행 입금 `해긴인센티브` 732,940원을 관리자님 지시에 따라 `상여금` 수익으로 수동 분개했다.
- `state/whooing_overrides.json`에 입금 수익 룰 추가/확장: 하나·신한·카카오뱅크 입금 메모에 `인센티브` / `성과급` / `상여금` / `보너스` 포함 시 앞으로 자동으로 `각 은행 자산계정 ← 상여금` 처리.
@@ -0,0 +1,4 @@
# 2026-05-04
- 관리자님 지시에 따라 하나은행 출금 메모에 계좌번호 `29391039692625`가 포함되면 `하나청약(효원) ← 하나은행(효원)` 자산이체로 처리하도록 `state/whooing_overrides.json`에 규칙을 추가했다. 항목명은 `하나청약 이체`.
- 관리자님 선호 반영: 잔액/누적사용액 정합 회복 알림에는 `회복 금액`과, 알 수 있는 경우 `반영 항목`도 함께 표기하도록 `skills/whooing-sync/scripts/whooing_sync.py` 메시지 포맷을 수정했다.
@@ -0,0 +1,3 @@
# 2026-05-07
- 관리자님 지시: `삼천리도시가스`는 후잉에서 `주거,관리` 항목으로 분류하고, item은 `공과금`으로 처리.
@@ -0,0 +1,13 @@
# 2026-05-08
- 관리자님 지시: “간편인증서” 관련 문자는 후잉 처리하지 않는다.
- 조치: `skills/whooing-sync/scripts/whooing_sync.py``SKIP_PATTERNS``간편인증서` 추가. 로그 라벨도 `[skip-광고]`에서 범용 `[skip]`로 조정.
- 장기 메모: `MEMORY.md`의 비결제 인증 메시지 스킵 규칙에 반영.
- 10:55 후속 조치: 카카오뱅크 `우리아이통장 개설` 안내가 금액 없는 비거래 문자인데 raw 폴백으로 후잉에 전송된 문제 확인.
- 원인: confirmed 발신번호 메시지가 `SKIP_PATTERNS`에 걸리지 않고 parser 매칭도 안 되면 raw 폴백으로 후잉에 보내는 구조였음.
- 수정: `MONEY_AMOUNT_RE` 게이트 추가 — 금액 패턴(`숫자원`) 없는 문자는 후보에서 제외. `개설되었습니다`도 스킵 패턴에 추가. launchd의 `/usr/bin/python3` 호환을 위해 `str | None` 타입힌트 제거.
- 정리: 간편인증서 실패 기록은 `whooing_failures.json`에서 제거. 커서는 해당 구간 전으로 되감아 수정된 스킵 로직으로 재처리 중.
- 추가 확인: `방*윤님의 우리아이통장 개설` 안내는 새 금액 게이트로 스킵됐으나, 이어진 `입금 1원 계좌개설075` 문자가 입금으로 파싱되어 raw/정합성 보정 루트가 탔다. 앞으로 계좌개설 인증성 1원 거래도 제외하도록 `계좌개설`을 스킵 패턴에 추가.
- 관리자님 확인: 후잉에 잡힌 `이자 1원`은 삭제하지 말고 `기타수익`으로 유지한다.
- 관리자님 지시: 이체/출금 내역 메모에 `방서윤`이 포함되면 후잉 항목명을 `서윤이용돈`으로 처리한다. `state/whooing_merchant_map.json` contains에 `방서윤``아기용품 ← {carrier}`, item=`서윤이용돈` 추가.
- 12:35 카카오뱅크 잔액 재확인: SMS 최신 잔액 1,147,570원, 후잉 `카카오뱅크(효원)` 잔액 1,147,570원으로 일치. `state/whooing_balance_alerts.json`의 stale diff(-200,000)는 0으로 갱신.
@@ -0,0 +1,16 @@
- 현대카드 승인 가맹점 `(주)카카오`는 관리자님 지정에 따라 앞으로 `교통비 ← 현대신용(효원)`, item `대리비`로 자동 분류하도록 `state/whooing_merchant_map.json`에 추가했다. 트리거: 2026-05-09 33,000원 건이 기타비용으로 들어간 것.
- 관리자님 정정: 현대카드 `(주)카카오`는 항상 대리비가 아니라 **야간(22:00~06:00 KST)** 결제만 `교통비 / 대리비`로 처리. `state/whooing_merchant_map.json`의 상시 contains 룰을 제거하고, `state/whooing_overrides.json`에 00:00~06:00 / 22:00~23:59 두 룰로 분리 추가했다. 낮 시간대 `(주)카카오`는 fallback `기타비용`으로 남는다.
- 관리자님 재정정: 현대카드 `(주)카카오` 대리비 야간 기준을 **20:00~06:00 KST**로 확대했다. `state/whooing_overrides.json`의 22~24 룰을 20~24 룰로 변경.
- 관리자님 재정정: 현대카드 `(주)카카오` 대리비 야간 기준을 **18:00~06:00 KST**로 확대했다. `state/whooing_overrides.json`의 20~24 룰을 18~24 룰로 변경.
- 관리자님 지정: `카카오T일`, `카카오T일반` 가맹점은 `교통비 ← 결제수단`, item `택시비`로 자동 분류하도록 `state/whooing_merchant_map.json`에 추가했다. 기존 `카카오T` 일반 룰보다 먼저 매칭되게 순서 배치.
- 관리자님 지정: 매월 13일 카카오뱅크 `김민지` 20,000원 이체는 `회비 ← 카카오뱅크(효원)`, item `외가회비`로 자동 분류하도록 `state/whooing_overrides.json`에 추가했다. 날짜는 13일 exact, 금액 20,000원 엄격 매칭.
- 관리자님 지정: 가맹점명에 `석유`, `주유소`, `주유`가 들어가는 실제 주유 결제는 `차량유지비 ← 결제수단`, item `주유비`로 자동 분류. 주유소 150,000원 선승인/승인취소는 후잉에 기록하지 않도록 `whooing_sync.py`에 skip 로직을 추가했다.
- 관리자님 확인: 2026-05-10 `남선석유` 주유 관련 기존 오분류/선승인 건은 관리자님이 후잉에서 수동 처리 완료. 앞으로만 적용: 주유 키워드 실제 결제는 `차량유지비/주유비`, 150,000원 선승인·취소는 스킵.
@@ -0,0 +1,46 @@
# Session: 2026-05-11 14:16:46 GMT+9
- **Session Key**: agent:budget:telegram:direct:8443122995
- **Session ID**: c3d84e01-f922-4318-96ed-4604b053ae02
- **Source**: telegram
## Conversation Summary
user: 카카오뱅크에 캐시백 으로 들어오면 기타수익 아이템은 은행이자 로 넣어줘
assistant: 관리자님, 반영했습니다.
- 카카오뱅크 입금 메모에 `캐시백` 포함 시
- 후잉 분개: `카카오뱅크(효원) ← 기타수익`
- item: `은행이자`
JSON/파이썬 문법 확인했고, 샘플 적용도 확인했습니다.
[답변완료]
user: 최근 항목 후잉에 넣어줘
assistant: 관리자님, 확인했습니다.
최근 동기화 기준 이후 새 결제/입출금 문자는 없어서 후잉에 추가로 넣을 항목이 없습니다.
마지막 확인 기준: `2026-05-11 11:00`
[답변완료]
user: 카카오뱅크 잔액 맞나 확인해
assistant: 관리자님, 맞습니다.
- 카카오뱅크 SMS 잔액: **925,715원**
- 후잉 `카카오뱅크(효원)` 잔액: **925,715원**
- 차이: **0원**
아까 캐시백 345원도 후잉에 반영돼서 현재 일치합니다.
[답변완료]
user: 신한은행 [Web발신]
신한05/11 12:17
110-521-827261
출금 20
잔액 824,450
SMS110***82726 이렇게 오는건 그냥 잡비 처리해줘
assistant: 관리자님, 처리했습니다.
- 방금 신한은행 `출금 20원` 건 수동 등록 완료
`기타비용 ← 신한은행(효원)` / item `잡비`
- 앞으로 신한은행 메모가 `SMS110***82726` 같은 형식이면 자동으로 `잡비` 처리되게 룰도 추가했습니다.
- 신한은행 후잉 잔액도 **824,450원**으로 SMS 잔액과 맞습니다.
[답변완료]
@@ -0,0 +1,6 @@
# 2026-05-11
- 실수: 관리자님이 현대카드 `ktIOT자동이` 5,500원 문자를 보내며 "이것도 차량유지비야"라고 한 것을 수동 등록 요청으로 오해해 후잉에 먼저 등록했다. 관리자님 의도는 사전 분류 힌트였음.
- 교훈: 결제문자+분류 설명만으로는 수동 등록하지 않는다. "등록해줘/처리해줘"처럼 명시적 요청이 있을 때만 후잉에 직접 전송한다. 자동분류 힌트로만 반영하거나 필요 시 확인 질문.
- 조치: `state/whooing_merchant_map.json``ktIOT자동이 → 차량유지비` 자동 매핑은 유지(관리자님 정정). AGENTS.md 레드라인에 선등록 금지 규칙 추가.
- 조치: 잘못 수동 등록한 후잉 `entry_id=1167616` (`2026-05-11 ktIOT자동이 5,500원 차량유지비 ← 현대신용(효원)`)은 OpenAPI DELETE로 삭제 완료. 삭제 후 2026-05-11 entries 조회에서 target_exists=false 확인.
@@ -0,0 +1,15 @@
## 14:17 교육비 자동분류 룰
- 관리자님 요청: 항목/가맹점명에 `교육`, `학원`, `학교`가 들어가면 교육비로 처리.
- `state/whooing_merchant_map.json` contains 룰에 3개 키워드 추가.
- 후잉 비용 계정에 `교육비`가 없어 `left: 지식,문화`, `item: 교육비`로 기록하도록 설정.
## 14:20 은행출금 카드대금 납부 룰
- 관리자님 문의로 확인: 은행계좌에서 카드대금 빠지는 건 별도 매핑이 없었음.
- `state/whooing_overrides.json`에 withdrawal + merchant_contains 카드사명 룰 추가.
- 처리 방향: `신한신용(효원)/현대신용(효원)/삼성신용(효원)/하나체크(효원) ← {출금 은행계정}`, item은 각 `카드대금`.
## 22:45 카드대금 납부와 카드 SMS 누적사용액 보정
- 관리자님 지적: 은행계좌에서 카드대금 납부가 빠지면 후잉 카드부채는 감소하지만, 카드사 SMS 누적사용액/잔액은 상환 감소분을 별도 반영해 보내지 않아 후잉 잔액 정합성 알림이 오탐될 수 있음.
- `whooing_sync.py` 수정: `withdrawal` SMS가 `카드부채 ← 은행계좌`로 structured 처리되면 카드부채 계정별 `liability_payment_offsets`에 상환액을 누적.
- 카드 부채 정합성 체크 시 `후잉 실제 카드잔액 + 카드대금 보정치`를 SMS 누적사용액과 비교하도록 변경. 알림에는 실제 후잉값과 보정치를 함께 표시.
@@ -0,0 +1,78 @@
# Session: 2026-05-14 18:51:29 GMT+9
- **Session Key**: agent:budget:telegram:direct:8443122995
- **Session ID**: a197c33d-2e89-4918-8f4e-f35c103a0e47
- **Source**: telegram
## Conversation Summary
user: 항목에 교육 학원 학교 이런거 들어가면 교육비로 처리해줘
assistant: 처리했습니다, 관리자님.
- `교육` / `학원` / `학교` 포함 시 자동분류 추가
- 후잉 계정과목에 `교육비` 비용계정은 없어서
`지식,문화 ← 결제수단`, 항목명은 `교육비`로 들어가게 설정했습니다.
- JSON/계정명 검증도 통과했습니다.
[답변완료]
user: 지식, 문화 / 아이템 교육비
assistant: 네, 관리자님. 그렇게 반영돼 있습니다.
`교육/학원/학교` 포함 시:
- 비용계정: `지식,문화`
- 아이템: `교육비`
[답변완료]
user: 은행계좌에서 카드대금 빠지는것도 매핑 돼 있나?
assistant: 확인해보니 **아직 별도 매핑은 없었습니다.**
그 상태면 은행 출금 문자로 들어온 카드대금이 `기타비용`으로 빠질 위험이 있어서, 방금 룰 추가했습니다.
앞으로 은행 출금 메모에 카드사명이 들어오면:
- `신한카드``신한신용(효원) ← 출금은행`
- `현대카드``현대신용(효원) ← 출금은행`
- `삼성카드``삼성신용(효원) ← 출금은행`
- `하나카드``하나체크(효원) ← 출금은행`
즉 비용 처리하지 않고 **카드 부채 상환**으로 잡히게 했습니다.
[답변완료]
user: 카드부채상환하면 카드잔액에서 차감해줘
assistant: 네, 관리자님. 지금 설정이 그렇게 되어 있습니다.
후잉 구조상 카드대금 납부는:
`카드부채계정 ← 은행계좌`
로 넣어야 카드 부채가 차감됩니다.
방금 추가한 룰도 `left`를 카드계정으로 잡아둬서 카드잔액에서 빠지는 방향입니다.
예:
`신한신용(효원) ← 신한은행(효원)`
[답변완료]
user: 응 그런데 sms에서는 카드잔액 감소된게 안와서 sms잔액이랑 후잉잔액이 차이가 생기거든 이해했어?
assistant: 네, 이해했습니다. 이건 정합성 체크 쪽 이슈라서 룰만으로 끝내면 안 됩니다. 잠깐 확인해서 카드대금 납부 때 잔액 차이를 정상 처리하도록 맞춰둘게요.
assistant: 네, 정확히 이해했습니다.
문제는 이거예요:
- 은행 SMS: 카드대금 출금 → 후잉에는 `카드부채 감소`로 기록
- 카드 SMS: 상환으로 줄어든 카드잔액/누적사용액을 따로 안 보내줌
- 그래서 후잉 카드잔액만 줄고, SMS 기준값은 그대로라 정합성 알림이 오탐될 수 있음
방금 수정했습니다.
앞으로 카드대금 납부가 잡히면:
1. 후잉에는 그대로 `카드부채 ← 은행계좌`로 반영
2. 정합성 체크에서는 그 납부액을 **카드대금 보정치**로 기억
3. 카드 SMS 비교 시 `후잉 실제 카드잔액 + 보정치`로 비교
문법 검증도 통과했습니다.
[답변완료]
user: 굿
assistant: 좋습니다, 관리자님. 카드대금 쪽은 이제 오탐 줄어들 겁니다.
[답변완료]
@@ -0,0 +1,4 @@
- 현대카드 알림이 SMS `+8215776200`에서 RCS `15776200@botplatform.maapservice.com`(chat_id 76)으로 들어오며 자동 동기화에서 누락됨. `state/whooing_account_map.json`에 RCS 식별자를 `hyundai_card`, confirmed=true로 추가했고 `state/whooing_chat_ids.json` 캐시도 갱신됨. 누락분 2건 수동 등록 완료: 2026-05-13 19:39 쿠팡 27,500원, 2026-05-14 18:50 쿠팡 39,500원 (`생활용품 ← 현대신용(효원)`).
- 현대신용(효원)과 현대카드 SMS 누적액 300원 차이는 문자메시지 이용료 알림 미수신분으로 확인. 2026-05-14 `문자메시지 이용료` 300원을 `주거,통신 ← 현대신용(효원)`으로 수동 등록해 SMS 누적 713,086원과 일치시켰다.
- 현대카드 문자메시지 이용료는 별도 승인 알림 없이 누적금액에만 반영될 수 있어 `whooing_sync.py` 잔액 정합성 체크에 자동보정 추가. 조건: carrier=`hyundai_card`, liability, 후잉(카드대금 offset 반영 후)이 SMS 누적보다 정확히 300원 적음(diff=-300), `last_sms_fee_month`가 이번 달이 아님. 처리: `주거,통신 ← 현대신용(효원)`, item `문자메시지 이용료`, 300원. 월 1회 중복 방지. 2026-05분은 이미 수동 등록했으므로 `state/whooing_balance_alerts.json``last_sms_fee_month: 2026-05` 표시.
@@ -0,0 +1,3 @@
# 2026-05-16
- 현대카드 2026-05-15 기준 누적액 차이 31,100원은 라이나생명 보험료 SMS 익일 지연으로 확인. `의료,건강,보험 ← 현대신용(효원)` 31,100원, item=보험료로 수동 보정 등록 완료.
- 관리자님 지시: 현대카드 누적액 대비 후잉 차이 31,100원이 매월 발생하면 라이나생명 보험료 SMS 익일 지연 패턴으로 보고 월 1회 자동 보정. `whooing_sync.py`에 diff=-31,100 / carrier=hyundai_card 조건으로 `의료,건강,보험 ← 현대신용(효원)`, item=보험료 자동 분개 추가. 2026-05는 수동 보정 완료라 `last_hyundai_insurance_month=2026-05`로 표시.
@@ -0,0 +1,2 @@
# 2026-05-17
- 라이나생명 현대카드 보험료 31,100원은 결제 당일 카드 누적사용액에는 반영되지만 SMS가 하루 늦게 도착하는 패턴으로 확인. 월 1회 자동 보정 후 뒤늦게 온 `라이나생명 31,100원` SMS는 중복 방지를 위해 skip 처리하도록 `whooing_sync.py`에 예외 추가.
@@ -0,0 +1,13 @@
# Session: 2026-05-19 14:26:04 GMT+9
- **Session Key**: agent:budget:telegram:direct:8443122995
- **Session ID**: 2c2ec5f3-be66-45e6-a757-682ca6862873
- **Source**: telegram
## Conversation Summary
user: 안녕?
assistant: 안녕하세요, 관리자님. 골디 깨어있습니다 📒
가계부 관련해서 필요하신 것 말씀해주세요.
[답변완료]
@@ -0,0 +1,7 @@
- 관리자님 지시에 따라 하나은행 출금 메모에 계좌번호 `29391039692625`가 포함되는 `하나청약(효원) ← 하나은행(효원)` 자산이체의 후잉 항목명을 `하나청약 이체`에서 `주택청약`으로 변경했다. `state/whooing_overrides.json` 규칙은 매 동기화 실행 시 다시 로드되므로 launchd 재기동은 필요 없다.
- 05:00 월간 결산 cron 지시문이 오래된 수동 처리 방식으로 남아 있어 레이 `securities_balance` envelope을 먼저 `processed/`로 이동하고 실제 후잉 reconcile은 건너뛰는 문제를 확인했다. 2026-06-01 레이 합계 `173,195,665원`과 기존 후잉 `증권(효원)` `116,514,580원`의 차액 `56,681,085원``증권(효원) ← 주식평가수익`으로 수동 분개했고, API로 잔액 일치를 검증했다. cron 지시문은 `monthly_settlement.py` 단일 실행으로 정리하고, `inbox_handler.py --dry-run`은 envelope 이동·state 저장을 하지 않도록 보강했다.
- 관리자님 요청으로 증권 잔액 교정 후 2026년 5월 월간 결산을 다시 발송했다. 재실행 시 inbox 추가 처리·실패는 0건이었고, 교정된 결산 결과는 순자산 `+56,497,757원`, 메일+텔레그램 전송 완료로 확인했다.
- 가희 잔액 자동 폴링이 2026-06-01 09:04 KST 매너콜 안내 문자의 `오전 09`를 잔액으로 오인해 `가희주머니``23,589,029원`에서 `9원`으로 감소 분개한 문제를 확인했다. 잘못된 감소분 `23,589,020원`은 기존 오분류와 동일한 `기타비용 ← 가희주머니` 방향에 음수 금액으로 상쇄했고, API에서 `23,589,029원` 복구를 검증했다. `gahee_reminder.py` 파서는 콜론 없는 공백 구분 입력은 천 단위 콤마가 있을 때만 허용하고, 현금성 계좌 라벨 allowlist(`국민`, `국민(청약)`, `신한`, `기업`, `하나`, `하나(보험)`, `카카오뱅크`)에 있는 값만 반영하도록 보강했다.
- 관리자님 지시에 따라 매월 1일 하나은행 `서윤이주식` 150,000원 출금은 `아기용품 ← 하나은행(효원)`, item=`서윤이용돈`으로 분류하도록 `state/whooing_overrides.json` 우선 규칙을 추가했다. `서윤이용돈`은 후잉 비용 계정이 아니라 아이템명이며, 비용 계정은 기존 정책대로 `아기용품`을 사용한다. 2026-06-01 이미 `기타비용`으로 들어간 건은 음수 상쇄 후 `아기용품 / 서윤이용돈`으로 재분개했고, 두 POST 모두 후잉 `done` 응답을 확인했다.
- 관리자님 정정으로 후잉 `accounts.json`을 직접 조회한 결과 비용 계정 `서윤이용돈`이 실제 존재하고 로컬 `state/whooing_accounts.json`만 오래되어 누락된 상태임을 확인했다. 로컬 차트에 계정을 추가하고, 매월 1일 하나은행 `서윤이주식` 150,000원 우선 규칙과 기존 `방서윤` merchant 매핑을 모두 `서윤이용돈 ← 하나은행(효원)` 비용계정으로 변경했다. 앞서 잘못 재분개한 `아기용품` 150,000원은 음수 상쇄 후 `서윤이용돈`으로 다시 옮겼고, 두 POST 모두 후잉 `done` 응답을 확인했다.
- 관리자님 지시에 따라 카카오뱅크 출금 메모에 `동행복권`이 포함되면 `여가,유흥 ← 카카오뱅크(효원)`, item=`복권`으로 자동 분류하도록 `state/whooing_merchant_map.json` contains 규칙을 추가했다. 추가 요청에 따라 2026-05-07 `동행복권_방효원` 20,000원 과거 `기타비용` 오분류도 음수 상쇄 후 `여가,유흥 / 복권`으로 재분개했고, 두 POST 모두 후잉 `done` 응답을 확인했다.