16 KiB
گزارش ممیزی ضعفهای حلنشده پروژه
این سند فقط روی مشکلات حلنشده و باقیمانده تمرکز دارد و مواردی را که در auditهای قبلی رفع شدهاند، از فهرست ضعفهای فعال خارج میکند.
مبنای این گزارش:
- کد فعلی پروژه
- سند
Ai/API_RELIABILITY_AUDIT_FA.md - سند
Backend/AI_ROUTE_CONNECTION_AUDIT.md - سند قبلی
PROJECT_WEAKNESSES_AUDIT_FA.md
خلاصه مدیریتی
مهمترین ضعفهای حلنشده فعلی:
- هنوز بین
docs،spec، routeهای واقعی و ownership سرویسها چند ناهماهنگی مهم وجود دارد. - بخشی از flowها هنوز
contract-only،partially_implementedیاtransitionalهستند. - در چند سرویس مهم هنوز الگوی
silent fallbackو بازگشت{}یا[]دیده میشود. - بعضی adapterهای mock هنوز در runtime code حضور دارند و میتوانند باعث false confidence شوند.
- چند فایل کلیدی backend و AI هنوز بیش از حد بزرگ و چندمسئولیتی هستند.
- migration معماری
farm_dataهنوز کامل نشده و بعضی relationهای transitional باقی ماندهاند. - بخشی از تستها هنوز بیشتر contract/proxy-oriented هستند تا behavior واقعی production.
مواردی که دیگر ضعف فعال محسوب نمیشوند
این موارد در گزارش حاضر حلشده در نظر گرفته میشوند و جزو مشکلات باز نیستند:
- provider پیشفرض AI در
Ai/config/settings.pyدیگر رویmockنیست. - استفاده از
mockدر محیطهای non-dev/non-test درAi/config/settings.pyبا startup check محدود شده است. - وابستگی مستقیم
Backend/irrigation/services.pyبهmock_dataحذف شده است. - naming قبلی مبتنی بر
mock_dataدر بعضی سرویسها مانند dashboard و irrigation تا حدی تمیز شده است.
1) ناهماهنگی بین route واقعی، docs و contract
این هنوز یکی از اصلیترین ضعفهای پروژه است.
نشانهها
POST /api/farm-alerts/timeline/هنوزmissingاست و route واقعی ندارد.- endpointهای status برای پیشنهاد آبیاری و کوددهی هنوز
contract_onlyهستند:GET /api/irrigation/recommend/{task_id}/status/GET /api/fertilization/recommend/{task_id}/status/
- بخشی از routeهای irrigation در backend هنوز با routeهای واقعی AI کاملاً reconcile نشدهاند.
- بعضی مسیرهای crop simulation روی AI واقعی هستند ولی canonical backend هنوز زیر
yield-harvest/*تعریف میشود.
ریسک
- فرانت یا تیمهای دیگر ممکن است روی endpointهایی حساب کنند که public-ready نیستند.
- onboarding توسعهدهنده جدید سخت میشود.
- اختلاف بین semantics واقعی و docs باعث خطای integration میشود.
شواهد
Backend/AI_ROUTE_CONNECTION_AUDIT.md:40Backend/AI_ROUTE_CONNECTION_AUDIT.md:41Backend/AI_ROUTE_CONNECTION_AUDIT.md:66Backend/AI_ROUTE_CONNECTION_AUDIT.md:68Backend/AI_ROUTE_CONNECTION_AUDIT.md:72Backend/AI_ROUTE_CONNECTION_AUDIT.md:74Ai/API_RELIABILITY_AUDIT_FA.md:50
اقدام پیشنهادی
- برای هر endpoint فقط یکی از این وضعیتها نهایی شود:
implementeddeprecatedcontract-onlymissing
- docs داخلی و frontend-facing از هم تفکیک شوند.
- مسیرهای AI internal و backend public با برچسب ownership مشخص شوند.
2) باقیماندن silent fallback و empty-shape handling
با اینکه بخشی از error handling بهتر شده، این ضعف هنوز حل نشده است.
نقاط مهم
- در
Backend/irrigation/services.pyهنوز helperهایی وجود دارند که در حالت invalid/empty با{}یا[]برمیگردند. - در برخی سرویسهای backend و AI هنوز failure بهصورت شفاف surface نمیشود.
- این الگو مخصوصاً برای debugging و observability مشکلساز است.
شواهد
Backend/irrigation/services.py:126Backend/irrigation/services.py:138Backend/irrigation/services.py:150Backend/irrigation/services.py:173Backend/irrigation/services.py:189Backend/irrigation/services.py:208Backend/yield_harvest/views.py:137Ai/rag/embedding.py:34
ریسک
- سیستم ظاهراً پاسخ موفق میدهد ولی داده ناقص یا تحریفشده است.
- root cause واقعی پشت empty response پنهان میشود.
- قرارداد خروجی API برای empty-state و error-state یکدست نیست.
اقدام پیشنهادی
- empty-state مجاز فقط برای caseهای مستند و قابلتشخیص باشد.
- برای fallbackها
warning,reason,source,statusیا failure contract صریح برگردد. - broad exception handling محدود و log-aware شود.
3) حضور mock adapterها در runtime code
گرچه provider پیشفرض دیگر mock نیست، اما حضور mock در runtime code هنوز یک ضعف معماری است.
نقاط مهم
Ai/location_data/soil_adapters.pyهنوزMockSoilDataAdapterدارد.Ai/weather/adapters.pyهنوزMockWeatherAdapterدارد.- هر دو adapter رفتار synthetic و حتی delay مصنوعی دارند.
شواهد
Ai/location_data/soil_adapters.py:102Ai/location_data/soil_adapters.py:107Ai/weather/adapters.py:76Ai/weather/adapters.py:77Ai/weather/adapters.py:275
ریسک
- realistic mock میتواند با داده واقعی اشتباه گرفته شود.
- اگر تنظیمات محیط اشتباه شود، نتیجه تستمانند بهجای رفتار production دیده میشود.
- اعتماد کاذب در validation دستی ایجاد میکند.
اقدام پیشنهادی
- mock adapterها فقط در
dev/testload شوند. - همه responseهای mock برچسب اجباری
source=mockوis_synthetic=trueداشته باشند. - delay مصنوعی از runtime عادی حذف و فقط در test fixture نگه داشته شود.
4) debt معماری در Backend/device_hub/services.py
این فایل هنوز یکی از سنگینترین نقاط technical debt است.
مسئله
فایل همزمان چند مسئولیت را انجام میدهد:
- ingestion
- farm-data forwarding
- chart building
- anomaly payload shaping
- history formatting
همچنین هنوز fallbackهای empty و الگوهای نرمِ failure در آن دیده میشود.
شواهد
Backend/device_hub/services.py:13Backend/device_hub/services.py:20Backend/device_hub/services.py:64Backend/device_hub/services.py:152Backend/device_hub/services.py:181Backend/device_hub/services.py:636Backend/device_hub/services.py:685Backend/device_hub/services.py:725
ریسک
- تغییرات کوچک، regressionهای پیشبینینشده ایجاد میکند.
- تستپذیری و نگهداری فایل پایین است.
- ownership دقیق data flow سخت فهمیده میشود.
اقدام پیشنهادی
- split به ماژولهای جدا برای ingestion، forwarding، analytics و formatters
- حذف mock-oriented chart shaping از مسیر runtime
- تعریف service boundary روشن برای sensor processing
5) debt معماری در Backend/farm_alerts/services.py و semantics مبهم tracker
مسئله
farm-alerts/trackerدر backend فعلاً snapshot/cached semantics دارد، نه live AI request-time.- فایل service همزمان context build، persistence، snapshot update و notification save را انجام میدهد.
شواهد
Backend/farm_alerts/views.py:57Backend/farm_alerts/services.py:13Backend/AI_ROUTE_CONNECTION_AUDIT.md:40
ریسک
- مصرفکننده API ممکن است این endpoint را live AI تصور کند.
- مرز بین cache، snapshot و inference شفاف نیست.
- نگهداری و تغییر behavior آینده پرریسک میشود.
اقدام پیشنهادی
- semantics endpoint در docs و response metadata صریح شود.
- service به ماژولهای کوچکتر مثل
tracker_context,tracker_sync,snapshots,notificationsشکسته شود.
6) ضعفهای باقیمانده در access control
مسئله
Backend/access_control/services.pyهنوز بزرگ و چندمنظوره است.- بخشی از exceptionها swallowed میشوند.
- parsing داده درخواست در همان لایه authorization پیچیده شده است.
- اگر dependencyهایی مثل OPA ناپایدار باشند، degradation policy هنوز کاملاً شفاف نیست.
شواهد
Backend/access_control/services.py:321Backend/access_control/services.py:332Backend/access_control/services.py:343
ریسک
- رفتار authorization در failure modeها غیرقابل پیشبینی میشود.
- fail-open / fail-closed policy ممکن است ناهمگون شود.
اقدام پیشنهادی
- policy هر endpoint برای fail-open یا fail-closed مستند و enforce شود.
- cache exceptionها با logging و classification مناسب مدیریت شوند.
- request parsing از authorization logic جدا شود.
7) ضعفهای باقیمانده در Backend/plants
این بخش نسبت به قبل بهتر شده، اما هنوز canonical backend CRUD کاملاً نهایی نیست.
مسئله
- backend plant catalog هنوز از نظر تمام operationهای canonical کاملاً تثبیت نشده است.
- بخشی از تفاوت AI route و backend public route هنوز باقی است.
- مسیر incremental sync/change-feed یا webhook/task-based sync هنوز بهصورت روشن نهایی نشده است.
شواهد
Backend/AI_ROUTE_CONNECTION_AUDIT.md:58Backend/AI_ROUTE_CONNECTION_AUDIT.md:59Backend/AI_ROUTE_CONNECTION_AUDIT.md:60Backend/plants/services.py:94
ریسک
- source-of-truth بین catalog backend و مصرف AI ممکن است drift کند.
- عملیات مدیریتی catalog بهصورت کامل و یکنواخت قابل اتکا نیست.
اقدام پیشنهادی
- CRUD canonical backend کامل و صریح شود.
- مکانیزم sync از backend به AI از push ساده به مدل change-feed یا task-based نزدیک شود.
8) باقیماندن contract/mock catalog در Backend/external_api_adapter/json/ai/index.json
مسئله
این فایل هنوز شامل endpointهایی است که route واقعی production نیستند یا فقط contract-only هستند.
شواهد
Backend/external_api_adapter/json/ai/index.jsonBackend/AI_ROUTE_CONNECTION_AUDIT.md:94Ai/API_RELIABILITY_AUDIT_FA.md:57
ریسک
- این فایل ممکن است بهاشتباه بهعنوان source-of-truth production خوانده شود.
- mock/spec با implementation واقعی قاطی میشود.
اقدام پیشنهادی
- endpointهای mock/spec از routeهای واقعی جدا برچسبگذاری شوند.
- این فایل صریحاً بهعنوان
contract/mock catalogحفظ شود، نه production route registry.
9) migration ناتمام در Ai/farm_data
مسئله
معماری جدید farm_data جهت درستی دارد، اما migration آن کامل نشده است.
نقاط باقیمانده
- relation قدیمی
SensorData.plantsهنوز transitional است. - همه consumerها هنوز کامل migrate نشدهاند.
- strategy نهایی برای sync conflict و reconciliation کامل نشده است.
شواهد
Ai/API_RELIABILITY_AUDIT_FA.md:64Ai/farm_data/models.py:111
ریسک
- دو source-of-truth موقت همزمان فعال میمانند.
- ناسازگاری assignment گیاه، sensor و farm ممکن است رخ دهد.
اقدام پیشنهادی
- relation قدیمی بعد از migration کامل consumerها حذف شود.
- backfill و reconciliation task رسمی تعریف شود.
- source-of-truth نهایی در docs و schemaها تثبیت شود.
10) ضعف reliability در Ai/rag/embedding.py
مسئله
- مدیریت خطای provider call هنوز حداقلی است.
- retry/backoff/circuit-breaker مشخص ندارد.
شواهد
Ai/rag/embedding.py:10Ai/rag/embedding.py:34
ریسک
- failureهای موقت provider میتوانند تجربه ناپایدار ایجاد کنند.
- خطاها خوب classify نمیشوند.
اقدام پیشنهادی
- retry محدود با backoff
- تفکیک خطاهای موقت و دائمی
- failure contract شفاف برای dependency بیرونی
11) تستها هنوز در چند بخش بیشتر proxy/contract محور هستند
مسئله
بخشی از تستها route proxy شدن به AI یا mock call شدن dependency را چک میکنند، نه لزوماً behavior واقعی production و edge-caseهای داده.
نشانهها
- در
Backend/yield_harvest/tests.pyتمرکز زیادی روی proxy contract دیده میشود. - در چند بخش integration واقعی کمتر از contract mocking پوشش داده شده است.
ریسک
- drift بین قرارداد تستشده و رفتار واقعی runtime کشف نمیشود.
- regressionهای مربوط به payload semantics، empty-state و partial failure دیر دیده میشوند.
اقدام پیشنهادی
- تستهای behavior-oriented برای failure contract، empty-state و payload validation اضافه شود.
- برای flowهای critical، integration test سبک و کنترلشده بیشتر شود.
اولویتبندی اصلاح
P0
- reconcile کامل route/doc/spec
- حذف یا شفافسازی
contract-onlyendpointها - حذف
silent fallbackهای باقیمانده در flowهای حساس
P1
- split فایلهای چندمسئولیتی مانند
device_hub/services.pyوfarm_alerts/services.py - محدودکردن runtime mock adapterها به dev/test
- تثبیت ownership و migration در
farm_data
P2
- بهبود reliability برای embedding/provider callها
- تقویت تستهای behavior-oriented
- پاکسازی بیشتر docs قدیمی و واژههای مبهم مثل live/proxy/cached
جمعبندی نهایی
پروژه نسبت به auditهای قبلی در حذف بخشی از وابستگیهای مستقیم به mock و بهبود provider defaults پیشرفت داشته است، اما هنوز این ضعفهای حلنشده باقی ماندهاند:
- ناهماهنگی contract و route واقعی
- endpointهای
missingیاcontract-only - fallbackهای silent
- حضور mock adapter در runtime code
- technical debt در چند service بزرگ
- migration ناتمام در
farm_data - ضعف در behavior-driven validation
بنابراین وضعیت فعلی پروژه را میتوان اینطور جمعبندی کرد:
پایه معماری نسبت به قبل بهتر شده، اما هنوز production-readiness کامل در همه flowها بهصورت یکنواخت حاصل نشده است.