Skip to content

feat: 테마 5종 + 설치 시 갱신 주기 입력 + 세션 캐시 격리 버그 수정#1

Merged
ictechgy merged 6 commits into
mainfrom
feature/themes-interval-cache-isolation
Jun 3, 2026
Merged

feat: 테마 5종 + 설치 시 갱신 주기 입력 + 세션 캐시 격리 버그 수정#1
ictechgy merged 6 commits into
mainfrom
feature/themes-interval-cache-isolation

Conversation

@ictechgy
Copy link
Copy Markdown
Owner

@ictechgy ictechgy commented Jun 3, 2026

개요

설치 사용자가 테마를 고르고 갱신 주기를 입력할 수 있게 하고, 여러 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 프리셋.
  • config.toml theme = "name" 이름 참조, 해석 우선순위 사용자 키 > 프리셋 > calm.
  • render.rs/theme.rs 무변경(필드 구체값 유지 → 다운스트림 0 변경).
  • 명령: understatus install --theme <name> / 대화형 / understatus theme <name>(전환) / understatus themes(목록).
  • COLOR-ONCE(색은 글리프에만, 숫자 무색) 유지. 모든 글리프 틴트 #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_counterssessions/<살균_session_id>/로 격리.
  • 증상 해결: 다른 터미널의 OMC HUD 값(예: ctx 85%)이 현재 터미널 체인 부분에 새던 문제.
  • battery는 머신 전역 유지. session_id 살균(경로 traversal 차단) + FNV-1a 결정론적 해시.

4. 보안 (fix(security))

  • read_branch_from_git_dir: stdin workspace.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.
  • 5개 테마 실제 렌더 스모크 + 세션 격리 + traversal 차단 + CLI 서브커맨드 실증.
  • 하위호환: theme 키 없으면 calm = 현행 동일, 단일 세션 캐시 동작 동일.

호환성/주의

  • macOS 전용 불변. settings.json 백업/멱등/uninstall 라운드트립 안전 유지.
  • pulse_style="bold"는 현재 no-op이라 전 테마 calm 호흡(향후 실제 bold 펄스는 별도).

🤖 Generated with Claude Code

ictechgy and others added 6 commits June 4, 2026 00:59
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>
@ictechgy ictechgy merged commit b554947 into main Jun 3, 2026
1 check passed
@ictechgy ictechgy deleted the feature/themes-interval-cache-isolation branch June 3, 2026 16:33
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