한 줄 요약
누적분개장의 직접·간접 현금화를 추적하던 실제 journal-indirect-cash-tracing Skill을 대상으로, 일반 경로 추적과 업무별 소멸 예외 판정의 verifier가 다르다는 점을 찾아 두 책임으로 분리하고 하나의 Umbrella 아래 연결했다.
이런 분께 추천
하나의 Skill에 파싱·판정·예외처리·출력 책임이 계속 쌓이는 분
“파일이 크다”가 아니라 실제 실패 원인과 검증 방법을 기준으로 나누고 싶은 분
원본 Skill을 건드리지 않고 백업·복원·fixture·Gate로 안전하게 실험하고 싶은 분
사용량 숫자를 실제 업무 실행 이력으로 오해하지 않고 증거의 한계를 확인하고 싶은 분
Before
기존 Skill은 하나의 실행 스크립트에서 다음 흐름을 처리했다.
분개장 디코딩·파싱
→ 전표 내부 차대 매칭
→ 전표 간 반대분개 연결
→ 현금성계정까지 경로 탐색
→ 시간주차비·내국신용장 특수 소멸 판정
→ BS↔BS AC:AF 배분
→ Excel 생성·대사처음에는 “큰 Skill이므로 나눈다”는 접근도 가능했지만, 크기만으로는 어디를 잘라야 하는지 설명하기 어려웠다. 그래서 실제 소스에서 실패 소유자·verifier·수리 방법이 다른 지점을 찾았다.
사용한 도구
Hermes Agent v0.19.0
W2-learning-guidev1.0.9backup_before_skill_mutation.pyPython 표준 라이브러리
unittestHermes
skill_view,read_file,write_file,patch,terminal
핵심 개념
1. 큰 Skill은 출발점이다
처음부터 폴더 수를 늘리는 것이 목적이 아니라, 반복 실행 중 다른 방식으로 실패하고 다른 방식으로 검증해야 하는 책임을 찾는 것이 먼저였다.
2. 이번 절단선은 verifier 차이였다
일반 현금화 경로 추적은 다음을 검증한다.
경로가 현금성계정에서 끝나는가
날짜가 역행하지 않는가
계정 순환이 없는가
추적금액이 원금액을 초과하지 않는가
업무별 소멸 예외 판정은 다음을 검증한다.
동일 사업장·계정·금액인가
차변과 대변이 반대로 연결되는가
시간주차비의 익월 조건을 만족하는가
내국신용장의 허용기간과 적요 조건을 만족하는가
두 책임은 입력 데이터가 비슷해도 성공을 증명하는 계약이 달랐다.
만든 것
candidate-skills/
├─ journal-noncash-analysis/
│ ├─ SKILL.md
│ └─ scripts/run_analysis.py
├─ journal-cash-path-tracer/
│ ├─ SKILL.md
│ └─ scripts/trace_general.py
├─ journal-extinction-exception-rules/
│ ├─ SKILL.md
│ └─ scripts/apply_exception_rules.py
└─ tests/
├─ fixtures/
│ ├─ direct_and_indirect.json
│ ├─ parking_extinction.json
│ ├─ lc_reversal.json
│ └─ ambiguous_and_invalid.json
├─ test_candidate_circuit.py
└─ verify_gates.pyTree
journal-noncash-analysis
├─ journal-cash-path-tracer
└─ journal-extinction-exception-rulesCircuit
전체 분개장 행
→ 일반 현금화 추적
→ unmatched_target_rows
→ 업무별 소멸 예외 판정
→ 순수 비현금 또는 human_review
→ 금액 보존·중복 소유 검증실행 로그
잘된 점
각 기능을 구현하기 전에 테스트가 예상한 이유로 실패하는 것을 확인했다.
일반 추적:
trace_general.py부재로 RED → 구현 후 GREEN시간주차비: 예외 모듈 부재로 RED → 구현 후 GREEN
내국신용장:
lc_max_days계약 부재로 RED → 구현 후 GREENUmbrella:
run_analysis.py부재로 RED → 구현 후 GREEN
최종 실행:
test_general_trace_classifies_direct_indirect_and_unmatched ... ok
test_lc_rule_requires_reverse_within_configured_days ... ok
test_parking_rule_extinguishes_only_exact_next_month_reversal ... ok
test_umbrella_circuit_preserves_amounts_and_routes_ambiguity ... ok
Ran 4 tests in 0.019s
OK실제 Circuit smoke 결과:
cash: [A1]
exception: [B1]
pure_noncash: [C1]
human_review: [E1]
amounts:
input: 1000.0
cash_classified: 100.0
exception_extinguished: 200.0
pure_noncash: 300.0
human_review: 400.0
amount_conservation_pass: true
duplicates: []막힌 점과 수정
첫 테스트에서
pytest가 설치되어 있지 않아 기능 RED가 아니라 러너 오류가 발생했다.외부 패키지를 설치하지 않고 Python 표준
unittest로 바꿨다.
Before / After
항목
Before
After 후보
책임 구조
한 Skill·한 스크립트에 일반 추적과 예외 규칙 공존
일반 추적과 업무별 예외 판정을 분리
일반 추적 성공 기준
전체 흐름 안에 섞여 있음
현금성계정 종점·날짜·금액·순환 verifier
예외 성공 기준
키워드별 조건문
규칙 ID·기간·사업장·금액·반대차대 verifier
미매칭 처리
후속 로직에 내장
명시적 unmatched_target_rows 계약
복수 후보
자동선택 위험
human_review로 반환
전체 검증
Excel 결과 중심
행 ID 고유성 + 금액 보존 Circuit Gate
원본 보호
직접 수정 위험
보호 원본·immutable 사본·working copy·복원 리허설
안전 증거
protected_source_sha256: 2c4d4b66d2304d5cf6b4b0848556f2920e5bb0dfc0c95d32faf14344e2eb7366
immutable_copy_sha256: 2c4d4b66d2304d5cf6b4b0848556f2920e5bb0dfc0c95d32faf14344e2eb7366
source_immutable_identical: true
restore_rehearsal: PASS원본 Skill은 수정하지 않았고 후보 Skill도 활성 Hermes 프로필에 설치하지 않았다.
배운 점
Skill을 나누는 기준은 크기가 아니라, 같은 입력을 받아도 실패 원인과 통과를 증명하는 verifier가 달라지는가였다.
이 문장은 Station F에서 사용자가 추천 문장 — 분리 기준은 크기가 아니라 verifier 차이였다를 직접 선택해 확정했다.
다음에 다시 쓸 팁
큰 Skill을 보면 파일 수가 아니라 실패 소유자와 verifier부터 적는다.
분리 후보는
input → steps → output → verifier → failure_return카드로 만든다.실제 업무 데이터 대신 비식별 synthetic fixture로 경계를 먼저 증명한다.
후보 파일을 만들기 전에 positive·negative·boundary Proof를 정한다.
원본과 immutable 사본의 tree SHA-256을 마지막 Gate에서 다시 확인한다.
확장 아이디어
부분금액 배분과 다대다 전표를 일반 추적 Skill에 추가
생산 규정에 따라 내국신용장 허용기간을 설정 파일로 분리
예외 규칙별 실행 ID·rule ID·verifier 결과를 기록하는 상세 감사 로그 설계
실제 운영 적용 전 비식별 golden workbook을 이용한 AC:AF 대사 Gate 추가
후보를 설치하려면 별도의 production review와 기존 Skill 호환성 검증 수행
재사용 프롬프트
이 실제 Skill을 원본 수정 없이 학습용 사본으로 복제한 뒤 분석해줘.
크기나 이름으로 나누지 말고, 최근 실패 원인·verifier·수리 방법이 다른 책임을 찾아줘.
각 후보를 input → steps → output → verifier → failure_return 카드로 만들고,
분리 전 positive·negative·boundary fixture와 Tree/Skill/Circuit Gate 를 설계해줘.
후보 생성 전 백업 및 복원 리허설을 수행하고,
마지막에는 보호 원본과 immutable 사본의 SHA-256이 동일한지 검증해줘.마무리 한 문장
Skill을 잘게 만드는 것이 목표가 아니라, 서로 다른 실패를 서로 다른 verifier로 증명하고 다시 안전하게 연결하는 것이 이번 분해의 핵심이었다.