Post

شش لایه‌ی یک کنگره

مهندسی نرم‌افزار یاد می‌دهد که هر بخش یک کار دارد و خرابی از جایی شروع می‌شود که بخشی کار بخش دیگر را بکند. این نوشته همین نگاه را روی ساختار کنگره‌ی آزادی ایران می‌گذارد: شش لایه، این‌که هر کدام در کنگره کجاست، و کجا از هم نشت کرده‌اند.

شش لایه‌ی یک کنگره

من عضو گروه فعالان سیاسی کنگره‌ی آزادی ایران هستم، اما عضو مجمع نیستم. در ساختن جمهور، بستری برای مشارکت و رای‌گیری ناشناس و راستی‌آزمایی‌پذیر، شریکم. یکی از بخش‌های این نوشته به همین موضوع می‌رسد، پس در آن بخش ذی‌نفعم؛ این را از پیش می‌گویم تا خواننده خودش داوری کند. آن‌چه در پی می‌آید نظر شخصی من است و موضع هیچ نهادی نیست.

یک جدول از دنیای نرم‌افزار

در مهندسی نرم‌افزار، برنامه را به لایه‌هایی تقسیم می‌کنند که هر کدام مسئولیت روشنی دارند. نامش «تفکیک دغدغه‌ها» (Separation of Concerns) است. یک تقسیم رایج شش لایه دارد:

لایه مسئولیت
منطق کسب‌وکار (Business Logic) قاعده‌ها، داوری‌ها، آستانه‌ها
ورودی/خروجی و ماندگاری (I/O & Persistence) ثبت و نگه‌داری داده
نمایش و انتقال (Presentation / Transport) قالب‌ها و مجراهای ورود و خروج
اتصال (Integration) ارتباط با سیستم‌های بیرونی
دغدغه‌های سراسری (Cross-Cutting Concerns) پایش، امنیت، پایداری
هماهنگ‌سازی (Orchestration) به هم وصل کردن اجزا و به راه انداختن کار

این تقسیم سلیقه‌ای نیست. تجربه‌ی چند دهه است. وقتی لایه‌ی نمایش شروع به تصمیم‌گیری می‌کند، یا لایه‌ی هماهنگ‌سازی قاعده می‌سازد، خطا از جایی سر درمی‌آورد که کسی انتظارش را ندارد و پیدا کردنش سخت می‌شود. خرابی معمولن از خودِ لایه‌ها نیست؛ از مرز میان آن‌هاست.

یک سازمان سیاسی هم، به یک معنا، سیستمی است که ورودی می‌گیرد، تصمیم می‌گیرد، حافظه دارد، با بیرون حرف می‌زند و باید از خودش محافظت کند. پس می‌شود پرسید: این شش مسئولیت در کنگره کجا هستند؟

شش لایه، در کنگره

آن‌چه در این جدول می‌آید از مصوبه‌ی تاسیس کنگره است، یعنی سندی که در ۲۸ فروردین ۱۴۰۵ تصویب شد و سه بار اصلاح شده است:

لایه در کنگره نهاد یا ابزار
منطق کسب‌وکار کنگره به چه باور دارد و چطور تصمیم می‌گیرد شش اصل؛ مصوبه‌ی تاسیس؛ مجمع، که خط‌مشی را تعیین می‌کند و قاعده‌ها را تغییر می‌دهد؛ کمیسیون حقوقی، که قاعده‌ها را تفسیر می‌کند. آستانه‌ها هم در همین لایه‌اند: ۲۰٪ برای به رای گذاشتن یک طرح، ۵۰٪ برای جلسه‌ی فوری، سهمیه‌ی دست‌کم ۳۰٪ زنان
ورودی/خروجی و ماندگاری حافظه‌ی نهادی: چه تصمیمی، به دست چه کسی، در کدام نسخه دبیرخانه، در سازمان اجرایی، که همه‌ی اسناد، جلسات و مکاتبات را ثبت می‌کند؛ فهرست اعضا؛ نسخه‌های مصوبه؛ مشروح مذاکرات مجمع
نمایش و انتقال موضع‌ها چطور و در چه قالبی به جهان می‌رسند بیانیه‌ها، که شورای مرکزی امضا می‌کند؛ وب‌سایت و شبکه‌های اجتماعی؛ فارسی در اولویت و انگلیسی عقب‌تر. هیات رئیسه‌ی مجمع، به حکم مصوبه، سخن‌گوی کنگره نیست
اتصال پیوند با سیستم‌هایی که کنگره صاحبشان نیست حزب‌های عضو، از راه کمیسیون تشکل‌های سیاسی؛ شریک‌های بین‌المللی؛ رسانه‌ها؛ و دشوارترینش، مردم داخل ایران
دغدغه‌های سراسری آن‌چه همه‌ی نهادها باید رعایت کنند هیات نظارت (پایش و بازرسی)؛ امنیت در برابر سرکوب فراسرزمینی؛ سلامت نهادی و پرهیز از نفوذ بیرونی؛ سهمیه‌ی جنسیتی؛ عدم خشونت
هماهنگ‌سازی تبدیل تصمیم به کار، با برنامه شورای مرکزی، که هر هفته جلسه دارد و فعالیت سیاسی و اجرایی را هدایت می‌کند؛ سازمان اجرایی، که اجرا می‌کند و بازخوردها را رصد می‌کند؛ هیات رئیسه، که فرایند و دستور جلسه‌ی مجمع را پیش می‌برد؛ و گروه‌های عضویت، که اعضا را برای انتخاب کرسی‌های مجمع دسته‌بندی می‌کنند

روی کاغذ، این طراحی بدی نیست. هر شش مسئولیت صاحبی دارند و مصوبه میان تصمیم، اجرا و نظارت مرز کشیده است. پرسش این است که در عمل، مرزها کجا نگه داشته شده‌اند و کجا نه.

آن‌چه این نگاه نشان می‌دهد

۱. هماهنگ‌کننده‌ای که قاعده می‌سازد

مصوبه به شورای مرکزی اجازه می‌دهد از طرف کنگره موضع بگیرد:

«شورای مرکزی می‌تواند از طرف کنگره اعلام موضع کند و باید در خصوص تمام مواضع و فعالیت‌های خود به مجمع پاسخگو باشد.»

به زبان نرم‌افزار، این یعنی لایه‌ی هماهنگ‌سازی گاهی کار لایه‌ی قاعده را می‌کند. پیامدش را دیده‌ایم. در ۲۷ تیر ۱۴۰۵ شورای مرکزی جنگ را محکوم کرد و سه حزب کورد عضو کنگره علنی از آن بیانیه فاصله گرفتند. این را پیش‌تر در «دو ائتلاف در یک کنگره» نوشته‌ام.

راه‌حل مهندسی آشناست: لایه‌ی هماهنگ‌سازی فقط قاعده‌هایی را اجرا می‌کند که از پیش نوشته شده‌اند. جالب این است که خودِ مصوبه همین را می‌گوید. شورا باید «در قالب خط مشئ و اهداف اعلام شده توسط مجمع» تصمیم بگیرد. کمبود در طراحی نیست؛ در این است که آن خط‌مشی هنوز به شکل موضع‌های ثابت و مصوب نوشته نشده است. اگر مجمع درباره‌ی موضوع‌های تکرارشونده (جنگ، مذاکره، اعدام، حمله به حزب‌های کورد) موضع‌های ثابت تصویب کند، شورا می‌تواند سریع و بی‌خطر آن‌ها را به کار ببندد. هر چه بیرون از این موضع‌ها بماند، راه دیگری دارد، و مصوبه آن را هم پیش‌بینی کرده است: ۵۰٪ اعضای مجمع یا کنگره می‌توانند جلسه‌ی فوری بخواهند.

۲. دو مدل از یک دامنه

در «طراحی دامنه‌محور» (Domain-Driven Design) مفهومی هست به نام «بافت مرزبندی‌شده» (Bounded Context). یک کلمه در دو بخش از یک سیستم می‌تواند دو معنای متفاوت داشته باشد. «مشتری» برای بخش فروش یک چیز است و برای بخش پشتیبانی چیز دیگر. خطای رایج این است که این دو را به زور در یک مدل واحد ادغام کنیم.

کنگره دو بافت دارد، نه یکی. جریان‌های سراسری بر سر شکل دولت رقابت می‌کنند. حزب‌های ملی و منطقه‌ای بر سر قلمرو، منابع و تضمین امنیت چانه می‌زنند. کلمه‌ها یکی‌اند و معناها نه: «حق تعیین سرنوشت»، «جوامع» در برابر «گروه‌های قومی، زبانی و مذهبی»، «ملت».

اصلاحیه‌ی مواد ۱ تا ۴، که کنگره‌ی ملیت‌ها پیشنهاد داده بود و در ۱۷ خرداد ۱۴۰۵ تصویب شد، نمونه‌ی همین است. متن به‌صورت یک‌جا به رای گذاشته شد، نه بند به بند، و نامه‌ی بیست عضو که وقت بیش‌تر می‌خواستند به دستور جلسه نرسید. به زبان نرم‌افزار، دو مدل ناسازگار در یک طرح‌واره (schema) ادغام شد، بی‌آن‌که کسی میانشان ترجمه کند. اختلاف حل نشد؛ فقط از دستور جلسه بیرون رفت.

پاسخ طراحی دامنه‌محور این است که میان دو بافت یک «لایه‌ی ترجمه» (Translation Layer) با قرارداد روشن بگذاریم، نه این‌که یکی را در دیگری حل کنیم. در کنگره، کمیسیون تشکل‌های سیاسی می‌تواند همین لایه باشد، اگر قراردادش نوشته شود: کنگره از طرف حزب‌ها چه چیزهایی را می‌تواند بگوید و چه چیزهایی را نه.

نیمی از این لایه همین حالا کار می‌کند. همین کمیسیون نامزدهای پنج کرسی حزبی شورای مرکزی را معرفی می‌کند، و در ۵ مهر حزب دموکرات کوردستان ایران، که انتخابات شورای نخست را تحریم کرده بود، یکی از این کرسی‌ها را گرفت. حزب‌ها حالا در لایه‌ی هماهنگ‌سازی نشسته‌اند؛ قرارداد ترجمه هنوز نوشته نشده است. هر چه حضورشان در شورا پررنگ‌تر شود، نبودِ این قرارداد گران‌تر تمام می‌شود.

۳. حافظه‌ای که دیده نمی‌شود

مصوبه روشن است:

«مشروح مذاکرات مجمع، گزارش های نهایی مشورت‌ها و مصوبات آن در دبیرخانه کنگره ثبت شده و به صورت عمومی منتشر خواهد شد.»

صورت‌جلسه‌های شورای مرکزی هم باید در دبیرخانه ثبت شوند. تا جایی که من دیده‌ام، هیچ‌کدام از این‌ها روی وب‌سایت کنگره نیست. مصوبه‌ی تاسیس سه بار اصلاح شده و نسخه‌ی انگلیسی سایت متن آن را ندارد.

در نرم‌افزار به این می‌گویند نبودِ «منبع واحد حقیقت» (Single Source of Truth). وقتی یک متن مرجع نباشد، هر اختلافی با بحث بر سر این شروع می‌شود که کدام نسخه معتبر است، پیش از آن‌که به خودِ مسئله برسد. حافظه ارزان‌ترین لایه برای درست کردن است، و همه‌ی لایه‌های دیگر روی آن بنا شده‌اند.

۴. سیستمی که لاگ ندارد

هیات نظارت موظف است هر ماه گزارش بازرسی‌اش را به مجمع بدهد. سازمان اجرایی موظف است بازخوردهای فعالیت کنگره را رصد کند. این دو، به زبان نرم‌افزار، «رصدپذیری» (Observability) سیستم‌اند: همان لاگ‌ها و سنجه‌هایی که به ما می‌گویند چیزی دارد خراب می‌شود، پیش از آن‌که خراب شود.

اگر این گزارش‌ها منتشر نشوند، برای اعضا و برای بیرون، خرابی فقط به شکل گسست علنی دیده می‌شود: خروج دو سازمان جبهه‌ی ملی در ۲۱ تیر، و فاصله‌گیری سه حزب کورد از بیانیه‌ی ۲۷ تیر. این ارزیابی من است، نه داده: گمان می‌کنم هر دو گسست تابستان پیش از علنی شدن نشانه‌هایی داشتند که یک سازوکار پایش منظم می‌توانست زودتر ثبت کند.

۵. لایه‌هایی که درهم رفته‌اند

هیات رئیسه دستور جلسه‌ی مجمع را تنظیم می‌کند، از جمله دستورهایی که شورای مرکزی را پاسخ‌گو می‌کنند. مصوبه هیچ قاعده‌ی ناسازگاری ندارد که مانع شود یک نفر هم‌زمان عضو هیات رئیسه و شورای مرکزی باشد. مدیر اجرایی را هم شورا انتخاب می‌کند و مصوبه نمی‌گوید او می‌تواند در شورا بماند یا نه. در عمل ماند: در انتخابات ۵ مهر، مدیر اجرایی دوباره به عضویت شورا انتخاب شد. این ایرادی به شخص نیست؛ پرسش درباره‌ی جایگاه است. کسی که شورا بر کارش نظارت می‌کند، در همان شورا رای دارد.

در نرم‌افزار به این می‌گویند «وابستگی تنگاتنگ» (Tight Coupling). لایه‌ای که قرار است بر لایه‌ی دیگر نظارت کند، به آن گره خورده است. لازم نیست کسی نیت بدی داشته باشد تا این ساختار مشکل بسازد. مرزی که قاعده ندارد، فقط به حسن نیت آدم‌ها تکیه دارد، و حسن نیت با آدم‌ها عوض می‌شود.

۶. دغدغه‌های سراسری که محلی مانده‌اند

امنیت و ارتباطات در نرم‌افزار نمونه‌های کلاسیک دغدغه‌ی سراسری‌اند. اگر هر بخش امنیت خودش را جداگانه بنویسد، سیستم به اندازه‌ی ضعیف‌ترین بخشش امن است. در کنگره، تا جایی که من می‌بینم، هنوز سیاست مشترکی برای ارتباطات درونی، نگه‌داری داده‌ی اعضا یا برخورد با تهدید تصویب نشده است، و هر بخش با ابزارهایی کار می‌کند که در دسترس بوده. برای سازمانی که اعضایش هدف سرکوب فراسرزمینی جمهوری اسلامی‌اند، این یک جزئیات فنی نیست. این دو باید در سطح کل کنگره تعریف شوند، مثل میان‌افزاری (Middleware) که همه از آن می‌گذرند.

۷. مهم‌ترین اتصال: داخل ایران

یک بار دیگر یادآوری می‌کنم که در این بخش ذی‌نفعم. ماده‌ی ۳ مصوبه می‌گوید:

«شورای مرکزی موظف است شرایط احراز هویت متقاضیان عضویت و همچنین امکان مشارکت امن متقاضیان عضویت غیر‌علنی، مخصوصاً از داخل ایران، را با راه حل های فن‌آورانه به طریقی فراهم کند که ضمن جلوگیری از اختلال و تقلب در سیستم، امکان گسترش شبکه اعضاء به صورت امن مهیا گردد.»

از نگاه معماری، این مهم‌ترین رابط بیرونی کنگره است. کنگره‌ای که در تبعید ساخته شده، مشروعیتش را سرانجام از پیوند با مردم داخل ایران می‌گیرد. هنوز پیاده‌سازی شناخته‌شده‌ای برای این ماده نمی‌بینم. حرف من این نیست که ابزار خاصی باید انتخاب شود. حرفم این است که این رابط اول باید مشخصات داشته باشد: چه چیزی راستی‌آزمایی می‌شود، چه چیزی هرگز ثبت نمی‌شود، چه کسی به چه داده‌ای دسترسی دارد، و چطور می‌شود کل سازوکار را مستقل بازرسی کرد. هر ابزاری، از هر سازنده‌ای، باید با همان مشخصات سنجیده شود.

جایی که تشبیه می‌شکند

یک قید: کنگره نرم‌افزار نیست، و این تشبیه سه جا می‌شکند.

نخست، کنگره قاعده‌های خودش را بازنویسی می‌کند. در نرم‌افزار، قاعده‌ها را صاحب سیستم تعیین می‌کند. در کنگره، ماده‌ی ۶، «اصل توسعه ارگانیک»، کارگروهی را مامور بازنگری ساختار و آیین‌نامه‌ها می‌کند. این‌که چه کسی قاعده را می‌نویسد، خودش مسئله‌ی سیاسی اصلی است، نه یک جزئیات پیاده‌سازی.

دوم، مشروعیت همان درستی نیست. برنامه‌ای که خروجی درست بدهد، درست است. تصمیم یک کنگره فقط وقتی درست است که کسانی که به آن ملزم‌اند، راهی را که به آن رسیده پذیرفته باشند. پس فرایند کندتر، با گزارش اقلیت و رای بند به بند، گاهی طراحی درست است، نه باگی در کارایی. سرعت در این‌جا هدف نیست؛ هزینه‌ای است که گاهی ارزش پرداختن دارد و گاهی ندارد.

سوم، آدم‌ها جزء نرم‌افزار نیستند. یک نفر می‌تواند هم‌زمان رهبر یک حزب، عضو مجمع و عضو شورا باشد. مرز لایه‌ها در یک سازمان سیاسی هرگز به تمیزی کد نیست. به همین دلیل مرزها را باید با قاعده نوشت، نه با فرض.

در پایان

این نگاه پاسخ همه‌چیز نیست. اما یک پرسش ساده به دست می‌دهد که می‌شود از هر تصمیم کنگره پرسید: این کار مال کدام لایه است، و آیا همان لایه دارد انجامش می‌دهد؟

اگر شورا موضعی می‌گیرد که مجمع هرگز تصویب نکرده، لایه‌ها درهم رفته‌اند. اگر تصمیمی گرفته شده که هیچ‌جا ثبت نشده، حافظه کار نمی‌کند. اگر اولین خبری که از یک اختلاف می‌رسد یک بیانیه‌ی علنی است، پایش کار نمی‌کند.

کنگره با آغاز به کار مجمع دوم در ۲۳ شهریور و انتخاب شورای مرکزی دوم در ۵ مهر وارد دوره‌ی تازه‌ای شده است. ده عضو از سیزده عضو شورا تازه‌اند، و انتخابات مجمع سوم هم در پیش است؛ درباره‌اش در «انتخابات مجمع و راه پیش رو» نوشته‌ام. هنوز زود است، و این خوب است: درست کردن مرزها پیش از بار سنگین بسیار ارزان‌تر است تا پس از آن.

This post is licensed under CC BY 4.0 by the author.

© Arman. Some rights reserved.