背景
PR #681(Issue #663)で、テナント選択がリロードで消える不具合を web/js/api.js の sessionStorage 永続化で修正した。これは単純バグではなく設計漏れの露出であり、以下 2 点を確定・文書化する。
現状(コード確認済み)
MeController は activeTenantId を X-Tenant-Id ヘッダから echo するだけで、/api/auth/me は免除パスのため ADR-0016 の自動解決が走らない(コメントにも「自動解決 ADR-0016 は /me では行わない」と明記)。
SwitchTenantUseCase は所属検証のみで、アクティブテナントを永続化しない。
- 結果、アクティブテナントの SSOT はクライアント側(毎リクエストの
X-Tenant-Id)。リロードでインメモリが消えると /me がヘッダ無し→activeTenantId=null→index.html ループ。
ADR-0016 との非整合
ADR-0016 は「�レッダ省略時はサーバが joined_at ASC で初期テナントを自動解決し、フロントはヘッダを省略可能になる」と決定。しかし /me は免除パスで自動解決せず、フロントの遷移ゲート(me.activeTenantId !== null)が明示選択を強制している。ADR-0016 が謳った効果が /me に反映されていない。
論点(本 Issue で決定)
やること
関連
PR #681 / Issue #663 / ADR-0016 / 設計規約 §3.3
背景
PR #681(Issue #663)で、テナント選択がリロードで消える不具合を
web/js/api.jsの sessionStorage 永続化で修正した。これは単純バグではなく設計漏れの露出であり、以下 2 点を確定・文書化する。現状(コード確認済み)
MeControllerはactiveTenantIdをX-Tenant-Idヘッダから echo するだけで、/api/auth/meは免除パスのため ADR-0016 の自動解決が走らない(コメントにも「自動解決 ADR-0016 は /me では行わない」と明記)。SwitchTenantUseCaseは所属検証のみで、アクティブテナントを永続化しない。X-Tenant-Id)。リロードでインメモリが消えると/meがヘッダ無し→activeTenantId=null→index.htmlループ。ADR-0016 との非整合
ADR-0016 は「�レッダ省略時はサーバが
joined_at ASCで初期テナントを自動解決し、フロントはヘッダを省略可能になる」と決定。しかし/meは免除パスで自動解決せず、フロントの遷移ゲート(me.activeTenantId !== null)が明示選択を強制している。ADR-0016 が謳った効果が/meに反映されていない。論点(本 Issue で決定)
X-Tenant-Id常時送出 + sessionStorage 保持を規約に明記。ADR-0016 サーバ自動解決は防御的フォールバックと位置づけ直す。さらに/meでも自動解決(または最終選択返却)を行えば初回・復帰時にセレクタを飛ばせ、PR chore(web): ブラウザ警告・エラーの撲滅 — favicon / テナント選択 sessionStorage 永続化 (#663) #681 の単一テナント自動選択(F-3)は不要になる。/meに自動解決を効かせactiveTenantIdを joined_at-ASC で返す。ループは発生源で消え、F-3 も冗長になる。やること
docs/specs/設計規約.md§3.3 とdocs/specs/基本設計書.md(712 行: 「Cookie または X-Tenant-Id ヘッダ」)に、アクティブテナントのクライアント永続化方式(sessionStorage)と/meのactiveTenantId仕様を明記/me解決ロジックの実装は別 impl Issue に切り出し関連
PR #681 / Issue #663 / ADR-0016 / 設計規約 §3.3