[同期 v2] オフラインファースト同期の再設計(Phase 0 完了) #50

Open
opened 2026-10-09 19:56:40 +00:00 by joe · 1 comment
Owner

オフラインファースト同期の再設計(h1 本体単体で完全稼働、o2 接続時のみ 1伝票単位で同期)。

o2 への依頼(ラベル h1-request)

  • joe/o2#54 [h1-request] 同期v2: 集約ストアと push/pull(1伝票単位・rev・冪等)
  • joe/o2#55 [h1-request] 同期v2: 合議(伝票の競合解決)と訂正提案
  • joe/o2#56 [h1-request] 同期v2: マスタ申請と無人モード(自動承認)
  • joe/o2#57 [h1-request] 同期v2: 締め日(月次・年次)と締め例外の配布、h1由来伝票のunlock禁止
  • joe/o2#58 [h1-request] 同期v2: 識別子(UUIDv4受け入れ)と端末の系列コード

h1 側フェーズ

  • Phase 0: 採番の連番テーブル化/stale を合議扱い/旧 SyncManager・Gmail 同期の停止/保護解除の廃止/締め日・例外の導入と全表ガード(o2 依存なし)
  • Phase 1: ChangeCapture(SQLite TEMP トリガ)+sync_changes+待機警告(o2 依存なし)
  • Phase 2: v2 バンドル push/pull、Applier、合議画面(依存: 集約ストア・合議)
  • Phase 3: マスタ申請、系列コード採番、締め日/例外受信、訂正提案→赤黒(依存: 無人モード・締め日・識別子)
  • Phase 4: v1 経路・旧同期表の削除(オーナー確認後)
オフラインファースト同期の再設計(h1 本体単体で完全稼働、o2 接続時のみ 1伝票単位で同期)。 - h1 内部設計: `docs/superpowers/specs/2026-10-09-offline-first-sync-design.md` - 契約の正本: o2 ADR-0002 https://git.cyberius.biz/joe/o2/src/branch/docs/adr-0002-offline-first-sync-v2/docs/adr/0002-offline-first-sync-v2.md ## o2 への依頼(ラベル h1-request) - [ ] joe/o2#54 [h1-request] 同期v2: 集約ストアと push/pull(1伝票単位・rev・冪等) - [ ] joe/o2#55 [h1-request] 同期v2: 合議(伝票の競合解決)と訂正提案 - [ ] joe/o2#56 [h1-request] 同期v2: マスタ申請と無人モード(自動承認) - [ ] joe/o2#57 [h1-request] 同期v2: 締め日(月次・年次)と締め例外の配布、h1由来伝票のunlock禁止 - [ ] joe/o2#58 [h1-request] 同期v2: 識別子(UUIDv4受け入れ)と端末の系列コード ## h1 側フェーズ - [ ] Phase 0: 採番の連番テーブル化/stale を合議扱い/旧 SyncManager・Gmail 同期の停止/保護解除の廃止/締め日・例外の導入と全表ガード(o2 依存なし) - [ ] Phase 1: ChangeCapture(SQLite TEMP トリガ)+sync_changes+待機警告(o2 依存なし) - [ ] Phase 2: v2 バンドル push/pull、Applier、合議画面(依存: 集約ストア・合議) - [ ] Phase 3: マスタ申請、系列コード採番、締め日/例外受信、訂正提案→赤黒(依存: 無人モード・締め日・識別子) - [ ] Phase 4: v1 経路・旧同期表の削除(オーナー確認後)
joe changed title from オフラインファースト同期 再設計(追跡) to [同期 v2] オフラインファースト同期の再設計(Phase 0 完了) 2026-10-10 09:24:05 +00:00
Author
Owner

Phase 0 を実装・リリースしました(v1.4.573)。

実施内容

  • doc_sequences による連番採番(DocNumberAllocator)。削除後の番号再利用と並行採番の重複を解消
  • stale(o2 不採用)を捨てず sync_conflicts へ退避。件数を o2 連携設定画面に表示
  • 旧 SyncManager の定期送信と Gmail 同期(SyncQueue)の起動を停止。同期は o2 Phase 1 のみ
  • 発行ロック(保護)解除を廃止し、訂正を赤黒伝票に一本化
  • FiscalLockGuard + fiscal_lock_state + lock_exceptions による締めロックを導入。月次締め・年次決算・月次例外の操作は会社設定の「締め」セクション(単独運用可)
  • 全主要リポジトリ(documents / purchases / payments / customer_payments / accounting_vouchers / daily_reports)の保存・削除にガード適用

検証

  • dart analyze: エラー0
  • flutter test: +1163 -166(失敗はすべて変更前からの既存失敗)
  • DB 移行 v37→v38 は新規テーブル追加のみ(破壊的変更なし)

残件(Phase 1 以降)

  • pull/apply 側の締めロックガードと Applier(Phase 2)
  • 合議画面・締め日の o2 配布・マスタ申請・HLC(Phase 2 以降)
  • 欠番は発生しうる(採番後の保存失敗時)。番号の再利用はしない
Phase 0 を実装・リリースしました(v1.4.573)。 ## 実施内容 - `doc_sequences` による連番採番(`DocNumberAllocator`)。削除後の番号再利用と並行採番の重複を解消 - `stale`(o2 不採用)を捨てず `sync_conflicts` へ退避。件数を o2 連携設定画面に表示 - 旧 SyncManager の定期送信と Gmail 同期(SyncQueue)の起動を停止。同期は o2 Phase 1 のみ - 発行ロック(保護)解除を廃止し、訂正を赤黒伝票に一本化 - `FiscalLockGuard` + `fiscal_lock_state` + `lock_exceptions` による締めロックを導入。月次締め・年次決算・月次例外の操作は会社設定の「締め」セクション(単独運用可) - 全主要リポジトリ(documents / purchases / payments / customer_payments / accounting_vouchers / daily_reports)の保存・削除にガード適用 ## 検証 - `dart analyze`: エラー0 - `flutter test`: +1163 -166(失敗はすべて変更前からの既存失敗) - DB 移行 v37→v38 は新規テーブル追加のみ(破壊的変更なし) ## 残件(Phase 1 以降) - pull/apply 側の締めロックガードと Applier(Phase 2) - 合議画面・締め日の o2 配布・マスタ申請・HLC(Phase 2 以降) - 欠番は発生しうる(採番後の保存失敗時)。番号の再利用はしない
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
joe/h1-c2#50
No description provided.