Skip to content

fix(library-update): fallback להורדה מלאה על כל כשל apply — הקשחה לקראת סכמה 4 - #1043

Closed
palmoni5 wants to merge 1 commit into
devfrom
library-update-schema4-resilience
Closed

fix(library-update): fallback להורדה מלאה על כל כשל apply — הקשחה לקראת סכמה 4#1043
palmoni5 wants to merge 1 commit into
devfrom
library-update-schema4-resilience

Conversation

@palmoni5

Copy link
Copy Markdown
Member

חלק האפליקציה במהלך סכמת patch 4 (line_ref, ‏Otzaria/SeforimLibrary#18): הקשחת מסלול ה-fallback כך שאף כשל apply לא ישאיר את המשתמש בלולאת שגיאה.

מה השתנה

עד היום רק אי-התאמת hash (isContentMismatch) הפעילה fallback להורדה מלאה. כל PatchApplyException אחר — והחשוב שבהם: patch שסכמתו חדשה מהנתמך באפליקציה ("נדרש עדכון תוכנה") — הוצג כשגיאה חשופה, והמשתמש נשאר תקוע בנסיונות חוזרים עד שיעדכן אפליקציה.

מעכשיו כל PatchApplyException מוביל ל-needsFullConfirmation כשיש DB מלא בתוכנית: הודעות ה-hash הקיימות נשמרו כמו שהן, ולשאר הכשלים הודעה כללית. נוספה בדיקת bloc לתרחיש.

זה הצד ההגנתי; הצד המונע — planner שמדלג מראש על edges בסכמה לא נתמכת — מגיע עם שדרוג חבילת ה-updater (ראו תלויות).

תלויות וסדר שחרור

  1. feat(patch): delta schema 4 — register line_ref + line_dh in the patch/hash contract SeforimLibrary#19 + feat(schema): סכמת patch 4 — line_ref + line_dh + planner מודע-סכמה otzaria_library_updater#8 — חוזה סכמה 4 בשני הצדדים (ה-jobs של ה-contract בשניהם הופכים ירוקים רק כשהשניים ממוזגים).
  2. אחרי מיזוג otzaria_library_updater#8: לעדכן כאן את ה-ref של seforim_library_updater ב-pubspec.yaml ל-commit הממוזג (זה מביא את ה-planner החדש ואת תמיכת סכמה 4). אפשר כ-commit נוסף ל-PR הזה או כ-PR המשך.
  3. לשחרר גרסת אפליקציה עם השדרוג, ורק אחרי שהיא בחוץ — לפרסם release ראשון של הספרייה בסכמה 4.

ה-PR הזה עצמו אינו תלוי בקוד חדש של החבילה (משתמש רק ב-API קיים), ולכן בטוח למזג גם לפני עדכון ה-ref.

צ'קליסט

  • otzaria_library_updater#8 מוזג
  • pubspec.yaml: ‏ref עודכן ל-commit הממוזג
  • גרסת אפליקציה שוחררה לפני ה-release הראשון של סכמה 4

Previously only a content-hash mismatch triggered the full-download
fallback. Any other PatchApplyException — most importantly a patch
whose schema version is newer than the app supports — surfaced as a
bare error, leaving the user in a retry loop with no way out until an
app update.

Now every PatchApplyException falls back to needsFullConfirmation when
the plan carries a full-DB asset, with the hash-mismatch messages kept
as-is and a generic message for the rest. This is the client-side half
of the schema-4 rollout hardening; the planner-side gating (skipping
unsupported-schema edges) lands with the updater package bump.
@Y-PLONI

Y-PLONI commented Aug 31, 2026

Copy link
Copy Markdown
Member

ה-PR נסגר ככפול שכבר נכנס ל-dev: הקומיט המקורי b54dffb הופיע גם בתוך PR #1032 כקומיט 5676f0c (stable patch-id זהה), ו-PR #1032 מוזג ל-dev.

לאחר סקירה מחדש מול dev בלבד, הושלמו תיקוני schema 4 והקשחות נוספות ישירות ב-dev בקומיט 97acf94, כולל עדכון התלות ב-otzaria_library_updater לקומיט 14c03cbff90234d43dd815717ae8a0da83041a1d, טיפול נכון בשינויים שאינם ניתנים למיפוי לספר, עדכון דלתא רב-שלבי חלקי, וגבולות cancellation/rollback בהחלפת DB מלאה.

QA עצמאי: PASS ללא ממצאי P0-P3. flutter analyze עבר; 107 בדיקות library_update עברו (ודילוג Windows ייעודי אחד); Workflow Flutter Tests על dev עבר בכל 7 ה-jobs: https://github.com/Otzaria/otzaria/actions/runs/33452301796

@Y-PLONI Y-PLONI closed this Aug 31, 2026
@palmoni5
palmoni5 deleted the library-update-schema4-resilience branch August 31, 2026 23:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants