v2.14.0: 확인하지 않은 것을 보고하던 세 곳을 고친다 - #32
Merged
Merged
Conversation
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Task 1이 이미 값을 맞춰놨으므로 새 테스트는 추가 시점에 통과한다. 그래도 남기는 이유는 "우연히 같음"을 "구조적으로 같음"으로 바꾸는 것이 이 커밋의 목적이기 때문이다. test_client_domain_and_meta_env_cannot_diverge는 보고한 env와 실제 접속 도메인을 직접 맞대어 그 불변식을 고정한다. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Task 1을 되돌려 새 테스트가 실제로 버그를 재현하는지 확인했다: 두 파일 모두 us_exchanges-mock.json으로 나와 실패한다. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
config show / auth status는 활성 프로필을 서술하므로 유효 도메인을 보여준다. config profiles는 다르게 다룬다 — KIWOOM_DOMAIN이 모든 프로필을 덮으므로 행마다 유효 도메인을 계산하면 전부 같은 값이 되어 설정 정보가 사라진다. 설정값은 유지하고 domain_override를 추가했다. BREAKING: config show / auth status의 data.domain이 KIWOOM_DOMAIN 설정 시 값이 달라진다. config profiles에 domain_override 키가 추가된다. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
계획은 --force가 확인을 건너뛰고 revoked:true를 보고하게 했으나, 그것은 이 릴리스가 없애려는 결함(확인하지 않은 것을 성공이라 보고)을 그대로 재도입한다. 대신 항상 확인하고, --force일 때는 revoked:false로 남긴 채 로컬 정리만 진행한다. BREAKING: 상단 폐기 실패 시 exit 2로 끝나고 로컬 토큰을 지우지 않는다. revoke_token(force=False) 시그니처와 반환 dict의 revoked 키가 추가됐다. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
dashboard는 문서화된 3상태를 유지한다 — 키 없음=시도 안 함(토큰 없음), null=시도했고 실패. partial_failures에는 후자만 들어간다. _run_unified은 손대지 않았다: json 모드에서는 _unified_structured가 먼저 처리하고 return하므로 그 경로는 table/csv 전용이고, meta 키가 갈 곳이 없다. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
문서 예제는 HOME을 임시 디렉터리로 잡고 keyring을 스텁해 검증했다. 실제 ~/.kiwoom/config.toml과 멱등성 원장의 md5는 전후 동일하다. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
전수 반증(15개 컴포넌트를 하나씩 되돌려 잡히는지 확인)에서 4건이 테스트 0개로 나왔다 — 스위트는 전부 초록이었다. 이번 릴리스가 없애려는 결함과 같은 모양이라(검증하지 않은 것을 검증했다고 여김) 그대로 둘 수 없었다. - 루트 stash + build_meta 읽기: config set domain prod가 파일을 바꾼 뒤 내는 envelope의 meta.env가 '이번 실행이 돈 환경'인지 고정 - KiwoomClient의 resolved_profile 읽기: KIWOOM_PROFILE만 있고 -p가 없을 때 원시 플래그(None)를 읽으면 self.profile이 meta.profile과 갈린다 - config show 표 모드: json만 고치면 정작 눈으로 보는 사용자가 계속 틀린 도메인을 본다 - logout --force: revoked를 하드코딩 True로 되돌려도 아무도 안 잡았다 재실행 결과 15/15 컴포넌트가 최소 1개의 잡는 테스트를 갖는다. .gitignore의 .understand-anything/ 항목도 함께 넣는다. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
공개 배포를 앞두고 한 감사에서 나온 결함들입니다. 전부 한 가지 모양이었습니다:
확인하지 않은 것을 확인했다고 보고한다.
위험한 쪽은 눈에 띄게 틀린 출력이 아니라 그럴듯한 출력이었기 때문에 지금까지
드러나지 않았습니다. 성공 메시지, 그럴듯한 숫자, exit 0.
고친 것
resolve_profile()이 자기 docstring이 선언한 우선순위를 구현하지 않음 —--profile은 호출자가 넘겨줄 때만 반영-p축을 놓쳐 모의에서 학습한 거래소가 실주문stex_tp로 나갈 수 있었음us_exchanges2-*로config show/auth statusKIWOOM_DOMAIN설정 시 config.toml 값을 출력 — "모의"를 확인하고 실거래 주문 가능auth logoutrevoked:true보고 후 로컬 토큰 삭제 → 서버에 살아 있는 토큰을 재폐기 불가"us": null이 "계좌 없음"인지 "조회 실패"인지 구분 불가meta.partial_failures가 레그 이름과 오류 코드를 알림근본 원인은 하나였습니다
이 버그는 세 번째 발견입니다. v2.5 리뷰가
streaming.py/watch.py에서 잡아호출부별로 고쳤고, v2.13.0이 거래소 캐시에서 잡아
KIWOOM_DOMAIN축만 고쳤습니다.두 번의 호출부 수정이 각각 결함 자체는 살려 뒀습니다. 그래서 이번에는
config.resolve_profile()자체를 고쳤습니다.v2.13.0의 수정이 미완으로 나간 정확한 이유도 확인했습니다: 기존 테스트가
KIWOOM_DOMAIN축만 몰았고,config.py의 env 단락이resolve_profile보다 먼저반환하므로
detect.py가 profile을 넘기든 안 넘기든 똑같이 통과했습니다.새 테스트는 Task 1을 되돌려 실제로 버그를 재현하는지 확인했습니다.
검증
15개 컴포넌트를 하나씩 되돌려 잡는 테스트가 있는지 전수 확인했습니다.
첫 실행에서 4건이 테스트 0개로 나왔습니다 — 스위트는 전부 초록이었는데도요.
이번 릴리스가 없애려는 결함과 같은 모양이라 그대로 둘 수 없어 각각 테스트를
추가했고, 재실행 결과 15/15가 최소 1개의 잡는 테스트를 갖습니다.
main과 동일함을 고정 (움직이면 기록된 키가 안 보이게되고
send_order가 실주문을 재전송함)HOME을 임시 디렉터리로 잡고 keyring을 스텁해 검증 — 실제~/.kiwoom/config.toml과 원장의 md5가 전후 동일Breaking
config show/auth status의data.domain이KIWOOM_DOMAIN설정 시 다른 값을냅니다. 이것이 수정의 요지입니다 — 종전 값이 틀린 값이었습니다.
auth logout이 상단 폐기 실패 시 exit 2로 끝나고 로컬 토큰을 지우지 않습니다.KiwoomClient.revoke_token()이force매개변수를 받고 반환 dict에revoked추가.us_exchanges-*.json→us_exchanges2-*.json(마이그레이션 없음,최악의 비용은
usa10098재조회 1회).config profiles -f json의 각 행에domain_override추가.설계 메모
계획은
--force가 폐기 확인을 건너뛰고revoked:true를 보고하게 했으나, 그것은이 릴리스가 없애려는 결함을
--force경로에 그대로 재도입합니다. 대신 항상확인하고,
--force일 때는revoked:false로 남긴 채 로컬 정리만 진행합니다.config profiles는 다른 표시 명령과 다르게 다룹니다.KIWOOM_DOMAIN이 모든프로필을 덮으므로 행마다 유효 도메인을 계산하면 전부 같은 값이 되어 설정 정보가
사라집니다. 설정값은 유지하고
domain_override를 따로 알립니다. 이 비대칭은의도적입니다.
🤖 Generated with Claude Code