ملفا المخطط والجهاز
يصف كائن JSON واحد كل شيء: غسالتك ومكواتك تحت machine، وإدخال واحد لكل كومة غسيل تحت chart. تقبل كل من CLI ووظيفة الرفع في تطبيق الويب هذا الشكل بالضبط — وهو ما تتحقق منه دالة parseConfig الخاصة بـ@washy-washy/core.
{ "machine": { "washer": { "..." }, "iron": { "..." } }, "chart": [{ "clothing_type": "..." }]}المخطط
Section titled “المخطط”كل إدخال تحت chart يمثّل كومة واحدة:
| الحقل | ما يوضع فيه |
|---|---|
clothing_type |
الاسم الذي تُطلقه على الكومة — وهو عنوان البطاقة |
detergent |
أي منظّف تستخدمه وبأي كمية |
fabric_softener |
yes أو no |
temperature |
درجة حرارة تتيحها غسالتك |
spin |
سرعة عصر تتيحها غسالتك |
duration |
تقريبًا مدة تشغيل البرنامج، بصيغة ~H:MM |
program |
وضع على القرص، مكتوب بالضبط كما هو على اللوحة الأمامية |
options |
أزرار خيارات، مفصولة بخط عمودي؛ تُترك فارغة إن لم توجد |
ironing |
yes أو no — هل تكويها أصلاً أم لا |
ironing_notes |
نص حر: كيف تكويها، أو لماذا لا تفعل. غالبًا ما يكون فارغًا |
iron_setting |
وضع على منظم الحرارة. يُترك فارغًا حين تكون ironing هي no |
drying |
نص حر: كيف تجفّفها |
colour_group |
white أو colour أو dark أو sport أو any |
mix_tags |
مفصولة بخط عمودي: lint-shedder، lint-magnet، dye-bleeder، solo |
notes |
أي شيء آخر يستحق الذكر |
يُتحقّق من كل قيمة تخصّ الجهاز — program وtemperature وspin وoptions وiron_setting — مقابل ما يتيحه machine الخاص بك، بحيث يفشل أي خطأ إملائي مع تحديد الصف والعمود بدقة، بدلاً من إنتاج بطاقة تطلب منك تدوير القرص إلى وضع غير موجود أصلاً.
الجهاز
Section titled “الجهاز”يسرد machine.washer تسميات القرص بترتيبها الفعلي، إضافةً إلى درجات الحرارة وسرعات العصر وأزرار الخيارات التي تعرضها الشاشة. ويسرد machine.iron أوضاع منظم الحرارة، من الأبرد إلى الأسخن. انسخ كل تسمية تمامًا كما هي مطبوعة أمامك، بأي لغة كانت — فلا شيء هنا يترجم تسمية موجودة على اللوحة الأمامية أبدًا، لأن مخططًا تضطر لترجمته مجددًا وأنت واقف أمام الجهاز أسوأ من عدم وجود مخطط أصلاً.
ترتيب washer.programs أساسي وحاسم: الإدخال الأول هو وضع الإيقاف، ويُرسم عند الساعة الثانية عشرة، وزاوية كل علامة أخرى تُشتق من موضعها في القائمة. إغفال إدخال واحد لا يكتفي بحذفه — بل يُزيح كل علامة تليه.
محرر /config/machine الخاص بتطبيق الويب يكتب هذا الشكل نفسه — وإعادة ترتيب قائمة البرامج هناك تفعل بالضبط ما تفعله إعادة ترتيب مصفوفة JSON:
{ "washer": { "name": "Generic front loader", "capacity": "1–8 kg", "programs": ["Off", "Cottons", "Delicates / Silk", "Wool"], "temperatures": ["cold", "20", "30", "40", "60", "90"], "spins": ["0", "400", "600", "800", "1200", "1400"], "options": ["Speed", "Eco", "Easy Iron", "Extra Rinse"] }, "iron": { "name": "Generic steam iron", "settings": [ { "key": "min", "dots": "", "label": "MIN", "detail": "no heat", "steam": false }, { "key": "3", "dots": "•••", "label": "•••", "detail": "cotton, linen · 200 °C", "steam": true } ] }}ما يمكن غسله معًا
Section titled “ما يمكن غسله معًا”لا يمكن لكومتين أن تشتركا في حوض واحد إلا حين تتحقق كل هذه الشروط، بالترتيب التالي — وأول شرط يفشل هو السبب الذي كانت ستُظهره مصفوفة التوافق:
- لا تحمل أي منهما وسم
solo. - إذا كانت إحداهما
lint-shedder، يجب أن تكون الأخرى كذلك أيضًا. - تتطابق قيمة
colour_groupلديهما (anyتطابق كل شيء). - تتطابق
programوtemperatureوspinومجموعةoptionsتمامًا.
تندمج الكوَم في بطاقة واحدة، تشترك في رسم واحد للقرص، حين يتفق كل ما تضبطه فعليًا: البرنامج، ودرجة الحرارة، والعصر، والخيارات، وما إذا كان المنعّم يُضاف، وموضع منظم حرارة المكواة. أما الحقول النصية (detergent وdrying وnotes) فهي مستبعدة عمدًا من هذا التحقق — يمكن لكومتين أن تحتاجا منظّفًا مختلفًا وتظلا مع ذلك على بطاقة واحدة، وتُدرج البطاقة السطرين معًا مقابل الكومة التي يخصّ كل منهما.