コンテンツにスキップ

kabuステーション venue 統合: 未確定事項

Phase 0 出口時点で未確定の事項をまとめる。解消次第、ここに決定事項を転記し、 implementation-plan.md の該当 Q-K 番号に決定事項を書き込む。

# 論点 候補 決定タイミング 状態
Q-K1 PUSH WebSocket 切断後、PUT /register 銘柄リストはサーバ側で保持されるか? (a) 保持される / (b) 保持されない ptal/push.html 確認後 暫定: (b) — デフォルト挙動は「再接続後は常に全件 re-register」で固定(U6)。検証結果に依らないフォールバック
Q-K2 /orders の約定通知は polling と PUSH のどちらか? (a) polling (GET /orders) / (b) PUSH WebSocket OpenAPI 確認後 暫定: (a) polling — kabu WebSocket は登録銘柄の時価のみ。約定は GET /orders polling と推定
Q-K3 kabuステーション本体の早朝強制ログアウト時刻は ptal/howto.html 記載か? 記載あり / 記載なし ptal/howto.html 確認後 未確定 — 実機確認が必要。暫定窓として _invariants-fragment.md §early-morning-logout に「4:00〜9:00 JST 帯の local_app_down を INFO 扱い」と定義(U25)
Q-K4 Exchange enum で市場細分化(東証=1/名証=3/福証=5/札証=6)が必要か? (a) 必要(Phase 1 から) / (b) 不要(Phase 3 で対応) Phase 3 着手時 決定: (b) Phase 1 は KabuStationStock 1 variant のみ(U2)
Q-K5 GET /board が自動 PUSH 登録を発火する仕様(SKILL R6)と RegisterSet 集計の整合 (a) 暗黙 evict / (b) KabuRegisterFullError 投げる Phase 0 出口 決定: (b) — 既存登録 hit なら touch() のみ、新規 + 満杯時は KabuRegisterFullError を投げユーザーに登録解除を促す(U24)
Q-K6 CI demo ジョブが構築不可(Windows 限定)。HTTPXMock での疑似 E2E をどこまで作るか? 最小限 / 完全 mock K8.5 着手時 決定: pytest-httpx + WebSocket mock で全 9 テストファイルを構築。本物 API は CI では叩かない
Q-K7 プロセスメモリ寿命中のトークン保持 プロセス再起動時は毎回 /token 呼び直し Phase 0 出口 決定: プロセス再起動跨ぎは毎回 /token 取得。起動中はメモリに保持 — ファイルキャッシュは作らない
Q-K8 立花の MarketKind::Stock を流用するか、kabu 用に別 variant を作るか? (a) 共有(MarketKind::Stock) / (b) 新設(MarketKind::JPStock K1 着手前 決定: (a) 共有 — 立花も kabu も同じ MarketKind::Stock を使う。東証だけなら区別不要

決定済み

  • Q-K4: Phase 1 は KabuStationStock 1 variant のみ(Phase 3 で市場細分化)
  • Q-K5: fetch_board() で既存 hit なら touch() のみ、新規 + 満杯時は KabuRegisterFullError
  • Q-K6: HTTPXMock + WebSocket mock で全テスト
  • Q-K7: ファイルキャッシュなし、プロセスメモリのみ
  • Q-K8: MarketKind::Stock 共有(立花と同じ)

Phase 2 着手前に確定必要な項目

  • DEV_KABU_TRADE_PASSWORD の env 名予約(Phase 2 着手前に確定、取引パスワード env)✅ 確定・設定済み
  • 発注時の取引パスワード収集 UI(tkinter subprocess 方式確定済み、UI 設計は Phase 2)✅ 確定
  • OrderAmendFailed.original_cancelledOption<bool> 化(None = 取消結果不確定)

| Q-P2-5 | 取引パスワード誤りのエラーコード | kabu API v1.5 ptal/error.html を確認し code を確定する | Phase 4 (P4-7) で部分解決。実機検証で確定 code 判明後に再 close | 部分解決 (2026-05-07 P4-7): kabu 公式 ptal/error.html には取引パスワード (Password フィールド) 誤り専用 code が記載されていないことを確認。4001013 は API パスワード誤り、4002013MarginTradeType param error で別物。当初 4002013 をプレースホルダーとして使っていたが誤検出リスクあり (MarginTradeType 違反が lockout カウンタを増やす副作用) のため除去。check_response()メッセージ文字列検出("パスワード" + "誤"/"不正" or 英語 "Password is invalid")に切替。実機運用で確定 code 観測次第、code 比較へ切替予定 |

Phase 2 設計決定済み

# 論点 決定
Q-P2-1 取引パスワード収集タイミング セッション開始時 1 回(立花の TachibanaSessionHolder と同じ設計)。発注ごとに毎回聞かない
Q-P2-2 取引パスワードの保持方式 メモリのみ。30 分 idle で自動クリア。3 回連続誤入力で 30 分 lockout(立花踏襲)
Q-P2-3 DEV_KABU_TRADE_PASSWORD env 設定時は tkinter ダイアログをスキップ(DEV_KABU_API_PASSWORD と同じ流儀)
Q-P2-4 取引パスワード保持クラス名 KabuTradePasswordHolderTachibanaSessionHolder の kabu 版)