fix(kit): preserve offline scopes across auth recovery - #37
Conversation
✅ Deploy Preview for rdlabo-ionic-angular-library ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
rdlabo
left a comment
There was a problem hiding this comment.
第三者受け入れレビュー: APPROVED(GitHub の制約上、PR 作成者本人のアカウントから Approve を選べないためコメントとして記録)
独立検証結果:
scopeIds: [0]はOfflineSessionService.activateSession()で除外されず、manifest の[0]→getSession().scopesの{ userId, groupId: 0 }→resumeRemoteSession()の初回 pull まで維持されることを確認しました。- guard と API-only recovery の両方で、
grantRemote()後に専用の post-grant lease が発行されます。resume()の await 中にKitAuthAccessService.clear()が走る再現で lease が stale となり、lease を確認する user-visible side effect が実行されないことを確認しました。 resume(lease?: KitAuthAccessLease)は optional parameter なので、従来のresume: async () => .../resume(): Promise<void>実装と source/runtime compatible です。既存の引数なし実装を含む kit 全テストがコンパイル・pass しています。
ローカル再検証: npx ng test kit --watch=false = 35 files / 488 tests pass、git diff --check pass。GitHub CI も必須ジョブを含め green です。
補足: tipsys 側のリダイレクト等は、受け取った optional lease を resume の各 await 後に確認する実装へ更新する必要があります。これは本PRが提供する契約どおりです。
rdlabo
left a comment
There was a problem hiding this comment.
再受け入れレビュー(head 6b3dabf): APPROVED
前回承認後に指摘された同期通知 race を独立再検証しました。
grantRemote()は publication revision を確定してからmode$.next("remote")を同期通知し、その同じ revision の lease を返します。通知 subscriber が同期的にclear()/ logout を開始すると revision が進むため、返却 lease は既に stale です。guard / recovery は新しいbeginTransition()を後置せず、この stale lease をそのままresume()へ渡すので、旧 flight が logout transition を上書きしません。- guard と API-only recovery の両方で、remote 通知 subscriber が同期
clear()する再現テストを確認しました。結果は access modenone、guardfalse、user-visible effect 未実行です。 - scope
0は引き続き manifest → remote session → resume → pull{ userId, groupId: 0 }まで維持されます。 resume(lease?: KitAuthAccessLease)の optional 契約は変わらず、既存の引数なしresume(): Promise<void>実装もコンパイル・実行されています。grantRemote()の戻り値追加も、既存の戻り値を無視する呼び出しを壊しません。
ローカル再検証: npx ng test kit --watch=false = 35 files / 490 tests pass、git diff --check pass。ブロッカーはありません。
GitHub の自己承認制約があるため、Approve 状態ではなくレビューコメントとして記録します。
rdlabo
left a comment
There was a problem hiding this comment.
最終再受け入れレビュー(head 5ff1a00): APPROVED
上長2回目指摘への修正を独立再検証しました。
- guard:
grantRemote()が返した publication lease を同期通知直後に検査し、subscriber のclear()/ logout で stale ならfalseを返してresume()を呼びません。 - API-only recovery: 同じく stale publication lease を検査して return し、
resume()を呼びません。 - 両再現テストで
resumespy が未呼び出し、user-visible effect 未実行、access modenoneを確認しました。旧 flight が pull・redirect等の resume workを開始する余地を閉じています。 - 以前確認した scope
0の manifest → remote session → pull 維持、および optionalresume(lease?)による従来の引数なしresume(): Promise<void>互換に変更はありません。
ローカル再検証: focused 2 files / 56 tests pass、git diff --check clean。新 head にブロッカーはありません。
GitHub の自己承認制約があるため、Approve 状態ではなくレビューコメントとして記録します。
Summary
0instead of silently dropping it0Compatibility
KitRemoteAccessRecovery.resumekeeps its parameter optional, so existing zero-argument implementations remain source-compatibleValidation
npx ng test kit --watch=false(35 files / 488 tests)npm run lintnpm run prebuild:kitgit diff --check