Lolly
ایپ کھولیں

ڈیٹا ٹرانسفر - lolly-backup بنڈل

ایک Lolly صارف جو کچھ بھی جمع کرتا ہے وہ اس کے اپنے ڈیوائس پر رہتا ہے - کوئی اکاؤنٹ نہیں، کوئی کلاؤڈ نہیں۔ ڈیٹا-ٹرانسفر بنڈل وہ طریقہ ہے جس سے یہ قدر منتقل ہوتی ہے: اسے ایک انسٹال پر ایکسپورٹ کریں، فائل کو کسی بھی ذریعے (USB، AirDrop، خود کو ای میل، نیٹ ورک شیئر) سے لے جائیں اور اسے دوسرے پر امپورٹ کریں۔ فائل ہی ٹرانسپورٹ ہے۔ ٹارگٹ آف لائن یا آن لائن ہو سکتا ہے۔ کوئی فرق نہیں پڑتا، کیونکہ کبھی کوئی سرور سے بات نہیں ہوتی۔

دو بٹن جو پوری تنصیب منتقل کرتے ہیں: Export my data ایک zip لکھتا ہے، Import data اسے واپس پڑھتا ہے signed by Lollyvector SVG9 paths~4.9k nodes11 groups56 KBخود جانچیںدستخط شدہ فائل حاصل کریںدو بٹن جو پوری تنصیب منتقل کرتے ہیں: Export my data ایک zip لکھتا ہے، Import data اسے واپس پڑھتا ہے signed by Lollyvector SVG9 paths~4.9k nodes11 groups56 KBخود جانچیںدستخط شدہ فائل حاصل کریں

یہ صفحہ فارمیٹ اسپیک ہے۔ اینڈ-یوزر واک تھرو کے لیے دیکھیں اپنا کام تلاش اور بازیافت کریں → اپنا کام دوسری ڈیوائس پر منتقل کریں۔ عملدرآمد shells/web/src/data-transfer.ts میں ہے، اور tests/data-transfer.test.ts راؤنڈ-ٹرپ کنٹریکٹ کو پن کرتا ہے۔

دائرہ کار۔ ایک بنڈل صارف کا ڈیٹا لے کر جاتا ہے، کیٹلاگ ٹولز نہیں۔ کیٹلاگ ٹولز اور کیٹلاگ اثاثے علیحدہ طور پر سنک ہوتے ہیں اور فرض کیا جاتا ہے کہ وہ ٹارگٹ پر پہلے سے موجود ہیں (بدترین صورت میں زیادہ ورژن پر)؛ جو ٹولز صارف نے خود بنائے ہوں وہ profile.json کے اندر سفر کرتے ہیں۔ امپورٹ کبھی کسی کیٹلاگ ٹول کو انسٹال یا اپ گریڈ نہیں کرتا۔

اہداف

لفافہ

ایک بنڈل ایک سادہ .zip ہے۔ ڈاؤن لوڈ کا نام اس شخص کے مطابق رکھا جاتا ہے جس سے یہ تعلق رکھتا ہے - LollyTools-<First>-<Last>-<YYYY-MM-DD>-<n>.zip (مثال کے طور پر LollyTools-Ada-Lovelace-2026-06-26-1.zip) - تاکہ بیک اپس سے بھرا Downloads فولڈر قابلِ فہم رہے۔ پہلا اور آخری حصہ پروفائل سے آتا ہے اور جب سیٹ نہ ہو تو چھوڑ دیا جاتا ہے۔ کوئی پروفائل نہ ہونے پر LollyTools-2026-06-26-1.zip ملتا ہے، اور صرف پہلا نام ہونے پر LollyTools-Ada-2026-06-26-1.zip ملتا ہے۔ ہر حصے کو فائل نام کے لیے محفوظ ٹوکن میں صاف کیا جاتا ہے (یونیکوڈ حروف/ہندسے برقرار، اسپیس/رموزاوقاف ہٹا دیے جاتے ہیں، زیادہ سے زیادہ 32 حروف)۔ <n> ایک فی-دن، فی-ڈیوائس ترتیب ہے، لہٰذا اسی دن دہرائے گئے ایکسپورٹس آپس میں نہیں ٹکراتے اور ترتیب میں رہتے ہیں۔ shells/web/src/data-transfer.ts میں backupFilename() نام بناتا ہے۔ زپ کا مواد نام سے قطع نظر ایک جیسا رہتا ہے۔ اندر:

Pathلازمیمواد
manifest.jsonہاںفارمیٹ id، ورژنز، شمار اور فی-حصہ انٹیگریٹی۔ ریڈر سب سے پہلے یہی دیکھتا ہے۔
profile.jsonجب سیٹ ہوصارف کا مکمل me ریکارڈ: نام، رابطہ، ہیڈ شاٹ ریفرنس اور فلیگز، نیز فولڈرز، ٹریش، پروجیکٹ بلیو پرنٹس، یوزر ٹیمپلیٹس اور یوزر کے بنائے ہوئے ٹولز، پسندیدہ، پوشیدہ ٹولز، زبان اور ایموجی کا انتخاب۔ host.profile کے ذریعے پڑھا جاتا ہے۔
sessions.jsonہاںہر محفوظ شدہ سیشن: سلاٹ، ٹول id/ورژن، لیبل، تھمب نیل (data-URL) اور مکمل ان پٹ ڈیٹا۔ host.state کے ذریعے پڑھا جاتا ہے۔
assets.jsonہاںہر اپ لوڈ شدہ اثاثے کا میٹا ڈیٹا (تصاویر، فونٹس، برانڈ ٹوکنز، لوگو، ڈاؤن لوڈز کی محفوظ شدہ کاپیاں)، ہر ایک assets/blobs/ کے تحت اپنے بائٹس کی طرف اشارہ کرتا ہے۔
assets/blobs/<n>.<ext>فی اثاثہخام اثاثہ بائٹس (تصویر اور فونٹ فائلیں)۔ بغیر کمپریشن کے محفوظ (پہلے سے کمپریسڈ فارمیٹس)۔ ایکسٹینشن محض ظاہری ہے۔ assets.json میں MIME مستند ہے۔
assets/blobs/<n>.c2paجب موجود ہونکالے گئے Content Credentials بالکل اصل بائنری بائٹس کے طور پر، جن کی طرف اثاثے کے ریکارڈ میں _credentialFile اشارہ کرتا ہے۔ یہ ڈیوائس سائننگ کیز نہیں ہیں۔
design-systems.jsonجب موجود ہواس تنصیب پر بنائے یا شامل کیے گئے ڈیزائن سسٹمز، بطور { active, records }۔ امپورٹ پر id کے حساب سے مرج ہوتے ہیں؛ بنڈل کا active انتخاب تبھی لاگو ہوتا ہے جب ٹارگٹ کا اپنا کوئی ڈیزائن سسٹم نہ ہو۔
file-history.jsonاختیاریورژن شدہ اثاثہ اسنیپ شاٹس، مکمل شدہ فائل-آپریشن رپورٹس اور مکمل بیچ مینی فیسٹس۔ ہسٹری حصے کا اپنا ورژن ہے؛ یہ شیل کے اندرونی fileHistory بیک اپ اڈاپٹر کے ذریعے فراہم کیا جاتا ہے۔
revision-history.jsonاختیاری، دستی بیک اپسمستحکم creation IDs، محفوظ رکھے گئے checkpoints، تھمب نیلز اور رولنگ ریکوری ڈرافٹس۔ جہاں سپورٹ ہو وہاں host.state.history.backup کے ذریعے فراہم کیا جاتا ہے۔
file-history/versions/فی اسنیپ شاٹپرانے اثاثہ بائٹس اور نکالے گئے credentials، اس سے قطع نظر کہ موجودہ اثاثہ اب بھی موجود ہے یا نہیں۔
file-history/results/فی مکمل شدہ آپریشنبالکل اصل آؤٹ پٹ بائٹس۔ تبدیلی کے لیے منتخب کی گئی کوئی اصل فائل نہ رکھی جاتی ہے نہ شامل کی جاتی ہے۔
prefs.jsonہاںصارف کی اپنی مقامی ترجیحات: theme، sidebarWidth اور ct-metrics سرگرمی شمار۔
lolly.txtہاںبنڈل کا انسانی-پڑھنے کے قابل خلاصہ (شمار، پروفائل، فائل نام) ہر اس شخص کے لیے جو Lolly کے بغیر زپ کھولے۔ ہر ایکسپورٹ پر دوبارہ تیار ہوتا ہے اور امپورٹ پر پہچانا جاتا ہے، لہٰذا یہ کبھی چھوڑے گئے حصے میں شمار نہیں ہوتا۔ یہ انٹیگریٹی میپ کے بعد لکھا جاتا ہے، لہٰذا یہ اس سے باہر رہتا ہے۔

بنڈل جان بوجھ کر ایک سادہ زپ ہے: یہ کسی بھی ٹرانسپورٹ میں مکمل حالت میں بچ جاتا ہے، اور کوئی بھی ان زپ ٹول اس کا معائنہ کر سکتا ہے۔

profile.json سب سے چھوٹا حصہ ہے اور وہ ہے جسے ریڈر ایپ میں سب سے پہلے دیکھتا ہے: وہ تفصیلات جو تخلیق کار ایک بار پُر کرتا ہے، ساتھ ہی وہ آپٹ-ان جو ٹولز کو انہیں استعمال کرنے دیتا ہے۔

پروفائل کی تفصیلات کا فارم جو profile.json بن جاتا ہے: نام، رابطہ تفصیلات اور ہیڈ شاٹ signed by Lollyvector SVG15 paths~1.2k nodes30 groups1 image40 KBخود جانچیںدستخط شدہ فائل حاصل کریں

manifest.json

{
  "format": "lolly-backup",
  "formatVersion": 3,
  "minReader": 1,
  "app": "lolly",
  "exportedAt": "2026-06-22T09:30:00.000Z",
  "counts": { "profile": true, "sessions": 2, "userAssets": 4, "prefs": 3, "assetVersions": 1, "fileOperations": 1 },
  "integrity": {
    "profile.json": "sha256-…",
    "sessions.json": "sha256-…",
    "assets.json": "sha256-…",
    "assets/blobs/0.bin": "sha256-…",
    "file-history.json": "sha256-…",
    "file-history/versions/0.bin": "sha256-…",
    "file-history/results/0.bin": "sha256-…",
    "prefs.json": "sha256-…"
  }
}
فیلڈمعنی
formatہمیشہ lolly-backup۔ اس کے بغیر فائل کو "not a Lolly backup" کہہ کر مسترد کیا جاتا ہے۔
formatVersionوہ لے آؤٹ جس کے ساتھ یہ بنڈل لکھا گیا تھا۔ حصوں کے سیٹ یا شکل میں کسی بھی تبدیلی پر بڑھایا جاتا ہے۔ ریڈرز اس پر گیٹ نہیں کرتے۔
minReaderاس بنڈل کو محفوظ طریقے سے امپورٹ کرنے کے لیے درکار کم از کم ریڈر ورژن۔ یہی وہ فیلڈ ہے جس پر ریڈرز گیٹ کرتے ہیں۔
appتیار کرنے والی ایپ کا id، تشخیص کے لیے۔
exportedAtISO ٹائم اسٹیمپ جب بنڈل بنایا گیا۔
countsرائٹر نے کیا شامل کیا، ڈسپلے اور سینیٹی-چیکنگ کے لیے۔
integrityاختیاری۔ manifest.json کے علاوہ ہر حصے کو اس کے بغیر کمپریشن کے بائٹس کے SRI-انداز sha256-<base64> ڈائجسٹ سے نقشہ بند کرتا ہے۔

ورژن پالیسی (فارورڈ کمپیٹیبلٹی)

formatVersion اور minReader کے درمیان تقسیم ہی وہ چیز ہے جو فارمیٹ کو پرانی انسٹالیشنز کو بے یار و مددگار چھوڑے بغیر بڑھنے دیتی ہے:

مصنفین کے لیے عمومی اصول: اگر ہر موجودہ ریڈر آپ کے اضافے کو نظر انداز کر کے بھی درست کام کرے، تو یہ additive ہے - formatVersion بڑھائیں، minReader چھوڑ دیں۔ ورنہ minReader بڑھائیں۔

انٹیگریٹی

جب manifest.integrity موجود ہو، ایک ریڈر ہر درج شدہ حصے کا SHA-256 کچھ بھی لکھنے سے پہلے تصدیق کرتا ہے۔ کوئی عدم مطابقت ("failed its integrity check") یا غائب حصہ ("incomplete") پوری امپورٹ کو روک دیتا ہے - کوئی جزوی بحالی نہیں ہوتی۔ یہ اس خرابی کو پکڑتا ہے جو فائل ٹرانسپورٹ لا سکتا ہے (ایک ٹرنکیٹڈ AirDrop، ایک ای میل گیٹ وے جس نے اٹیچمنٹ کو دوبارہ انکوڈ کیا، ایک خراب USB سیکٹر)۔

انٹیگریٹی جان بوجھ کر best-effort ہے: یہ صرف وہاں لکھی جاتی ہے جہاں Web Crypto دستیاب ہو (ہر محفوظ براؤزر کانٹیکسٹ اور جدید Node)، اور صرف اسی صورت میں تصدیق کی جاتی ہے جب میپ اور Web Crypto دونوں موجود ہوں۔ میپ کے بغیر بنڈل - مثال کے طور پر انٹیگریٹی کے وجود میں آنے سے پہلے کا کوئی بنڈل - بلا تبدیلی امپورٹ ہوتا ہے۔ "Cannot verify" کو کبھی "corrupt" نہیں سمجھا جاتا۔

مینی فیسٹ نہ خود اپنی فہرست بناتا ہے اور نہ دوبارہ تیار کردہ lolly.txt README کی۔ ڈائجسٹس صرف انہی حصوں کا احاطہ کرتے ہیں جن کا مینی فیسٹ ضامن ہے۔

امپورٹ کی سیمنٹکس

امپورٹ ایک merge ہے، کبھی replace-all نہیں:

محفوظ شدہ سیشنز خودکار طور پر اپنی تصاویر سے دوبارہ منسلک ہو جاتے ہیں: اثاثے کے حوالے id کے ذریعے رکھے جاتے ہیں، اور اپ لوڈ شدہ تصاویر بحال ہونے کے بعد برج انہیں دوبارہ حل کرتا ہے (اسے بہرحال ایسا کرنا ہی ہے، کیونکہ blob: URLs ری لوڈ کے بعد باقی نہیں رہتے)۔

امپورٹ کا خلاصہ { profile, sessions, userAssets, prefs, skipped, failedAssets } رپورٹ کرتا ہے۔ failedAssets ان اپ لوڈ شدہ اثاثوں کو شمار کرتا ہے جنہیں بحال نہیں کیا جا سکا (مثلاً ڈیوائس اسٹوریج بھرا ہونا)۔ یہ skipped سے مختلف ہے، جو ایک فارورڈ-کمپیٹیبل نئے رائٹر کے ان حصوں کو شمار کرتا ہے جنہیں یہ بلڈ نہیں پہچان سکا۔ UI skipped ظاہر کرتا ہے ("… · N newer items skipped")، تاکہ بحالی اس بارے میں دیانتدار رہے کہ اس نے کیا پیچھے چھوڑا۔

جب فائل ہسٹری موجود ہو، تو خلاصہ assetVersions، fileOperations اور failedHistory بھی ساتھ رکھتا ہے۔ اسٹوریج ختم ہو جانا یا ناقابلِ تبدیل-ID تصادم جزوی بحالی کا سبب بن سکتے ہیں؛ UI صارف کو سورس بیک اپ برقرار رکھنے کو کہتا ہے۔ کلاؤڈ Sync جزوی یا غیر معاون بحالی کے بعد اپنا لاگو شدہ ریویژن آگے نہیں بڑھاتا، تاکہ اسنیپ شاٹ دوبارہ کوشش کے لیے دستیاب رہے۔ بحالی تمام پروفائل/سیشن/اثاثہ/ہسٹری اسٹورز میں ایک ہی transaction نہیں ہے۔

Creation history (v3)

History کی صلاحیت رکھنے والے ویب ہوسٹ سے دستی بیک اپس میں revision-history.json شامل ہوتا ہے، جس کا اپنا { version: 1, documents, revisions, recoveries } اسکیما ہے۔ یہ محفوظ رکھی گئی IDs، canonical ان پٹ اسنیپ شاٹس، ورژن اسٹیمپس، raster پیش نظارے اور علیحدہ writer ڈرافٹس رکھتا ہے۔ ہسٹری اڈاپٹر موجودہ سیشنز اور ان کے heads کو ایک ہی ریڈ transaction میں کیپچر کرتا ہے؛ sessions.json پرانے readers کے لیے وہی موجودہ اسنیپ شاٹس استعمال کرتا ہے۔

بحالی آرکائیو کو ایک transaction میں کمٹ کرنے سے پہلے payload کا SHA-256 اور byte شمار، منفرد شناختیں، document/head تعلقات، نسب، ٹائم اسٹیمپس، پیش نظارے کی اقسام اور حدود چیک کرتی ہے۔ compacted parent references غیر موجود ہو سکتے ہیں۔ موجودہ ورکنگ کام کبھی خاموشی سے تبدیل نہیں کیا جاتا: جب کوئی creation دونوں طرف ہو، تو جو طرف موجودہ کے طور پر نہیں رکھی جاتی وہ ایک protected draft بن جاتی ہے۔ آرکائیو کی 384 MiB ٹرانسفر حد کو واضح طور پر چیک کیا جاتا ہے، اور اسٹوریج کی حدیں محفوظ رکھے گئے checkpoints کو کاٹے بغیر نافذ کی جاتی ہیں۔ مجموعی بیک اپ اب بھی ان-میموری ZIP implementation استعمال کرتا ہے اور یہ کوئی streaming آرکائیو نہیں ہے۔

خلاصہ میں revisions اور recoveryDrafts شامل ہوتے ہیں، جو صرف یہ گنتے ہیں کہ اس امپورٹ نے کیا شامل کیا، اور added، kept، replaced، copies اور hidden یہ بتانے کے لیے کہ ہر creation کیسے ضم ہوئی۔ اس صلاحیت کے بغیر کوئی شیل عام سیشنز بحال کرتا ہے اور ہسٹری حصے کو چھوڑا گیا رپورٹ کرتا ہے۔ Native فائل سسٹم ہسٹری غیر معاون رہتی ہے جب تک اس کا اڈاپٹر durable ہسٹری transactions فراہم نہ کرے۔ P2P guest state کے پاس کوئی durable ہسٹری یا ریکوری آرکائیو نہیں ہے۔

ذاتی اسنیپ شاٹ Sync جان بوجھ کر creation history کو خارج رکھتا ہے۔ کسی ایسے مقامی دستاویز پر اسنیپ شاٹ لگانا جس کی ہسٹری ہو، اس کی سابقہ ورکنگ حالت کو ایک علیحدہ ریکوری ڈرافٹ کے طور پر محفوظ کرتا ہے اور کسی بھی کھلے ایڈیٹر کا write token غیر معتبر کر دیتا ہے۔ اس کے ناقابلِ تبدیل checkpoints ڈیوائس پر رہتے ہیں۔ یہ اسنیپ شاٹ کی تبدیلی کے دوران مقامی ہسٹری کی حفاظت کرتا ہے؛ یہ ایک ساتھ چلنے والی ڈیوائسز کی ہسٹریز کو مرج نہیں کرتا۔

پرانے اثاثہ حوالے برقرار رکھے جاتے ہیں، جبکہ رینڈرنگ اب بھی destination کی موجودہ لائبریری کے ذریعے اثاثے حل کرتی ہے۔ یہ آرکائیو ابھی تک پرانے اثاثہ بائٹس یا پرانے ٹول رینڈرز کی ضمانت نہیں دیتا۔ اثاثہ-ورژن اور فائل-نتیجہ بائٹس اپنے موجودہ علیحدہ بیک اپ حصے کے ذریعے سفر کرتے رہتے ہیں۔

محفوظ شدہ ورژنز اور فائل نتائج (v2)

اختیاری ہسٹری حصہ { version: 2, assetVersions: [...], operations: [...], batches: [...] } رکھتا ہے؛ readers پرانی history-v1 شکل بھی بغیر batches کے قبول کرتے ہیں۔ ہر اسنیپ شاٹ مستحکم اثاثہ ID اور اصل ورژن، اس کا save وقت، byte لمبائی اور hex SHA-256 شناخت کرتی ہے، نیز ایک اثاثہ ریکارڈ جس کے _file اور اختیاری _credentialFile بائنری حصوں کی طرف اشارہ کرتے ہیں۔ Operations اصل فائل کے حقائق، request، report، ٹائم اسٹیمپس اور اختیاری نتیجہ _file رکھتے ہیں؛ اسٹوریج بیک اینڈ کے نام، OPFS handles اور execution leases سفر نہیں کرتے۔ پرانے صرف-history-v1 readers امپورٹ سے پہلے نئے ہسٹری ورژن کو مسترد کر دیتے ہیں، بجائے اس کے کہ batch membership خاموشی سے گرا دیں۔

Batch مینی فیسٹس پراسیسنگ سے پہلے ہر منتخب سورس ریکارڈ کرتے ہیں، بشمول وہ فائلیں جو کبھی پڑھی ہی نہیں گئیں، منسوخ اراکین، نتیجے کی جگہ محفوظ کرنے میں ناکامی اور روکا گیا کام۔ ہر رکن کی ایک مستحکم operation ID، سورس reference/facts، درخواست کردہ output نام اور terminal report ہوتی ہے۔ ایک نہ پڑھے گئے سورس کے پاس اعلان شدہ facts ہوتے ہیں، کوئی گھڑا ہوا digest نہیں۔ امپورٹ رکن کی شناخت اور کسی بھی ساتھ لائی گئی operation report سے مطابقت کی تصدیق کرتا ہے۔ Batch reports تب بھی دستیاب رہتی ہیں جب انفرادی نتائج واضح طور پر ہٹا دیے گئے ہوں، مگر ایک رسید یہ ظاہر نہیں کرتی کہ اس کے output بائٹس اب بھی محفوظ ہیں۔

پرانے readers اب بھی v2 envelope (minReader: 1) قبول کرتے ہیں اور مانوس حصے بحال کرتے ہیں، غیر معاون ہسٹری حصوں کو چھوڑے گئے کے طور پر شمار کرتے ہوئے۔ مکمل ہسٹری بحالی کے لیے fileHistory اڈاپٹر رکھنے والا شیل درکار ہے؛ یہ ایک شیل-اندرونی seam ہے، کوئی نئی ٹول کے سامنے آنے والی HostV1 صلاحیت نہیں۔ حقیقی دو-ڈیوائس بحالی مقامی Chromium گیٹ کے تحت آتی ہے؛ انسٹال شدہ Tauri/iOS/Android ریکوری قبولیت الگ رہتی ہے۔

کیا سفر نہیں کرتا

اسٹوریج میٹر اسی تقسیم کو تفصیل سے دکھاتا ہے۔ Saved sessions، My images اور File results & versions بنڈل میں شامل ہوتے ہیں۔ ان کے نیچے موجود اثاثہ کیش، ٹول پیش نظارے اور آف لائن پنز سب دوبارہ اخذ کیے جا سکتے ہیں، لہٰذا وہ پیچھے رہ جاتے ہیں۔

اسٹوریج میٹر اس ڈیوائس کے ڈیٹا کو نام والی زمروں میں توڑتا ہوا، جہاں Saved sessions اور My images کو Asset cache سے الگ ٹریک کیا جاتا ہے، یہاں ایک تازہ انسٹال پر جہاں ہر زمرہ ابھی خالی ہے signed by Lollyvector SVG37 paths~4.9k nodes85 groups65 KBخود جانچیںدستخط شدہ فائل حاصل کریںاسٹوریج میٹر اس ڈیوائس کے ڈیٹا کو نام والی زمروں میں توڑتا ہوا، جہاں Saved sessions اور My images کو Asset cache سے الگ ٹریک کیا جاتا ہے، یہاں ایک تازہ انسٹال پر جہاں ہر زمرہ ابھی خالی ہے signed by Lollyvector SVG37 paths~4.9k nodes85 groups65 KBخود جانچیںدستخط شدہ فائل حاصل کریں

کراس-شیل ضمانت

data-transfer.ts صرف capability bridge (host.profile، host.state، host.assets) اور مشترکہ localStorage prefs کے ذریعے پڑھتا اور لکھتا ہے۔ وہی ماڈیول ویب اور Tauri پر مشترکہ envelope پڑھتا اور لکھتا ہے، IndexedDB یا فائل سسٹم اسٹوریج پر۔ اختیاری ہسٹری حصے صرف وہیں ظاہر ہوتے ہیں جہاں متعلقہ اڈاپٹر دستیاب ہو؛ ایک غیر معاون حصہ امپورٹ پر چھوڑا گیا رپورٹ کیا جاتا ہے۔ Headless سویٹ مشترکہ حصوں کو ایک in-memory bridge کے خلاف آزماتی ہے، جبکہ ہسٹری transactions کے پاس حقیقی براؤزر ٹیسٹس بھی ہیں۔

دو shells اس ضمانت سے باہر ہیں، مختلف وجوہات کی بنا پر:

محفوظ توسیعی پوائنٹس

envelope بذاتِ خود ایک manifest اور نامزد parts کا مجموعہ ہے، تاکہ نئی طرح کی portable data بعد میں بغیر کسی breaking change کے اس پر سوار ہو سکے۔ یہ additive parts کے طور پر شامل ہوں گے (نیا formatVersion، وہی minReader)، اور آج کا reader جو نہیں پہچانتا اسے چھوڑ دیتا ہے۔ یہ ابھی نہیں بنائے گئے۔ نام یہاں محفوظ کیے گئے ہیں تاکہ جب یہ آئیں تو فارمیٹ مربوط رہے۔

ان محفوظ ناموں اور اوپر دیے گئے parts کے علاوہ کچھ بھی reader کے نزدیک ایک نامعلوم part ہے: چھیڑا نہیں جاتا اور skipped میں شمار ہوتا ہے۔

حوالہ