Skip to content

אימות חלקי לפי טבלאות: hash לכל טבלה, verifyTableHashes (0.4.0) - #10

Merged
Y-PLONI merged 2 commits into
Otzaria:mainfrom
palmoni5:per-table-content-hash
Sep 7, 2026
Merged

אימות חלקי לפי טבלאות: hash לכל טבלה, verifyTableHashes (0.4.0)#10
Y-PLONI merged 2 commits into
Otzaria:mainfrom
palmoni5:per-table-content-hash

Conversation

@palmoni5

@palmoni5 palmoni5 commented Sep 7, 2026

Copy link
Copy Markdown
Member

מה השינוי

אימות חלקי לפי טבלאות אחרי החלת patch, על בסיס fromTableContentHashes/toTableContentHashes שהמניפסט נושא מעכשיו (Otzaria/SeforimLibrary#27). גרסה 0.3.0 → 0.4.0.

  • LogicalContentHasher.computeReport — מעבר יחיד, שני digests: hash כולל, hash לכל טבלה וכמות הבתים לטבלה; תת-קבוצה אופציונלית (only). compute() מאציל, חתימה ללא שינוי.
  • DeltaManifest — המפות nullable; FormatException כשפגומות; אחת בלבד ⇒ שתיהן כחסרות.
  • PatchApplier.apply — כשהמפות קיימות ומפתחותיהן תואמים לסדר הטבלאות של הסכמה, שלב verifyToHash מאמת רק: טבלאות שה-hash שלהן שונה בין from ל-to, טבלאות עם שורות ב-upsert_*/delete_*, ו-schema_meta. השאר מדווחות ב-deferredTables. אי-התאמה → PatchApplyException עם mismatchedTables ו-ROLLBACK כמו היום. מניפסט ישן / מפות לא עקביות → אימות מלא, זהה בית-לבית לקודם.
  • PatchApplyResultverifiedTables, deferredTables, verifyTableBytes; apply מקבל verifyTableBytesHint למד ההתקדמות.
  • PatchApplier.verifyTableHashes חדש — אימות טבלאות נבחרות בחיבור קריאה-בלבד; האפליקציה מריצה אותו על הטבלאות הדחויות אחרי ה-commit.

PRים מקושרים (מענפים נפרדים)

סדר מיזוג: PR זה + SeforimLibrary קודם, ואז אוצריא (התלות שם היא ref: main).

איך נבדק

  • test/logical_hash_contract.json — אורקל משותף, נוצר ב-tool/gen_logical_hash_fixture.dart מה-hasher המפורסם (שאומת בייטים מול שרשרת v14/v15 האמיתית); test/logical_hash_contract_test.dart מאמת hash כולל, כל טבלה, תת-קבוצה וסכום בתים. contract.yml מוסיף cmp מול העותק הקוטליני.
  • patch_applier_test.dart: אימות חלקי עובר, אי-התאמה בטבלה שנגעו בה מתגלגלת לאחור, סחיפה בטבלה דחויה לא מפילה את ה-apply ו-verifyTableHashes מגלה אותה, מניפסט ישן ומפות לא עקביות → אימות מלא, טבלה שנגעו בה בלי שינוי hash ועדיין מאומתת, טבלה עם hash שונה בלי שורות patch מאומתת, רמז הבתים.
  • delta_manifest_test.dart: parse / חסר / אחת בלבד / פגום.
  • dart analyze נקי; dart test ירוק פרט לשני כשלים סביבתיים קודמים ב-library_db_recovery_service_test שנכשלים זהה על main.

LogicalContentHasher.computeReport מחזיר במעבר יחיד את ה-hash הכולל, ה-hash של כל טבלה וכמות הבתים לטבלה (עם תת-קבוצה אופציונלית). compute() מאציל ולא השתנה.

DeltaManifest קורא את fromTableContentHashes/toTableContentHashes (null כשחסרות; FormatException כשפגומות; אחת בלבד ⇒ שתיהן חסרות). PatchApplier.apply, כשהמפות קיימות ותואמות לסדר הטבלאות, מאמת אחרי ה-apply רק את הטבלאות שה-hash שלהן השתנה, שיש להן שורות ב-patch, ו-schema_meta; השאר מדווחות כ-deferredTables. אי-התאמה מדווחת בשמות הטבלאות ומתגלגלת לאחור כמו היום. מניפסט ישן — אימות מלא, זהה לקודם.

verifyTableHashes חדש: אימות טבלאות נבחרות בחיבור קריאה-בלבד, לבדיקת השאר אחרי ה-commit. PatchApplyResult מקבל verifiedTables/deferredTables/verifyTableBytes, ו-apply מקבל verifyTableBytesHint למד ההתקדמות.

בדיקות: אורקל משותף עם SeforimLibrary (test/logical_hash_contract.json, נוצר ב-tool/gen_logical_hash_fixture.dart, מושווה ב-contract.yml), מקרי המניפסט, וכל מסלולי ה-applier (חלקי, אי-התאמה, סחיפה דחויה, מניפסט ישן, מפות לא עקביות). שני כשלים קודמים ב-library_db_recovery_service_test הם סביבתיים ונכשלים זהה ב-main.
@Y-PLONI
Y-PLONI merged commit 1c1e5bd into Otzaria:main Sep 7, 2026
1 check passed
@palmoni5
palmoni5 deleted the per-table-content-hash branch September 7, 2026 12:21
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