docs/project-plan.mdのP3(Android タブレット対応・standard運用の技術実証)完了条件と、それを裏付けるtrack(Issue #13〜#19、親Issue #3)の証跡を対応付ける。Issue #18で数時間連続利用と復旧シナリオを完了し、実機で見つかったHome復帰時の二重Activity/ViewModelを修正・回帰確認した。本書はP3のtrack_finish/issue_closeをユーザーが判断するための最終証跡である。
| # | 完了条件 | 状態 | 証跡 |
|---|---|---|---|
| 1 | Android タブレット上で現在地表示、更新、再接続の主要機能が動く | 済 | #16(Bluetooth接続の製品化、adopted)・#17(地図UIとオフライン化、adopted)で実機確認済み。現在地マーカー・stale表示・有限バックオフ自動再接続・手動再接続を実機(Redmi Pad SE 8.7)で確認 |
| 2 | 実機で数時間規模を含む連続利用をして重大な停止や操作不能がない | 済 | #18で約5時間3分の前景・画面ON連続試験を実施。sentenceCount 4,270,376→5,489,225、checksum不正2、クラッシュ/ANR 0、PSS 97,839〜115,905KBで単調増加なし。短いBluetooth切断2回はいずれも自動復旧。地図操作も正常 |
| 3 | 屋外視認性・操作性の確認項目と、本番画面実装後に再開する条件を残している | 済(物理確認は後続) | #18に直射日光・タップ・振動姿勢・過熱のチェックリストを作成。本番の移動経路・作業状態画面が未実装で、仮UIを今確認しても再試験が必要なため、PC非接続/無線診断手段を含む製品受入試験へ延期 |
| 4 | 現地で使うための接続手順、起動手順、復旧手順を整理している | 済 | Android standard版 運用手順(導入・初回ペアリング・接続・切断/再接続・機内モード利用・終了・トラブル復旧・アンインストール/更新)、Android実機開発 ベースライン確認ツール(開発時の障害調査)、Windows再起動後のWSL・Android実機試験 復旧手順 |
現行のstandard運用では採用しない。 トラクター利用中はアプリを前面表示・画面ONで使い、バックグラウンド常時測位を要求しない。Issue #18で約5時間3分の前景連続利用、約14分の画面OFF、Home往復、DG-PRO1RWS電源OFF/ON、Bluetooth OFF/ON、権限拒否/再許可、RUNNING_CRITICALメモリ通知、force-stop/プロセス再生成からの復旧を確認した。前景利用中の受信継続にForeground Serviceが必要という観測事実は無い。
Androidはバックグラウンドの通常プロセスを終了しうるため、現判断はバックグラウンド受信を保証するものではない。次の場合はForeground Serviceを再検討する。
| Issue | 内容 | kind | outcome | P3への反映 |
|---|---|---|---|---|
| #13 | フェーズ1: MapLibre Native + Bluetooth SPP 技術スパイク | prototype | adopted | Kotlin + MapLibre Native 12.3.1 + Bluetooth Classic RFCOMM/SPPを本線として採用。PMTilesはfile://方式(内部ストレージへの初回コピー)を採用 |
| #14 | フェーズ2: NMEAと状態管理 | prototype | adopted | P2のNMEA line assembler・checksum検証・GGA/RMC decode・FixState/FixRepositoryをKotlinへ移植し、JVM単体テストで検証 |
| #15 | フェーズ3A: Bluetooth・lifecycle・オフラインデータ事前検証 | prototype | baseline | 接続所有権の単独化、15秒watchdog、有限バックオフ暫定値、切断原因別状態遷移、PMTiles atomic copy・整合性検証の必須化を実機検証で確定。PMTiles破損時のネイティブクラッシュループ(SIGABRT)、Activity再作成時の二重接続を実機再現 |
| #16 | フェーズ3: Bluetooth接続の製品化 | prototype | adopted | standard運用のBluetooth製品化。接続所有権のBluetoothGpsViewModelへの単独集約、有限バックオフ(初回即時+1/2/5/10/10秒、合計6回)、切断原因別状態遷移(Disconnected/BluetoothDisabled/StoppedByUser/PermissionRequired/ReconnectFailed)を実装・実機確認 |
| #17 | フェーズ4: 地図UIとオフライン化 | prototype | adopted | PMTilesAssetStoreによる安全なコピー・整合性検証・復旧可能なエラー表示。現在地マーカー・stale表示・地図/航空写真/筆ポリゴン切替をMapScreenへ統合。機内モードでの実機統合確認済み |
| #18 | フェーズ5: 連続利用・現地確認と運用手順 | baseline-check | 完了判断待ち | 数時間連続・復旧シナリオ・機内モードを実機確認。Home復帰時の二重Activityを修正。Foreground Service不採用、屋外確認の後続製品受入への延期、運用/復旧手順を確定 |
| #19 | フェーズ3事前検証: Device Owner・カスタムHome最小構成 | prototype | inconclusive(保留) | dedicated Flavor・Device Owner・カスタムHome・Lock Taskの実装を保留。理由・再開条件はP3 Device Owner・カスタムHome最小検証 保留判断を参照 |
RUNNING_CRITICAL通知とforce-stop/プロセス再生成で代替評価した。実RAM枯渇そのものは未実施MainActivityが2つ積まれ、旧ViewModelが受信中のまま新ViewModelが接続失敗する不具合を発見。MainActivityをsingleTaskとして修正し、task size=1・instance単一・受信継続を回帰確認fixQuality=2、衛星12、RMC Aで有効Fix復帰BLUETOOTH_DISABLEDを即時表示し、ON後約0.4秒で自動復旧RUNNING_CRITICALメモリ通知後もPID/instance/受信を維持。実RAM枯渇は実施せず現行P3の完了条件はstandard運用のみを対象とする。dedicated Flavor・Device Owner・カスタムHome・Lock Taskは、P3 Device Owner・カスタムHome最小検証 保留判断の再開条件(個人アカウントを含まない検証専用端末の確保、または対象実機を専用端末へ転用する合意)が満たされた時点で、#19を再開して別途検証する。
standard運用の技術実証としてのP3完了条件は満たした。Issue #18のtrack_finishと親Issue #3のcloseはユーザーの最終確認後に行う。屋外視認性・操作性は本番画面実装後の製品受入試験、専用端末化は再開条件成立後の別trackとして管理する。