[h1-request] 同期v2: マスタ申請と無人モード(自動承認) #56
Labels
No labels
h1-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
joe/o2#56
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
背景
共有マスタ(顧客・商品・カテゴリ・仕入先)は o2 を正とし、h1 の変更は「申請」とする。o2 が無人でも業務が止まらないよう、自動承認の無人モードを設ける。h1 は申請中もローカルで仮反映して使い続ける。
依頼内容(ADR-0002 §8)
master_review_mode:manual/unattended(既定unattended)pending_review/accepted/heldcode)ならheldheldheldheld一覧画面(承認/却下)master_decision(approved+正規データ /rejected/held)受け入れ条件
契約の正本: ADR-0002(ブランチ
docs/adr-0002-offline-first-sync-v2。未マージなら先に main へマージしてから着手)https://git.cyberius.biz/joe/o2/src/branch/docs/adr-0002-offline-first-sync-v2/docs/adr/0002-offline-first-sync-v2.md
h1 側の内部設計(参考): https://git.cyberius.biz/joe/h1-c2/src/branch/main/docs/superpowers/specs/2026-10-09-offline-first-sync-design.md
前提: h1 は本体単体で完全稼働し、o2 接続時のみ同期する。v1(
/api/sync/push|pull・/api/sync/corrections*)は h1 の移行完了まで並行稼働を維持すること(v1 を壊さない)。検証データ: 入出力例を
tests/fixtures/sync_v2/*.jsonに追加する。h1 は同じ fixture を Dart テストで検証する(sales_calculationfixture と同じ運用)。実装完了(o2側)— マスタ申請と無人モード
実装
MasterRequest(new/update/delete、pending/accepted/held/rejected)+ テナント設定SyncSetting.master_review_mode(manual/unattended、既定 unattended)held)/変更=自動承認(base_rev以降に o2 が同一項目を変更していればheld)/削除=参照なしは論理削除のみ自動・参照ありはheldaccepted/pending_review/heldを統合、pull にmaster_decisionGET /api/sync/v2/master-requests、POST .../{id}/approve|reject、GET/PUT /api/sync/v2/settings/sync-master-requests(承認/却下・無人モード切替)c56a1b2c3d4e、fixtures(master_decision)インフラ注意: 現在リモートへの git push が SSH タイムアウト(
www.cyberius.biz:18)で失敗中。実装はローカル main にマージ済み・o2.db適用済みで、push は回復後に実施します。回帰確認: 全 6422 passed, 1 skipped。