تحديث كبير آخر - مخطط حرق/انخفاض (burn-up/down chart) عبر الإنترنت (كبديل لطيف لاستعلام مستكشف البيانات المضمن الحالي)
تمت إضافة عرض مخطط سير العمل الجديد في الاكتشاف (discovery) مع محدد عرض مشترك (قائمة / كانبان / مخطط) وعنصر تحكم في الفترة (من أسبوع إلى 12 أسبوعًا).
تم تنفيذ واجهة برمجة تطبيقات بيانات الحرق/الانخفاض (burn-down data API) على /discourse-workflow/charts.json بالإضافة إلى تكامل المسار /workflow/charts.
يتم تحديد الوصول إلى المخطط بشكل منفصل: المسؤولون والمجموعات المسموح لها بعرض مخططات سير العمل (workflow_charts_allowed_groups)؛ يتم إخفاء المخطط عن المستخدمين غير المصرح لهم.
تم تشديد حمولة المخطط (Chart payload) لتقتصر على سياق سير العمل المحدد فقط (selected_workflow_id, selected_workflow_name, series)، مما أدى إلى إزالة سطح كتالوج سير العمل غير المستخدم.
تمت إضافة تغطية الطلبات/النظام وتقوية تجربة المستخدم: نوافذ أسبوع كاملة، تسميات محاور آمنة للتاريخ المحلي، تسميات محدد عرض يمكن الوصول إليها، وفحوصات تراجع عرض/حالة المخطط.
يجب أن تكون ميزة المخططات متوافقة مع جميع سير العمل:
لا يتطلب المخطط التوافق مع كانبان (Kanban)، لذا فهو يعمل مع سير العمل غير المتوافق مع كانبان.
يظهر المخطط فقط عندما يتم تحديد قائمة سير العمل الحالية على سير عمل واحد بالضبط.
يجب أن يكون لدى المستخدم إذن الوصول إلى المخطط (مسؤول أو ضمن المجموعات المسموح لها بعرض مخططات سير العمل workflow_charts_allowed_groups).
إذا كان متوافقًا مع كانبان، يعرض القائمة المنسدلة القائمة/كانبان/المخطط.
إذا لم يكن متوافقًا مع كانبان، يمكن للقائمة المنسدلة أن تعرض القائمة/المخطط (عندما يتحقق الشرطان المذكوران أعلاه).
main ← charts
merged 09:55PM - 23 Feb 26 UTC
## Summary
This PR delivers a workflow discovery UX and reporting expansion… with three integrated workflow views (List, Kanban, Chart), stronger runtime hardening, and broader automated coverage.
It adds charting for workflow step counts over time, improves list/kanban SPA behavior, aligns job loading/naming with Zeitwerk autoloading conventions, and tightens chart mode visibility so only authorized users see
Chart in the workflow view selector.
## Functional Improvements
1. Discovery now supports a unified view selector:
- List (topic table)
- Kanban (actionable board)
- Chart (burn down trend)
- Selector appears contextually based on compatibility/scope.
2. Workflow charts:
- New chart endpoint and UI integration (/workflow/charts and chart mode in /workflow).
- Period selector from 1 to 12 weeks.
- Full-week windows (Sunday to Saturday).
- Per-step series with step/category color mapping.
- Payload now returns selected workflow metadata only (no full workflow catalog).
3. Chart permissions and UX:
- New setting: workflow_charts_allowed_groups.
- Access: admins + configured groups.
- Chart option is hidden from users without chart permission.
- Chart permissioning is intentionally separate from topic-level category permissioning.
4. Workflow quick-filter/SPA behavior:
- Query-param driven transitions without full page reload.
- Persisted quick filters in local storage.
- Better view-state synchronization across route transitions.
- Ongoing list/kanban improvements remain intact (toggle behavior, stale-state refresh handling, overdue/list indicators).
5. Runtime/job reliability:
- Workflow jobs now follow Zeitwerk autoloading conventions.
- Scheduled jobs are visible/reliable without plugin-level manual requires.
- Transition enqueue path updated to new namespaced notifier job.
- WorkflowStat associations corrected to belongs_to for proper relation semantics.
## Technical Changes
- Added: app/controllers/discourse_workflow/workflow_charts_controller.rb
- Added: lib/discourse_workflow/charts_permissions.rb
- Added frontend route wiring for charts:
- assets/javascripts/discourse/discourse-workflow-route-map.js
- assets/javascripts/discourse/routes/discovery/workflow-charts.js
- assets/javascripts/discourse/controllers/discovery/workflow-charts.js
- Added chart connector:
- assets/javascripts/discourse/connectors/discovery-list-container-top/z-workflow-burndown-chart.gjs
- Extended quick filters connector for multi-view behavior and chart gating:
- assets/javascripts/discourse/connectors/discovery-list-container-top/workflow-quick-filters.gjs
- Updated plugin/list serialization and permission flags:
- plugin.rb
- lib/discourse_workflow/list_controller_extension.rb
- Added setting + locale updates:
- config/settings.yml
- config/locales/client.en.yml
- config/locales/server.en.yml
- Updated styles for chart and view controls:
- assets/stylesheets/common/workflow_common.scss
- Updated routes:
- config/routes.rb
- Zeitwerk alignment for jobs:
- moved jobs to namespaced paths:
- app/jobs/scheduled/discourse_workflow/*
- app/jobs/regular/discourse_workflow/*
- renamed classes to Jobs::DiscourseWorkflow::* to match file paths
- removed legacy plugin-level require workaround
- added scheduled-job eager-load wiring in lib/discourse_workflow/engine.rb
## New / Updated Tests
- Request specs:
- spec/requests/workflow_charts_controller_spec.rb
- permissions, routing, week windows, selected-workflow payload contract
- System specs:
- spec/system/workflow_charts_spec.rb
- chart rendering, view switching, period selection
- spec/system/workflow_quick_filters_spec.rb
- chart visibility gating in view selector
- Page objects:
- spec/system/page_objects/pages/workflow_discovery.rb (chart interactions/assertions)
- Job specs:
- spec/jobs/scheduled/discourse_workflow/daily_stats_spec.rb
- spec/jobs/scheduled/discourse_workflow/ai_transitions_spec.rb
- spec/jobs/scheduled/discourse_workflow/data_explorer_queries_completeness_spec.rb
- spec/jobs/regular/discourse_workflow/topic_arrival_notifier_spec.rb
- Fabricator:
- spec/fabricators/workflow_stat_fabricator.rb
## Validation
- Full plugin suite passes:
- bin/rspec plugins/discourse-workflow/spec
- Result: 76 examples, 0 failures
- Targeted request/system/job specs and formatting/rubocop checks pass for touched files.
## Notes
- Chart access model is intentionally broader than topic-level visibility and is controlled by workflow_charts_allowed_groups (plus admin access).
- If stricter chart visibility is desired later, it can be introduced as an optional mode without affecting current behavior.
3 إعجابات