Μετάβαση στο περιεχόμενο

Αρχιτεκτονική καθημερινών αποστολών

Οι καθημερινές αποστολές (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).

Ροή

  1. Το widget dashboard (ή η ολοκλήρωση μαθήματος) καλεί getStorage().missions.getDaily(userId, {todayIso}).
  2. Αν δεν υπάρχουν εγγραφές για αυτή την τοπική ημέρα, η γεννήτρια αναθέτει ένα νέο σύνολο (με σπόρο userId + date, εξαιρώντας τις αποστολές χθες).
  3. Η πρόοδος επαναξιολογείται έναντι υπαρχόντων δεδομένων (LessonProgress / ElementError / streak). Μια νεοολοκληρωμένη αποστολή αναστρέφει completed και, μια φορά, απονέμει την xp_reward της (ιδεμποτικό μέσω xp_awarded).
  4. Το celebrateMissions (celebration bus) αναπαράγει τον ήχο αποστολής + εμφανίζει φράση επαίνου· μια ολοκλήρωση όλων αναπαράγει τον μεγαλύτερο ήχο + έκρηξη confetti.

Κανόνες

  • Ντετερμινιστικό ανά (userId, date)· ένας χρήστης χρησιμοποιεί ένα backend αποθήκευσης, οπότε δεν απαιτείται ακριβής ισοτιμία μεταξύ backends.
  • Καμία παρακολούθηση πέρα από το UserMission· μη-παρακολουθήσιμοι έλεγχοι δεν ανατίθενται.
  • Οι αποστολές είναι συμπληρωματικές — μια αποτυχία δεν διακόπτει ποτέ τη ροή μαθήματος (όλες οι αναγνώσεις είναι αμυντικές). Καμία ποινή για χαμένες ημέρες.