背景
現場でのデバッグのため、カメラ・BLE どちらの入力でも照合検査の結果をすべて端末内に記録し、設定画面の一番下から一括で共有(ダウンロード)できるようにしたい。BLE 診断ログは意図的に読取値を含まないので、別の「照合ログ」として新設する。
決定事項(2026-09-07)
対象: 最終判定(一致・不一致・重複)+不受理(形式外・順序違い・別仕向地・長さ不正など)+セッション開始/終了をすべて 1 行ずつ。
QR / Code 128 の生ペイロードを含める(端末内のみに保存。共有は操作したときだけ)。
直近 5,000 件を端末に永続化(超過分は古いものから削除)。設定画面最下部に「照合ログをすべて共有」と「照合ログを消去」(確認あり)。
共通スキーマ(JSON Lines、schemaVersion 1、両 OS 同一)
1 行目ヘッダ: {"type":"header","schemaVersion":1,"platform":"ios|android","appVersion":"…","exportedAt":"<ISO8601 UTC>","eventCount":N,"limit":5000}
2 行目以降 1 イベント 1 行: {"at":"<ISO8601 ms UTC>","session":"<uuid|null>","source":"camera|bluetooth","step":"qr|barcode|result|none","event":"…","reason":"…|null","destination":"sawai|molten|denso|null","qr":"…|null","barcode":"…|null","code":"…|null","boxNumber":N|null,"message":"…|null"}(null は明示)
event: session_start / session_end / qr_accepted / barcode_candidate / barcode_accepted / match / mismatch / duplicate / rejected
reason(snake_case): invalid_format / wrong_order / wrong_destination / wrong_symbology / result_pending / incomplete / overlong / invalid / empty / session_not_started / source_mismatch
ファイル名: codematch-scan-log-yyyyMMdd-HHmm.jsonl
やること(子 Issue)
iOS: 照合ログ(ScanLogStore)と設定画面の共有・消去 #121 iOS: ScanLogStore(JSONL 追記、5,000 件)、ScannerViewModel の記録フック、設定画面最下部のカード、テスト、docs
Android: 照合ログ(Room v4 scan_log)と設定画面の共有・保存・消去 #122 Android: Room v4 scan_log、ScanSessionCoordinator の ScanLogRecorder フック、ScanLogRepository、ScanLogJsonExporter、設定画面最下部のカード、release ゲート更新、テスト、docs
受け入れ条件
背景
現場でのデバッグのため、カメラ・BLE どちらの入力でも照合検査の結果をすべて端末内に記録し、設定画面の一番下から一括で共有(ダウンロード)できるようにしたい。BLE 診断ログは意図的に読取値を含まないので、別の「照合ログ」として新設する。
決定事項(2026-09-07)
共通スキーマ(JSON Lines、schemaVersion 1、両 OS 同一)
{"type":"header","schemaVersion":1,"platform":"ios|android","appVersion":"…","exportedAt":"<ISO8601 UTC>","eventCount":N,"limit":5000}{"at":"<ISO8601 ms UTC>","session":"<uuid|null>","source":"camera|bluetooth","step":"qr|barcode|result|none","event":"…","reason":"…|null","destination":"sawai|molten|denso|null","qr":"…|null","barcode":"…|null","code":"…|null","boxNumber":N|null,"message":"…|null"}(null は明示)event:session_start/session_end/qr_accepted/barcode_candidate/barcode_accepted/match/mismatch/duplicate/rejectedreason(snake_case):invalid_format/wrong_order/wrong_destination/wrong_symbology/result_pending/incomplete/overlong/invalid/empty/session_not_started/source_mismatchcodematch-scan-log-yyyyMMdd-HHmm.jsonlやること(子 Issue)
ScanLogStore(JSONL 追記、5,000 件)、ScannerViewModelの記録フック、設定画面最下部のカード、テスト、docsscan_log、ScanSessionCoordinatorのScanLogRecorderフック、ScanLogRepository、ScanLogJsonExporter、設定画面最下部のカード、release ゲート更新、テスト、docs受け入れ条件