- Shipped
- September 7, 2026 at 6:41 AM UTC
- Author
- Kamo
- Commit
- 5c4c4fa
The second entry in the catalogue, and the first that is a track rather than an event. One level per stretch of Growth Hub missions a member has had APPROVED: 1, 5, 15, 50, 100, 500, 1000, 2000, 5000 -> I..IX. APPROVED is the Growth Hub's own definition of done — a member's standing on a request is derived from their latest submission, and only APPROVED takes it out of their queue for good. Counting what was merely SENT would pay a level out for a screenshot an admin then rejects, on a running total nothing walks back down: the level is committed and its popup has been read. RARE rather than EPIC, and that is a judgement about the whole track. Rarity is fixed per achievement and drives the celebration on EVERY level-up, so an EPIC screen-shake for a member's first mission would be as wrong as a COMMON shimmer for their five-thousandth. `rocket` is already in the front end's sprite map, so the page needs no change to draw it. Also here: - **************** — the aggregate SecurityService reads on every achievements request. Counted in the database rather than by loading the rows, because the only caller wants the number and a member's history only grows. - The pending-unlock finder now tie-breaks on `levelReached` ascending. Every level one award crosses is written with the SAME `unlockedAt` — one timestamp per award, not per level — so until now a member who vaulted from nothing to level V in one recount had five rows the database was free to return in any order. Walking somebody backwards through their own progress is the exact failure that finder's "oldest first" was written to avoid; with a nine-level track in the catalogue it stops being hypothetical.