Skip to content

feat: build the portable Claude account wallet - #1

Merged
Bkankim merged 25 commits into
mainfrom
feat/portable-claude-account-wallet
Jul 7, 2026
Merged

feat: build the portable Claude account wallet#1
Bkankim merged 25 commits into
mainfrom
feat/portable-claude-account-wallet

Conversation

@Bkankim

@Bkankim Bkankim commented Jun 29, 2026

Copy link
Copy Markdown
Owner

Product contract

cct remains an explicit, portable Claude account wallet: authenticate each account once with a long-lived setup token, keep the canonical wallet outside Git, and switch accounts on demand from the terminal across macOS, Linux, and WSL2.

Scope

  • Preserve bare, labeled, sticky, and compatibility behavior.
  • Make wallet mutations atomic, mode-600, backed up, and serialized with an ownership-checked dependency-free lock.
  • Add explicit run, remove, rename, offline status, and deterministic doctor commands.
  • Preserve wallet and active state during installation and expand ignore coverage.
  • Document the portable-wallet contract in Korean and English.
  • Add least-privilege macOS and Ubuntu CI using isolated fake fixtures only.

F2-G concurrency hardening

This draft now contains 24 scoped commits. The latest runtime fix closes the remaining wallet-lock ownership and active-state races while preserving the explicit account-selection contract. It serializes affected state transitions, refuses unsafe ownership handoffs, and preserves the current active state when a stale lifecycle action completes.

This follows the earlier runtime, installer, documentation, wallet-hardening, failure-path CI, and ShellCheck compatibility remediations already present in the draft. The two final CI-only follow-ups scope hosted ShellCheck diagnostics to their exact intentional constructs and make the Perl-fallback fixture explicitly bypass the production absolute GNU-timeout resolver; they do not change runtime behavior or test expectations.

RED → GREEN evidence

Each corrected race was first reproduced by a focused regression and then driven green by the minimal remediation. Local validation at the final head passes the clean full suite at 523/523, the inherited-environment full suite at 523/523, the dedicated race suite at 53/53, the final4 suite at 58/58, and the hosted failure-path selectors at 50/50, 20/20, 22/22, 38/38, and 106/106. ShellCheck 0.9 and current ShellCheck, Bash parsing, Zsh parsing, and whitespace checks also pass.

Final hosted validation is green on both macOS and Ubuntu: static checks pass, both complete environment variants pass 523/523 assertions, and the five established failure-path selectors pass 50/50, 20/20, 22/22, 38/38, and 106/106 on each operating system. The dedicated race and final4 suites are covered by the complete suite and remain separately recorded as focused local evidence.

Security and OSS boundary

The canonical wallet stays outside Git. Tests and CI use isolated fake fixtures and do not read or mutate a user wallet. The implementation adds no proxy, daemon, automatic routing, OAuth refresh storage, Keychain requirement, or new runtime dependency.

Rollback

Before merge, close this draft and delete the feature branch. After merge, revert the 24 scoped commits in reverse order if needed. Any local rollout remains deferred until separate release approval.

Bkankim and others added 25 commits June 28, 2026 16:28
이미 열려 있던 터미널은 다른 터미널의 cct <라벨> 전환을 자동으로
따라가지 않는다. cct refresh 가 cct-active 의 활성 라벨을 읽어 현재
셸 env 에 재적용하고, 활성이 없으면 셸의 cct 인증 환경을 해제한다.

- 예약어 목록·도움말·헤더 주석에 refresh 추가
- README(한/영)·CHANGELOG 명령 계약 표에 반영
- test_sticky 에 재적용·해제·사용법 오류 케이스 추가

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@Bkankim
Bkankim merged commit 3343a2b into main Jul 7, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant