Skip to content

fix: ホーム/ルートでセッションが無くてもshpoolを起動できるようにする#3

Merged
uzulla merged 2 commits into
mainfrom
fix/launch-when-no-sessions-at-home
Jun 5, 2026
Merged

fix: ホーム/ルートでセッションが無くてもshpoolを起動できるようにする#3
uzulla merged 2 commits into
mainfrom
fix/launch-when-no-sessions-at-home

Conversation

@uzulla

@uzulla uzulla commented Jun 5, 2026

Copy link
Copy Markdown
Owner

背景

ホームディレクトリ ~(およびルート /)でセッションが1つも無いとき、shp が次のように起動できず行き止まりになっていた。

$ shp
No shpool sessions found.

プロジェクトディレクトリではセッションが無くても1件ピッカーから attach/create できるのに、ホーム/ルートだけ何もせず終了していた。session.FromCwd() がホーム自身・ルートでは意図的に空文字を返すため、cwdName == "" && len(sessions) == 0 の分岐に落ちていたのが原因。

変更

  • internal/session/name.go: FallbackName() を追加。フルパス由来(home プレフィックスを剥がさない)で名前を生成するため ~ (/home/developer) は home.developer になる。FromPath を再利用し命名ルール(ハッシュ付与等)も一貫。フルパスでも空になるルート / のみ "shell" に固定フォールバック。
  • cmd/shp/main.go: 「No shpool sessions found.」で終了していたブロックを、FallbackName()cwdName を埋める処理に置き換え。既存セッションがある場合は従来どおりリスト表示。
  • internal/session/name_test.go: フルパス由来になること・ルートで shell になることのテストを追加。

挙動

場所 既存セッション 変更前 変更後
~ なし 「No sessions found」で終了 home.developer を作成/attach
~ あり セッション一覧 同左(変更なし)
/ なし 終了 shell を作成/attach

行き止まりを消すため、フォールバック名での1件ピッカー(Enterで起動)とした。これはプロジェクトディレクトリでセッションが無いときの既存挙動と一貫させたもの。

テスト

go build ./... / go test ./... / go vet ./... すべてパス。

Summary by CodeRabbit

  • Bug Fixes

    • ホームやルートでセッション名が空になるケースで起動やピッカーが停止する問題を修正し、フォールバック名を使って常に進行できるようにしました。
  • Documentation

    • セッション名導出とフォールバック動作、ピッカーの表示/終了挙動を明確化しました。
  • Tests

    • フォールバック名と cwd 起因の導出挙動を検証するテストを追加しました。

@coderabbitai

coderabbitai Bot commented Jun 5, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 20a9bbaa-744b-4b55-81c8-746dc115ffb3

📥 Commits

Reviewing files that changed from the base of the PR and between fa10dd2 and c1a1615.

📒 Files selected for processing (4)
  • DEV.md
  • cmd/shp/main.go
  • internal/session/name.go
  • internal/session/name_test.go

Walkthrough

このPRは、カレントディレクトリ由来のセッション名が空になる場合(ホームディレクトリやファイルシステムルートなど)にフォールバック名を導出する FallbackName()FromCwdOrFallback() を追加し、CLI(--print-name/-f)と TUI ピッカーでそれらを使用するよう統合した。ドキュメントとテストも更新されている。

Changes

セッション名フォールバック

Layer / File(s) Summary
フォールバック名導出関数の実装
internal/session/name.go
FromCwdOrFallback()FallbackName() を追加。FromCwdOrFallback()FromCwd() の結果が空なら FallbackName() を返す。FallbackName()os.Getwd() で cwd を取得して FromPath(cwd, "") を使い、空なら "shell" を返す。
フォールバック関数のテスト
internal/session/name_test.go
インポート更新とともに FallbackName() の挙動(cwd に対する FromPath 一致、/ での "shell")と FromCwdOrFallback() のホーム/ホーム外ケースを検証するテストを追加。
CLI/TUI 統合
cmd/shp/main.go
usage 文言を更新し、--print-nameshp -frunPicker のデフォルト選択名生成を session.FromCwdOrFallback() に切り替え。runPicker の「cwdName が空かつ一覧 0 件で終了」分岐を削除し、フォールバック前提で tui.SelectWithDefaultshpool.Attach を進める構造に変更。
ドキュメント更新
DEV.md
セッション名生成ルール、picker の既定候補方針、shpool list に関するエラー処理表をフォールバック挙動に合わせて更新。

Sequence Diagram

sequenceDiagram
  participant CLI as shp (main)
  participant Session as internal/session
  participant OS as os
  participant TUI as tui.SelectWithDefault
  participant Shpool as shpool.Attach

  CLI->>Session: FromCwdOrFallback()
  Session->>Session: FromCwd()
  alt FromCwd returns empty
    Session->>OS: os.Getwd()
    OS-->>Session: cwd path
    Session->>Session: FromPath(cwd, "")
    alt FromPath empty
      Session-->>Session: return "shell"
    else FromPath non-empty
      Session-->>Session: return fallback name
    end
  else FromCwd returns name
    Session-->>CLI: return cwd-derived name
  end
  CLI->>TUI: SelectWithDefault(defaultName)
  TUI->>Shpool: Attach(selectedName)
  Shpool-->>CLI: attached / exit
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 30.77% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed プルリクエストのタイトルは、ホーム/ルートディレクトリでセッションが無い場合でもshpoolを起動できるようにするという、変更セットの主要な目的を明確に説明している。
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/launch-when-no-sessions-at-home

Comment @coderabbitai help to get the list of available commands and usage tips.

レビュー指摘(Codex)対応:
- FromCwdOrFallback() を追加し、picker/-f/--print-name を共通化
- ホーム/ルートで -f がエラー・--print-name が空になる不一致を解消
- DEV.md を新挙動に合わせて更新
- ホームでの実トリガ(FromCwd()=="")を直接押さえるテストを追加
@uzulla uzulla merged commit e9dd861 into main Jun 5, 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