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

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

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ミラーを分ける。

次の実装候補

  1. 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朝リコスを前提にした自動テスト23朝リコスを明記した専用自動テスト(関連挙動の回帰テストは実装済み) StudioLLMデバッグA1/E′実装に対するStudioLLMデバッグ

拡張項目一覧

タスクID ステータス 説明 現状 A  実装済み・実機合格・継続観測中 バックグラウンド未起動でも通知。スマホ版GPS-MEMOが前面や通常のバックグラウンドにいない場合も、iOSが許す範囲で到着通知を成立させる。
Swift永続パンくず、段階円、SLC、起動時単発測位を実装。10時間無操作後もリコス・帰宅のiPhone通知とG2表示に成功。数日単位の実績を継続収集中。 E  実装済み・検証合格 重なり合った複数エリア対応。複数メモを独立して確認し、同一位置サンプルで全メモを再評価する。
複数メモの独立確認、同一サンプルでの全メモ評価、退出後の再武装を実装。自動テストと往復実機走行で確認済み。 E'  主要対策実装済み・一部残 iOS瞬間速度の平滑化、測位頻度、distanceFilter、確認フェーズの継続測位を見直す。
確認中のdistanceFilter=none、進入後60秒の全更新判定、その後10〜30秒のDart側間引きを実装。iOS瞬間速度の平滑化は未実装。 F
試作実装済み・製品導線撤去/保留 近くのメモ検索。現在地から1km、2.5km、5km、10kmなどの範囲で有効メモを検索・閲覧する。smartphone
APIと検索ロジック・テストは残存。0.1.5で履歴操作を妨害したため、0.1.6でG2の近隣検索導線を完全撤去。再設計・再承認待ち。 G
一部実装・後続仕様未確定 G2連携系の後続拡張。
G2のメモ詳細、履歴、キャッシュ、再取得・旧履歴、時計、通知ミラーは実装済み。「後続拡張」の具体的な完了条件は未確定。 H
未実装 インポート元など、メモ属性に基づく将来の内部優先度要素。
データ集・インポート元属性と、それを使う内部優先度は未実装。 I
未実装 有効条件など、メモ属性に基づく将来の内部優先度要素。
曜日・時間帯などの有効条件と、それを使う監視対象選定は未実装。 J
未実装 自動車・進行方向別・超広域モード。高速道路の上り/下りなど進行方向を考慮する。
徒歩版から分離した将来項目。方向判定、超広域半径、専用UIはいずれも未実装。 K
修正済み・実機確認合格 G2履歴の取得・画面更新不良。
履歴取得、キャッシュ、自動更新、再取得・旧履歴、画面反映を修正。近隣検索導線撤去後の0.1.6で履歴取得をオーナー実機確認済み。



運用注意

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