Skip to content

[Backlog] lib/token.sh: _cmd_rotate に [ -t 0 ] tty ガードを追加 (stty -echo / stty echo) #52

@ikeisuke

Description

@ikeisuke

背景

サイクル v0.3.1 Unit 001 (tests/token.bats 新設) で lib/token.sh_cmd_rotate / _cmd_delete をテストする過程で、本体に tty ガード欠如の構造的な問題があることが判明した。

現状の問題

lib/token.sh の以下 2 箇所で stty -echo / stty echo[ -t 0 ] のガードなしで呼んでいる:

  • _cmd_rotate (L169 stty -echo, L171 stty echo)
  • _cmd_deletestty を直接呼んでいないが、read _yn 前に対話入力の副作用があり、将来同型のパターンが追加された際に同じ問題が発生する可能性がある

_cmd_add[ -t 0 ] でガードされている (L128, L130) が、rotate 側は未ガード。非 tty 環境 (bats, CI, パイプ経由など) で実行すると stty: stdin isn't a terminal のエラーが出て set -eu により rotate 処理全体が stty 直前で停止する。

Unit 001 では stty を PATH shim で no-op 化することで回避したが、本体の堅牢性向上として _cmd_rotate にも _cmd_add と同じ [ -t 0 ] ガードを追加すべき。

対象ファイル/箇所

  • lib/token.sh L168-L172 周辺 (_cmd_rotatestty -echo / read _token / stty echo ブロック)

推奨対応

_cmd_add と同じパターンでガードを追加:

printf '[%s] Enter new token: ' "$_name"
if [ -t 0 ]; then stty -echo; fi
read _token
if [ -t 0 ]; then stty echo; echo; fi

想定影響範囲

  • 本体 1 ファイル (lib/token.sh) の修正
  • 既存のインタラクティブ挙動 (tty 環境) は変わらない
  • 非 tty 環境での実行時、stty エラーで停止していた処理が通るようになる (これまで CI から rotate が直接実行される運用はないが、スクリプト経由 / 自動化の観点で堅牢化)

確度区分

confirmed(Unit 001 のテスト実装中に実際に観測した挙動)

参照

  • サイクル v0.3.1 Unit 001: .aidlc/cycles/v0.3.1/plans/unit-001-plan.md(承認前提および境界外バックログ記載)
  • 観測経路: tests/token.bats の R1 / D1 ケースで PATH shim による stty 差し替えを使った

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions