QA Wrap

Support

Published and maintained by Nader Alzghoul. This page says how to get a fix quickly, and what you can expect back. It does not promise anything that cannot be delivered by one person.

Fix it yourself first, in about a minute

Four things account for most of what gets reported, and all four are faster to try than to describe.

1. Reload the extension

chrome://extensions, then the reload arrow on the QA Wrap card.

Chrome caches the service worker inside the browser profile and will keep running the old one after an update. The symptom is specific and misleading: some things work and others answer nothing at all, usually with "the message port closed before a response was received" in the console. It is not a crash and it is not your profile. It is yesterday's backend talking to today's interface.

2. Reload the page you are testing

Content scripts only inject when a page loads. A tab that was already open when you installed or reloaded the extension has none, and every page-scoped tool will tell you to reload. That message is literal, not generic.

3. Check it is awake

The extension records nothing until you wake it, per browser window. A second window is a second decision. If every tool is greyed out, that is the switch, and the card at the top of the popup says so.

4. Look at the worker's own console

chrome://extensions, then Inspect views: service worker. It opens onto a banner with the build number, what the worker currently thinks is happening, and a qaw handle you can type into:

qaw.state()      // what the worker thinks is happening
qaw.sessions()   // every session it has stored
qaw.used()       // which tools this session has used
qaw.handlers()   // every message it answers to
qaw.wake()       // arm the current window without the popup

If qaw.about.build is not the version on the extensions card, go back to step 1. That one check has cost this project two separate afternoons. Builds before 3.1.0 called the same handle njb, and it still answers to that.

Reporting

Report a problem, from inside the product

The popup carries a plain Report a problem button, for the person who found the issue rather than the person who tests for a living: a colleague, a client, or a tester on a build without the repository beside them. It opens a single page: one box to describe what went wrong in a sentence or two, one button to send it.

You do not have to gather evidence by hand. The moment that page opens, QA Wrap attaches, without asking:

  • a screenshot of the page in front of you;
  • its address, and any errors it reported in its console;
  • your browser and screen size.

Send it posts through whatever tracker or chat webhook you already configured in Settings, if any. Save it instead keeps everything as a session on your machine and sends nothing. If nothing is configured, that is the honest outcome of pressing Send too: it is saved, and you are told so plainly rather than shown a spinner that never finishes.

Getting it to Nader Alzghoul

Most reporters have no tracker configured, which means the write-up above sits on your machine until you send it somewhere. Open the session's report, use Raw export to save it as Markdown, and email that file together with a screenshot to naderalzghoulbusiness@gmail.com, or through naderalzghoulbusiness@gmail.com however you already reach the maintainer. There is no ticket system on this website: nothing is uploaded anywhere by the product itself, so there is nothing for one to read until you attach the file yourself.

What the export does and does not contain, plainly: a Markdown session export holds what you did on the page under test, in your own words, and the evidence QA Wrap gathered automatically. It contains no cookie values and no password field values, by construction (the privacy policy is the mechanism). It is not a scrubbed document, though: it does contain the URLs you visited and the values you typed into ordinary, non-password fields on the page you were testing. Read it before you send it. If the page under test carried a real customer's data and you were not using QA Wrap's masking, that data is in the export, the same way it would be in a screen recording or a bug report written by hand. Mask what matters before you record, or redact the export file afterwards; this support flow cannot do either for you.

Please do not send a token, a webhook URL or a cookie value. Nothing here ever needs one to reproduce a bug, and a credential in a message is a credential you now have to rotate.

What makes a report actionable

In rough order of how much time each one saves, on top of what the flow above already attaches:

  1. The build. qaw.about.build in the worker console, or the number on the extensions card.
  2. The browser and version. Chrome or Edge, and the version number (see Known limits below). It is the difference between a bug and an expected refusal.
  3. What you pressed, and what happened instead. "Nothing happened" is a real and useful answer. Say it plainly rather than guessing at a cause.

Diagnostics

What the product will tell you about itself

Nothing is uploaded, so nobody can look up what happened on your machine. These are the ways to find out locally. From the repository, if you have it:

Show the table
CommandWhat it does
npm testHundreds of assertions, no browser and no network, in seconds.
node tools/clickthrough.mjsPresses every button in the interface.
node tools/diagnose.mjsRuns against the real database and the running worker.

Known limits

Things that are decisions, not bugs

Show the table
LimitWhy
No WebKit or Firefox is launched from the extension An extension cannot start a process. The session exports as a runnable Playwright project instead, where the real engines exist.
Branch coverage is not reported V8 block coverage cannot tell an unexecuted else from an unexecuted early return, and a number that is nearly branch coverage gets quoted as branch coverage.
A recording will not start on a tab you have not just used the extension on Chrome's protection, not ours. Click the QA Wrap icon while that tab is in front, then press Record.
The QA Wrap bar is hidden while a bare video is fullscreen A fullscreen video, audio or image element has no room for children, so the bar cannot sit inside it. Leave fullscreen and it is back.
The first request on a page may escape a rule Rules reach the page a few milliseconds after document_start. Inherent to the platform.

Response

What you can expect back

QA Wrap is a single-maintainer tool with no paid support contract as standard. The table below is stated as intentions, because that is what they are. If your organisation needs a contractual service level, this is not it on its own, and that is a real reason to ask.

Show the table
Kind of reportIntentionThe honest caveat
AcknowledgementWithin a few working daysOne person, one timezone, and other work
A bug that loses recorded dataThe highest priority there isThe only class of bug that would justify dropping everything
A bug that blocks a feature entirelyNext release"Next release" is not a date
Anything cosmetic, or an enhancementThe roadmap, or neverThe roadmap is a list of intentions in priority order, and says so
A security issueSame day if it is reachable from a pageReport it privately, not in a shared channel
AvailabilityNone promisedThere is no on-call and no rota

Not offered, said plainly

  • No uptime commitment, because there is nothing hosted to be up.
  • No data recovery. Nobody has a copy of your sessions. Export what matters.
  • No guaranteed compatibility with a future Chrome. Manifest V3 is still moving, and the test suite is the early warning system.

Reporting a security issue

Privately, to the maintainer, not in a shared channel and not in a ticket anybody can read. The surface worth knowing: the extension holds <all_urls>, patches fetch and XMLHttpRequest in every page, and can read cookies. It records nothing until armed, per window, and goes back to that state when the browser closes. The thing genuinely worth reporting is anything that acts while the extension is asleep. That is the boundary the whole design rests on.

الدعم

من نشر وصيانة نادر الزغول. تقول هذه الصفحة كيف تحصل على إصلاح بسرعة، وما يمكنك توقعه ردا. لا تعد بشيء لا يستطيع شخص واحد إنجازه.

أصلحها بنفسك أولا، خلال دقيقة تقريبا

أربعة أمور تفسر معظم ما يبلغ عنه، وتجربة كل واحد منها أسرع من وصفه.

1. أعد تحميل الامتداد

chrome://extensions، ثم سهم إعادة التحميل على بطاقة QA Wrap.

يخزن Chrome العامل الخدمي مؤقتا داخل ملف المتصفح، ويستمر في تشغيل النسخة القديمة بعد التحديث. العرض محدد ومضلل: تعمل بعض الأشياء ولا تجيب أخرى إطلاقا، غالبا مع عبارة "أغلقت منفذ الرسالة قبل استلام رد" في وحدة التحكم. ليس عطلا وليس ملفك. إنه واجهة خلفية من الأمس تتحدث إلى واجهة اليوم.

2. أعد تحميل الصفحة التي تختبرها

لا تحقن النصوص البرمجية إلا عند تحميل الصفحة. تبويب كان مفتوحا بالفعل حين ثبت الامتداد أو أعدت تحميله لا يحمل منها شيئا، وكل أداة خاصة بالصفحة ستطلب منك إعادة التحميل. تلك الرسالة حرفية، لا عامة.

3. تحقق من أنها مستيقظة

لا يسجل الامتداد شيئا حتى توقظه، لكل نافذة متصفح على حدة. نافذة ثانية قرار ثان. إن كانت كل الأدوات رمادية اللون، فذلك هو المفتاح، والبطاقة أعلى القائمة المنبثقة تقول ذلك.

4. انظر إلى وحدة تحكم العامل نفسها

chrome://extensions، ثم Inspect views: service worker. تفتح على شريط يحمل رقم البنية، وما يظن العامل حاليا أنه يحدث، ومقبض qaw يمكنك الكتابة فيه:

qaw.state()      // ما يظن العامل أنه يحدث
qaw.sessions()   // كل جلسة خزنها
qaw.used()       // أي أدوات استخدمتها هذه الجلسة
qaw.handlers()   // كل رسالة يجيب عليها
qaw.wake()       // سلح النافذة الحالية من دون القائمة المنبثقة

إن لم يكن qaw.about.build هو النسخة الموجودة على بطاقة الإضافات، ارجع إلى الخطوة 1. كلف هذا التحقق وحده هذا المشروع فترتي بعد ظهر منفصلتين. كانت البنيات قبل 3.1.0 تسمي المقبض نفسه njb، ولا يزال يجيب على ذلك.

الإبلاغ

أبلغ عن مشكلة، من داخل المنتج

تحمل القائمة المنبثقة زر أبلغ عن مشكلة بسيطا، لمن وجد المشكلة لا لمن يختبر لكسب عيشه: زميل، أو عميل، أو مختبر على نسخة بلا المستودع بجانبه. يفتح صفحة واحدة: مربع واحد لوصف ما حدث خطأ في جملة أو جملتين، وزر واحد لإرسالها.

لست مضطرا لجمع الأدلة يدويا. بمجرد فتح تلك الصفحة، يرفق QA Wrap، من دون أن يسألك:

  • لقطة شاشة للصفحة أمامك؛
  • عنوانها، وأي أخطاء أبلغت عنها وحدة التحكم الخاصة بها؛
  • متصفحك ومقاس شاشتك.

أرسلها تودعها عبر أي أداة تتبع أو رابط دردشة خطافي أعددته مسبقا في الإعدادات، إن وجد. احفظها بدلا من ذلك تبقي كل شيء جلسة على جهازك ولا ترسل شيئا. إن لم يكن شيء معدا، فتلك هي النتيجة الصادقة لضغط "أرسل" أيضا: تحفظ، وتخبر بذلك بوضوح بدل أن تعرض عليك عجلة تحميل لا تنتهي أبدا.

إيصالها إلى نادر الزغول

لا يملك معظم المبلغين أداة تتبع معدة، ما يعني أن ما كتبته أعلاه يبقى على جهازك حتى ترسله إلى مكان ما. افتح تقرير الجلسة، استخدم التصدير الخام لحفظها بصيغة Markdown، وأرسل ذلك الملف مع لقطة شاشة بالبريد الإلكتروني إلى naderalzghoulbusiness@gmail.com، أو عبر naderalzghoulbusiness@gmail.com بأي طريقة تصل بها إلى القائم على الصيانة أصلا. لا يوجد نظام تذاكر على هذا الموقع: لا يرفع شيء إلى أي مكان من قبل المنتج نفسه، فلا شيء ليقرأ حتى ترفق الملف بنفسك.

ما يحتويه التصدير وما لا يحتويه، بوضوح: يحمل تصدير جلسة بصيغة Markdown ما فعلته على الصفحة قيد الاختبار، بكلماتك أنت، والدليل الذي جمعه QA Wrap تلقائيا. لا يحتوي على قيم كعكات (cookies) ولا قيم حقول كلمات المرور، بحكم البنية (سياسة الخصوصية هي الآلية). لكنه ليس مستندا منقحا مع ذلك: يحتوي على العناوين التي زرتها والقيم التي كتبتها في حقول عادية غير حقول كلمات المرور في الصفحة التي كنت تختبرها. اقرأه قبل أن ترسله. إن حملت الصفحة قيد الاختبار بيانات عميل حقيقي ولم تكن تستخدم إخفاء QA Wrap، فتلك البيانات موجودة في التصدير، تماما كما لو كانت في تسجيل شاشة أو تقرير عطل مكتوب يدويا. أخف ما يهم قبل التسجيل، أو نقح ملف التصدير بعده؛ لا يستطيع مسار الدعم هذا فعل أي منهما نيابة عنك.

من فضلك لا ترسل رمزا، أو رابط ويب هوك، أو قيمة كعكة. لا شيء هنا يحتاج إلى واحد منها لإعادة إنتاج عطل، وأي بيانات اعتماد في رسالة أصبحت بيانات اعتماد عليك تدويرها الآن.

ما الذي يجعل التقرير قابلا للتنفيذ

بترتيب تقريبي لمقدار الوقت الذي يوفره كل بند، فوق ما يرفقه المسار أعلاه بالفعل:

  1. البنية. qaw.about.build في وحدة تحكم العامل، أو الرقم على بطاقة الإضافات.
  2. المتصفح ونسخته. Chrome أو Edge، ورقم النسخة (انظر القيود المعروفة أدناه). هو الفارق بين عطل ورفض متوقع.
  3. ما ضغطته، وما حدث بدلا منه. "لم يحدث شيء" إجابة حقيقية ومفيدة. قلها بوضوح بدل تخمين سبب.

التشخيص

ما الذي سيخبرك به المنتج عن نفسه

لا شيء يرفع، فلا أحد يستطيع البحث عما حدث على جهازك. هذه طرق معرفة ذلك محليا. من المستودع، إن كان بحوزتك:

اعرض الجدول
الأمرما يفعله
npm testمئات التأكيدات، بلا متصفح وبلا شبكة، خلال ثوان.
node tools/clickthrough.mjsيضغط كل زر في الواجهة.
node tools/diagnose.mjsيعمل على قاعدة البيانات الحقيقية والعامل قيد التشغيل.

قيود معروفة

أمور هي قرارات، لا أعطال

اعرض الجدول
القيدالسبب
لا يشغل WebKit ولا Firefox من الامتداد لا يستطيع امتداد بدء عملية. تصدر الجلسة كمشروع Playwright قابل للتشغيل بدلا من ذلك، حيث توجد المحركات الحقيقية.
لا تبلغ تغطية الفروع لا تستطيع تغطية كتل V8 التمييز بين else لم ينفذ وعودة مبكرة لم تنفذ، ورقم قريب من تغطية الفروع يقتبس على أنه تغطية فروع.
لن يبدأ تسجيل على تبويب لم تستخدم الامتداد عليه للتو حماية من Chrome، لا منا. انقر أيقونة QA Wrap وذلك التبويب في المقدمة، ثم اضغط تسجيل.
أدوار مساحة العمل ليست أمانا تفرض محليا، فيستطيع أي شخص تغيير إعداداته الخاصة. تمنع الأخطاء، لا الخبث، وتقول شاشة الاستيراد ذلك في كل مرة.
قد يفلت الطلب الأول على صفحة من قاعدة تصل القواعد إلى الصفحة بعد بضع مللي ثانية من document_start. متأصل في المنصة.

الاستجابة

ما يمكنك توقعه ردا

QA Wrap أداة يقوم عليها شخص واحد بلا عقد دعم مدفوع كإعداد افتراضي. الجدول أدناه مذكور كنوايا، لأن ذلك ما هو عليه. إن احتاجت مؤسستك مستوى خدمة تعاقديا، فهذا وحده ليس ذلك، وهذا سبب حقيقي للسؤال.

اعرض الجدول
نوع البلاغالنيةالتحفظ الصادق
الإقرار بالاستلامخلال بضعة أيام عملشخص واحد، منطقة زمنية واحدة، وأعمال أخرى
عطل يفقد بيانات مسجلةأعلى أولوية موجودةالفئة الوحيدة من الأعطال التي تبرر ترك كل شيء آخر
عطل يمنع ميزة كاملةالإصدار التالي"الإصدار التالي" ليس تاريخا
أي شيء تجميلي، أو تحسينخارطة الطريق، أو أبداخارطة الطريق قائمة نوايا مرتبة بالأولوية، وتقول ذلك
مشكلة أمنيةفي اليوم نفسه إن كانت قابلة للوصول من صفحةأبلغ عنها سرا، لا في قناة مشتركة
التوفرلا وعد بشيءلا مناوبة ولا جدول تناوب

غير مقدم، بوضوح

  • لا التزام بوقت تشغيل، لأنه لا شيء مستضاف ليكون قيد التشغيل.
  • لا استرجاع بيانات. لا أحد يملك نسخة من جلساتك. صدر ما يهمك.
  • لا ضمان توافق مع نسخة مستقبلية من Chrome. لا يزال Manifest V3 يتغير، ومجموعة الاختبارات هي نظام الإنذار المبكر.

الإبلاغ عن مشكلة أمنية

سرا، إلى القائم على الصيانة، لا في قناة مشتركة ولا في تذكرة يقرؤها أي أحد. السطح الجدير بمعرفته: يحمل الامتداد إذن <all_urls>، ويصحح fetch و XMLHttpRequest في كل صفحة، ويستطيع قراءة الكعكات. لا يسجل شيئا حتى يسلح، لكل نافذة على حدة، ويعود إلى ذلك حين يغلق المتصفح. الشيء الجدير حقا بالإبلاغ عنه هو أي شيء يعمل بينما الامتداد نائم. تلك هي الحدود التي يقوم عليها التصميم كله.

More from Nader

المزيد من نادر