バグ #1169
完了最初のアカウントを登録する時、1度目のアカウント登録が正しく行われない
再現手順
- チュートリアルを開始
- Worldウィザードを開く
- 任意のWorld(twitter, slack, worldonで再現)を選び、手順に従ってアカウントを登録する
- 最後の確認画面でOKボタンを押すとダイアログが閉じる。アカウントの登録は行われず、チュートリアルは進行しない
- 再度Worldウィザードを開き全く同じ手順を行うとアカウントが登録でき、チュートリアルが進行する
Izumi Tsutsui さんがほぼ7年前に更新
Live Image で発生していた時の手順 toot をまとめてもらっていたということを思い出したのでとりあえず貼っておきます
(他の環境でも再現することが判明しているのであまり意味ないですが……)
http://maud.io/mstdn-picker/?instance=social.mikutter.hachune.net&since_id=99341966499248371&max_id=99343498197300797&filter=tsutsuii
Izumi Tsutsui さんがほぼ7年前に更新
発生状況確認¶
ておくれLiveImageを NetBSD 7.1.2 + mikutter 3.6.5版に更新したので、
「mikutterを新規起動しつつ、 ~/.mikutter 以下を git 登録して
git status しながらチュートリアルを進める」
という方法で調べてみました。
調査結果結論¶
最初のアカウントの登録が完了した瞬間に register_account の実績登録が行われるために問題が発生しているように見えます。
調査結果詳細¶
チュートリアルを進めて起動後 1回目のWorld登録が完了すると
~/.mikutter/settings/settings.yml
に
UserConfig::achievement_took:
- :register_account
の実績を書き込みだけが発生しています。
2回目のWorld登録の終了時にはチュートリアル終了の
Plugin::guide_guide_sequence: :hello_world
や
UserConfig::account_crypt_key: !binary |-
XXXXXXXXXX
等のアカウント登録成功の書き込み、タブの追加の書き込み、トークン登録等が行われます。
上記動作から「アカウント登録の実績の書き込みが原因」と推測して、試しに
mikutter 初回起動後のチュートリアル開始前に setting.yml に
UserConfig::achievement_took:
- :register_account
を事前に書き込んでおくと、1回目のアカウント登録でちゃんとTwitterのタブ作成・ツイート取得まで進みます。
Izumi Tsutsui さんが6年以上前に更新
追加で検証してみました。
- plugin/achievement.rb で register_account の実績を on_world_create から on_open_setting に書き換える
- ~/.mikutter がない状態で mikutter 起動して World 追加して Twitter 認証
- →認証後 Twitter の TL, リプライ, 検索, dm のタブが表示される
(そのかわりアカウント登録のチュートリアルの続きは出ない)
- →認証後 Twitter の TL, リプライ, 検索, dm のタブが表示される
なので、 achievement.rb の UserConfig の書き込みがよろしくない雰囲気です。
toshi_a 初音 さんが6年以上前に更新
- ステータス を 新規 から レビュー待ち に変更
- 担当者 を toshi_a 初音 から Izumi Tsutsui に変更
- ブランチ を topic/1169-account-registration-issue にセット
World情報を読み出すタイミングの問題だということがわかりました。
world_create
イベントは、これを受け取ってWorldプラグインがWorldを管理下に置くため、リスナの登録のタイミングによってはWorldが管理下に置かれる前に呼び出される可能性があります。今回問題になったguideプラグインもWorldより先に呼び出されてしまっていて、登録されたWorldが worlds
フィルタによって見つけられない状態でした。
これは他の場所でも潜在的な問題になるため、WorldプラグインがWorldを管理下に置いた後に world_after_created
イベントを発生させるようにして、 world_create
イベントをlistenしなければいけないプラグインを除いて、全てこちらを利用するようにしました( world_create
の実装には手を加えていないため、このイベントをlistenしているサードパーティプラグインに互換性の問題が起こることはありません)。
これで、新規プロファイルでチュートリアルに従ってWorldを登録したとき、本件の問題は発生しなくなったと思います。一応確認お願いできますか。
Izumi Tsutsui さんが6年以上前に更新
- ステータス を レビュー待ち から マージ待ち に変更
- 担当者 を Izumi Tsutsui から toshi_a 初音 に変更
topic/1169-account-registration-issue を checkout して --confroot で新規登録してみました。
問題なく動いているようです。
https://social.mikutter.hachune.net/@tsutsuii/99881051390507529
ありがとうございます。