Αρχιτεκτονική καθημερινών αποστολών¶
Οι καθημερινές αποστολές (EXP-010, Phase 56) προσθέτουν ενεργητικό, προαιρετικό κίνητρο επάνω στις παθητικές ανταμοιβές XP/badge/streak. Λειτουργούν και στις δύο λειτουργίες αποθήκευσης και προσθέτουν ακριβώς έναν πίνακα παρακολούθησης.
Στοιχεία¶
| Ενότητα | Ρόλος |
|---|---|
plugins/.../missions/templates.yaml |
Στατικός κατάλογος αποστολών (22 πρότυπα, 5 κατηγορίες), συγχρονίζεται στο frontend μέσω make sync-missions. |
MissionTemplate (Pydantic) |
Μορφή καταχώρησης καταλόγου (ρύθμιση, ΟΧΙ πίνακας). |
UserMission (μοντέλο) |
Ο ένας νέος πίνακας: ανάθεση ανά χρήστη/ημέρα + πρόοδος + φρουρός xp_awarded. Alembic 0021, Dexie v20, επιφάνεια συγχρονισμού (MUTABLE). |
lib/missions/generator.ts + generator.py |
Ντετερμινιστική (PRNG με σπόρο) προσαρμοστική επιλογή: μία επιλογή ανά θέση δυσκολίας, επιλεξιμότητα βάσει ιστορικού (νέος/ενεργός/βετεράνος), χωρίς διαδοχικές επαναλήψεις. |
lib/missions/checks.ts + SUPPORTED_CHECK_FUNCTIONS |
Μόνο έλεγχοι υπολογιζόμενοι από υπάρχοντα δεδομένα είναι ανατάξιμοι (οι άλλες 5 καταχωρήσεις καταλόγου παραμένουν μη-ανατεταγμένες μέχρι να υπάρξει παρακολούθηση). |
lib/missions/progress.ts |
Αμιγής check_function + στιγμιότυπο στατιστικών -> {current, target, completed}. |
lib/missions/schedule.ts |
Τοπική today (γλώσσα->ζώνη ώρας) + joker streak. |
storage/missions-dexie.ts |
Dexie: συλλέγει στιγμιότυπο στατιστικών "σήμερα", αναθέτει ιδεμποτικά, αξιολογεί, απονέμει XP κατά την ολοκλήρωση. |
missions plugin service.py |
Ίδια ροή έναντι SQLAlchemy για λειτουργία API (GET /today, POST /regenerate). |
Ροή¶
- Το widget dashboard (ή η ολοκλήρωση μαθήματος) καλεί
getStorage().missions.getDaily(userId, {todayIso}). - Αν δεν υπάρχουν εγγραφές για αυτή την τοπική ημέρα, η
γεννήτρια αναθέτει ένα νέο σύνολο (με σπόρο
userId + date, εξαιρώντας τις αποστολές χθες). - Η πρόοδος επαναξιολογείται έναντι υπαρχόντων δεδομένων
(LessonProgress / ElementError / streak). Μια νεοολοκληρωμένη
αποστολή αναστρέφει
completedκαι, μια φορά, απονέμει τηνxp_rewardτης (ιδεμποτικό μέσωxp_awarded). - Το
celebrateMissions(celebration bus) αναπαράγει τον ήχο αποστολής + εμφανίζει φράση επαίνου· μια ολοκλήρωση όλων αναπαράγει τον μεγαλύτερο ήχο + έκρηξη confetti.
Κανόνες¶
- Ντετερμινιστικό ανά (userId, date)· ένας χρήστης χρησιμοποιεί ένα backend αποθήκευσης, οπότε δεν απαιτείται ακριβής ισοτιμία μεταξύ backends.
- Καμία παρακολούθηση πέρα από το
UserMission· μη-παρακολουθήσιμοι έλεγχοι δεν ανατίθενται. - Οι αποστολές είναι συμπληρωματικές — μια αποτυχία δεν διακόπτει ποτέ τη ροή μαθήματος (όλες οι αναγνώσεις είναι αμυντικές). Καμία ποινή για χαμένες ημέρες.