Aller au contenu

Configuration

tilttek/progression-bundle
tilttek_progression:
    store: doctrine            # or memory, for tests
    connection: default
    timezone: America/Toronto  # caps, calendar seasons, and a member's day when nothing says theirs
    tracks:
        player:
            curve: { type: quadratic, base: 50, levels: 60 }
            subject: member    # or object: the gesture's object, such as a character
            seasons: { length: quarter }
            rules:
                games: { verbs: ['game.played'], experience: 20, cap: { amount: 100, period: day } }
                wins: { verbs: ['game.won'], experience: 5, per_quantity: false, context: { ranked: true } }
            milestones:
                veteran: { level: 10 }
                thousand: { experience: 1000 }
        summer-event:
            curve: { type: table, thresholds: [100, 300, 600] }
            seasons:
                named:
                    - { code: summer-2026, start: '2026-06-21', end: '2026-09-22' }
            rules: { games: { verbs: ['game.*'], experience: 10 } }
    streaks:
        daily-play: { verbs: ['game.played'], unit: day, grace: { allowed: 1, window: 7 } }
        weekly-writing: { verbs: ['page.written'], unit: week }
    timezone_context: timezone # the context key that carries the member's timezone; null for the configured one
    projection: progression
    translation_domain: tilttek_progression
    privacy:
        member_kind: member
OptionPar défautSignification
storedoctrinedoctrine ou memory
connectiondefaultLa connexion DBAL des cinq tables
timezoneUTCLe fuseau horaire des plafonds, des saisons du calendrier et des journées des membres
tracks.<name>.curverequistype (linear, quadratic, exponential, table), step, base, factor, levels (2 à 1000, 100 par défaut), thresholds
tracks.<name>.subjectmembermember ou object
tracks.<name>.seasonsaucunelength (month, quarter, year) ou named (une liste de code, start, end)
tracks.<name>.rules.<name>—verbs (requis), experience (requis, au moins 1), per_quantity (true), cap (amount, period : day, week, month, year, ever), context
tracks.<name>.milestones.<code>—experience (au moins 1) ou level (au moins 2)
streaks.<name>—verbs (requis), unit (day ou week), grace (allowed au moins 1, window au moins 2), context
timezone_contextnullLa clé du contexte de l'activité qui contient le fuseau horaire du membre
projectionprogressionLe nom sous lequel le point de reprise de la projection est gardé
translation_domaintilttek_progressionLe domaine des textes des gabarits
privacy.member_kindmemberLe type de la référence de membre d'une personne concernée

Les noms des pistes, des règles, des jalons et des séries sont gardés tels qu'écrits (daily-play reste daily-play) ; les noms de contexte suivent la normalisation de Symfony, the-role devenant the_role. Une courbe à qui il manque son palier, sa base, son facteur ou ses seuils, un niveau de jalon au-delà de la courbe, une grâce qui ne couvre aucun trou, un fuseau horaire qui n'existe pas échouent à la compilation du conteneur, avec l'InvalidProgression de la bibliothèque. Une valeur du mauvais genre ou hors limites échoue avec l'InvalidConfigurationException de Symfony.

Les services ne gardent aucun état d'une requête à l'autre : ils sont sûrs dans un worker. Les magasins en mémoire, pour les tests, se vident quand le noyau est réinitialisé, et la projection oublie ce que sa dernière reconstruction a gardé pour le rejeu.