メインコンテンツへスキップ

マスターに向けた拡張項目

マスターに向けた拡張項目

GPS-MEMOマスター版へ向けた拡張項目の作業計画ページ。詳細な実装作業はCodex側の作業計画ファイルで管理する。

2026-07-23 A1/Eprime 位置判定・測位診断強化

Codex側の正式な作業計画ファイルは core/課題/課題260723a_A1_Eprime_location_diagnostics.md。SESSION_LIVEもこの計画へ切り替え済み。

背景

A「バックグラウンド未起動でも通知」と、E′「測位頻度・iOS瞬間速度・確認測位の見直し」に関する実地ログから、通知失敗の原因が一つではないことが分かった。当初は「長時間バックグラウンドでアプリが起きない」が主犯候補だったが、2026-07-22の帰宅経路では長時間バックグラウンド後でも複数地点で到着判定と通知履歴保存が成立している。一方で、2026-07-21夜の橋本/鳥貴族、2026-07-23朝のリコスでは別の失敗が見えている。

2026-07-22 帰宅経路で確定したこと

    門前仲町、代々木上原駅、多摩川、芹が谷公園、セブンイレブン、チー実家、リコスで arrivalfire_events が残った。 このため、長時間バックグラウンド後でもiOS region監視から通知判定へ復帰できるケースはある。 門前仲町はDB上 notification_delivery_probe pending=false delivered=true lifecycle=paused まで出ているが、G2/Watch/iPhone表示として気づけていない。これはGPS判定ではなく、OS通知表示、Watch/G2ミラー、ロック解除タイミング、通知ID再利用まわりの切り分け対象である。

    2026-07-23 朝リコスで確定したこと

      前夜20:30頃に最後にGPS-MEMOを起動し、以後朝までGPS-MEMO本体は起動していない。 08:05頃にリコスへ移動し、約2分滞在して退店したが、G2通知もiPhone通知表示もなかった。 DBには08:08:29 geofence_enter リコス、08:08:29 sample dist=50m acc=20m notifyRadius=25m、08:08:36 sample dist=51m acc=6m notifyRadius=25m が残っている。 arrivalfire_events はない。 iOSが一切起こしていないわけではなく、SwiftからDartまで少なくとも一部は届いている。 約2分滞在したのにサンプルは7秒間に2件だけで途絶しているため、確認フェーズ中の distanceFilter により、屋内・低速・静止時の位置報告が止まった可能性が高い。 リコス/自宅周辺はGoogle Mapでも位置が飛ぶ地域であり、acc=6m と高精度を自称しながら実位置と50m級でずれる可能性がある。短域25mはこの地域では成立しないことがある。

      2026-07-21 夜 橋本/鳥貴族で確定したこと

        ふゆきさんの行動は、横浜線橋本駅から鳥貴族橋本へ移動し、食事後に横浜線橋本駅へ戻って帰宅。 横浜線橋本駅と鳥貴族橋本の中心距離は約320.5m。 横浜線橋本駅は通知半径125m、入った半径約212.5m、安全半径約161.6m。鳥貴族橋本は通知半径25m、入った半径50m。 したがって、鳥貴族滞在中は横浜線橋本駅の通知・入った・安全エリアのすべての外にいる。 DBには20:07:20 横浜線橋本駅 arrival、20:07:28 横浜線橋本駅 notification_delivery_probe ... delivered=true がある。 20:12頃に配達窓ログが終わり、20:12〜22:34頃はGPS-MEMO診断ログがほぼ空白。 鳥貴族橋本の geofence_enter は記録されていない。 横浜線橋本駅の safe_exit_rearmed は22:46:01まで記録されていない。 つまり「安全エリア内にいたから再通知されなかった」ではない。実際には安全エリア外へ出ていたはずなのに、退出確認と鳥貴族の入ったイベントが食事中に記録されていない。 Swift永続ログがないため、iOSがイベントを出していないのか、Swiftが受けてDartに渡せていないのか、Dartが起きていないのかは確定できない。

        問題の分解

          A1: iOS/Swift/Dart境界のブラックボックス。沈黙時に、iOSがイベントを出していないのか、Swiftで止まったのか、Dartで止まったのかが分からない。 E′: 確認フェーズ中の distanceFilter 問題。enter後にサンプルが少数で止まり、判定もタイムアウトも進まない。 判定条件/半径: リコス/自宅周辺のように位置が飛ぶ地域では、通知半径25mが測位ノイズより小さくなる。 通知表示: notification_delivery_probe delivered=true でもユーザーが表示として気づけないケースがある。iPhone通知センターに実物が残っているかを基準に、GPS-MEMO側通知登録とWatch/G2ミラーを分ける。

          次の実装候補

            A1 Swift永続パンくず: syncRegions、監視中region一覧、didEnterRegiondidExitRegiondidDetermineStaterequestState、SwiftからDartへの送信、Dart応答、測位セッション開始/停止、accuracy、distanceFilter、開始理由、停止理由を永続記録する。 E′ distanceFilter修正: 確認フェーズ中はiOS側 distanceFilter=none とし、iOS側で位置報告を絞らない。電池対策はDart側の判定間引きで行う。短域25mは進入後60秒は毎更新判定、その後は10〜30秒程度へ降格する。 判定条件緩和の検討: 現行の dist <= notifyRadius かつ acc <= notifyRadius に対し、候補として dist - acc <= notifyRadius と2サンプル連続成立を検討する。ただし誤発火リスクがあるため、A1/E′後のログで評価する。

            次GO候補

              A1 Swift永続パンくずログ E′ 確認フェーズ中 distanceFilter=none Dart側判定間引き 短域入った直後60秒の高頻度判定 診断DBへの測位設定ログ追加 7/21夜橋本/鳥貴族、7/23朝リコスを前提にした自動テスト StudioLLMデバッグ

              拡張項目一覧

                A: バックグラウンド未起動でも通知。スマホ版GPS-MEMOが前面や通常のバックグラウンドにいない場合も、iOSが許す範囲で到着通知を成立させる。 E: 重なり合った複数エリア対応。複数メモを独立して確認し、同一位置サンプルで全メモを再評価する。 E′: iOS瞬間速度の平滑化、測位頻度、distanceFilter、確認フェーズの継続測位を見直す。 F: 近くのメモ検索。現在地から1km、2.5km、5km、10kmなどの範囲で有効メモを検索・閲覧する。 G: G2連携系の後続拡張。 H: インポート元など、メモ属性に基づく将来の内部優先度要素。 I: 有効条件など、メモ属性に基づく将来の内部優先度要素。 J: 自動車・進行方向別・超広域モード。高速道路の上り/下りなど進行方向を考慮する。 K: G2履歴の取得・画面更新不良。

                タスクID ステータス 説明 A
                バックグラウンド未起動でも通知。スマホ版GPS-MEMOが前面や通常のバックグラウンドにいない場合も、iOSが許す範囲で到着通知を成立させる。 E
                重なり合った複数エリア対応。複数メモを独立して確認し、同一位置サンプルで全メモを再評価する。 E'
                iOS瞬間速度の平滑化、測位頻度、distanceFilter、確認フェーズの継続測位を見直す。 F
                近くのメモ検索。現在地から1km、2.5km、5km、10kmなどの範囲で有効メモを検索・閲覧する。 G
                G2連携系の後続拡張。 H
                インポート元など、メモ属性に基づく将来の内部優先度要素。 I
                有効条件など、メモ属性に基づく将来の内部優先度要素。 J
                自動車・進行方向別・超広域モード。高速道路の上り/下りなど進行方向を考慮する。 K
                G2履歴の取得・画面更新不良。


                 

                運用注意

                  DB事実、座標、半径、ふゆきさんの行動事実を突き合わせる前に原因結論を出さない。 A、K、E′、通知表示問題を混同しない。 ログにないことを、存在しないことと即断しない。現行アプリではSwift側の永続ログがない。 F′、メモ配置UI再設計、安全マージン最小値変更は今回の独立タスクから外す。安全マージンの新しい値は後日オーナーが提示するまで確定しない。