feat: 테마 5종 + 설치 시 갱신 주기 입력 + 세션 캐시 격리 버그 수정#1
Merged
Conversation
stdin의 workspace.git_worktree 값을 검증 없이 <경로>/.git/HEAD로 읽어 악의적 입력으로 임의 위치 파일 첫 줄을 탐색할 수 있던 문제를 수정한다. - is_safe_base_path: '..' 컴포넌트나 빈 경로 거부 - canonicalize로 해소한 실제 경로가 .git/HEAD로 끝나는지 검증(심볼릭 차단) - 정상 워크트리 동작·기존 테스트 4종 보존, traversal 거부 테스트 2종 추가 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
테마(themes.rs 신규): calm(기본)/mono/vivid/ember/emoji 프리셋. config.toml의 theme="name" 이름 참조, 해석 우선순위 사용자키>프리셋>calm. render.rs/theme.rs 무변경(다운스트림 0 변경). understatus theme <name> / theme / themes 서브커맨드 추가. 설치 주기: install --interval N / --theme NAME / --yes, TTY면 미입력 항목 프롬프트(기본 5). 재설치 시 기존 interval 승계(플래그>기존>5), 호흡 불변식 위반 시 경고. 세션 캐시 격리(버그 수정): chain_output/pulse_state/net_counters를 sessions/<살균_session_id>/로 격리해 여러 터미널 동시 사용 시 다른 터미널 값이 OMC 체인 부분에 새던 문제를 해결. battery는 머신 전역 유지. session_id 살균(경로 traversal 차단) + FNV-1a 결정론적 해시. 전체 159 테스트 통과, clippy -D warnings clean. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Themes 섹션(5종 표/글리프 램프/COLOR-ONCE/crit 호흡) - install --interval/--theme/--yes 및 theme/themes 명령 - Configuration에 theme 키 + 세션 캐시 격리 설명 - 설계 스펙(docs/superpowers/specs/) 추가 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- install(): config.toml 기록을 settings.json 교체보다 먼저 수행해 config 실패 시 부분 설치 방지 (Codex+Forge HIGH 합의) - existing_interval: i64→u64 직접 캐스트 제거, >=1 값만 승계(음수 wrap/0 우회 차단) (Codex+Forge HIGH 합의) - set_chain_command/set_refresh_interval: [chain]/[refresh]가 non-table면 조용한 no-op 대신 새 테이블로 교체해 값 기록 보장 (Forge HIGH, 회귀) quad-review-loop round 1/5 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
sanitize_session_key가 비어있지 않은 전부-비허용 입력(예 '../../', '한글')을 모두 'default'로 떨어뜨려 캐시 네임스페이스를 공유하던 격리 약화를 수정. raw가 빈 문자열일 때만 'default', 비어있지 않으면 default-<short_hash(raw)>로 고유 키 부여. (Forge HIGH + Codex 합의) quad-review-loop round 1/5 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
CI의 cargo fmt --check 단계가 실패했다. 기존 코드(render.rs/theme.rs 포함)가 rustfmt 포맷에 맞지 않던 선재 부채와 이번 변경분을 함께 rustfmt로 정렬한다. 포맷 전용 변경으로 로직/동작은 불변(161 테스트·clippy -D warnings 그대로 통과). 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.
개요
설치 사용자가 테마를 고르고 갱신 주기를 입력할 수 있게 하고, 여러 Claude 터미널을 동시에 쓸 때 다른 터미널 값이 statusline에 새던 버그를 수정한다. 설계는 ralplan 합의(Planner→Architect→Critic)로 수립했고(themes 5라운드 / cache 3라운드 APPROVE), 구현 후 verifier·code-reviewer·security-reviewer 3중 검토와 fix 루프를 거쳤다.
변경 내용
1. 테마 5종 (
feat)src/themes.rs:calm(기본)·mono·vivid·ember·emoji프리셋.theme = "name"이름 참조, 해석 우선순위 사용자 키 > 프리셋 > calm.render.rs/theme.rs무변경(필드 구체값 유지 → 다운스트림 0 변경).understatus install --theme <name>/ 대화형 /understatus theme <name>(전환) /understatus themes(목록).#0e1017대비 ≥3:1(WCAG 실측).2. 설치 시 갱신 주기 입력 (
feat)install --interval N+ TTY 프롬프트(둘 다,--yes로 생략), 기본 5.interval_seconds승계(플래그 > 기존 > 5) — 조용한 리셋 방지.pulse_period/interval ≥ 6) 위반 시 경고.3. 세션 캐시 격리 (
fix— 제보된 버그)chain_output/pulse_state/net_counters를sessions/<살균_session_id>/로 격리.4. 보안 (
fix(security))read_branch_from_git_dir: stdinworkspace.git_worktree의..traversal 거부 + canonicalize 심볼릭 링크 검증.검증
cargo test: 159 passed, 0 failed (94 → +65), 모든 명령 rustup~/.cargo/bin/cargo사용.cargo clippy --all-targets -- -D warnings: clean.cargo build --release: green.theme키 없으면 calm = 현행 동일, 단일 세션 캐시 동작 동일.호환성/주의
pulse_style="bold"는 현재 no-op이라 전 테마 calm 호흡(향후 실제 bold 펄스는 별도).🤖 Generated with Claude Code