現象
現場から「山口のカゴとポケットが無効なQRコードです」との報告(2026-09-14、Android 端末のスクリーンショット付き。画面には「無効なQRコードです。納品書兼現品票のQRコードを読み取ってください。」と、直前に Bluetooth スキャナが切断されカメラへ切り替わった旨が表示)。
原因
配布中の Android release APK(S3 codematch/CodeMatch.apk、Last-Modified 2026-09-11 13:56 UTC、14,575,565 bytes = ローカル android/app/build/outputs/apk/release/app-release.apk 2026-09-11 02:05 JST)の DEX には #129 以前の正規表現しか入っていない:
カード番号 [A-Z]{4}[0-9]{6}(新: [A-Z0-9]{4}[0-9]{6})
品目番号欄 [A-Z0-9]{10}(新: [A-Z0-9]{9}[A-Z0-9 ])
澤井の現品票タグ 4-2-4 のみ(新: 4-2-3 も可)
reflog では 02:05 の APK ビルドは codex/inspection-report-mail を master(#129 を含む)へ rebase した 02:08 より前で、ブランチの土台は b622ec3 (= da83648 ^、#129 直前)だった。検品レポート (#131 ) のクラスは入っているが照合ルールだけ古い。
影響
山口県 防府工場(工場コード H、カード番号 DAH4…)の納品書 QR は全て invalid_format で拒否される。今回の写真 26 枚を Vision でデコードし、b622ec3 の ScanModels.swift で再生すると DAH4 の 20 枚全てが destination nil。
八千代工場(工場コード Y、カード番号 DAYA…)は 10 桁品番なら通るが、9 桁品番(DFR5-45-8SJ 等)は拒否される。
master (9373de2 ) のルールでは 26 枚全て澤井として受理され、正しい組み合わせは全て match(ios/scripts/verify_label_pairs.sh で確認)。iOS TestFlight (build 9/10) は 澤井製作所: カード番号 DAH4… 型と9桁品番のラベルが QR/Code 128 段階で拒否される #129 を含むため影響なし。
対応
master から bash scripts/setup-inateck-sdk.sh && ./gradlew :app:assembleRelease で再ビルドし、bash scripts/verify-release-hardening.sh を通す。
DEX に [A-Z0-9]{4}[0-9]{6} が含まれることを確認してから publish-install-page.sh / distribute-firebase.sh で再配布する(versionCode を上げる)。
再発防止: release ビルド前に git merge-base --is-ancestor origin/master HEAD を確認するか、配布スクリプト側で DEX の受理ルール文字列を検査する。
端末の設定 > スキャンログを共有してもらえば rejected / invalid_format の生ペイロードで裏付けが取れる。
現象
現場から「山口のカゴとポケットが無効なQRコードです」との報告(2026-09-14、Android 端末のスクリーンショット付き。画面には「無効なQRコードです。納品書兼現品票のQRコードを読み取ってください。」と、直前に Bluetooth スキャナが切断されカメラへ切り替わった旨が表示)。
原因
配布中の Android release APK(S3
codematch/CodeMatch.apk、Last-Modified 2026-09-11 13:56 UTC、14,575,565 bytes = ローカルandroid/app/build/outputs/apk/release/app-release.apk2026-09-11 02:05 JST)の DEX には #129 以前の正規表現しか入っていない:[A-Z]{4}[0-9]{6}(新:[A-Z0-9]{4}[0-9]{6})[A-Z0-9]{10}(新:[A-Z0-9]{9}[A-Z0-9 ])4-2-4のみ(新:4-2-3も可)reflog では 02:05 の APK ビルドは
codex/inspection-report-mailを master(#129 を含む)へ rebase した 02:08 より前で、ブランチの土台は b622ec3(= da83648^、#129 直前)だった。検品レポート (#131) のクラスは入っているが照合ルールだけ古い。影響
DAH4…)の納品書 QR は全てinvalid_formatで拒否される。今回の写真 26 枚を Vision でデコードし、b622ec3 のScanModels.swiftで再生すると DAH4 の 20 枚全てが destination nil。DAYA…)は 10 桁品番なら通るが、9 桁品番(DFR5-45-8SJ等)は拒否される。ios/scripts/verify_label_pairs.shで確認)。iOS TestFlight (build 9/10) は 澤井製作所: カード番号 DAH4… 型と9桁品番のラベルが QR/Code 128 段階で拒否される #129 を含むため影響なし。対応
bash scripts/setup-inateck-sdk.sh && ./gradlew :app:assembleReleaseで再ビルドし、bash scripts/verify-release-hardening.shを通す。[A-Z0-9]{4}[0-9]{6}が含まれることを確認してからpublish-install-page.sh/distribute-firebase.shで再配布する(versionCode を上げる)。git merge-base --is-ancestor origin/master HEADを確認するか、配布スクリプト側で DEX の受理ルール文字列を検査する。rejected/invalid_formatの生ペイロードで裏付けが取れる。