Forum teuk.org

πŸ—οΈ Mediabot v3 β€” Legendary Achievements Stay Secret Until You Earn Them

in Mediabot Β· started by TeuK Β· 5d ago

TeuK Β· 5d ago

Commit: 0533ef1
Version: 3.4dev-20260818_010348

MB658 adds a small bit of mystery to Mediabot’s Achievement system.

Some milestones are now deliberately hidden until they are actually earned. Their names, requirements, thresholds and progress do not appear in the normal public Achievement views while they are locked.

Once unlocked, the secret is revealed like any other achievement.


πŸ§™ Three legendary secrets

MB658 introduces three hidden milestones:

πŸŒ‘ The Witching Hour β€” 5,000 night messages
πŸ”₯ Eternal Flame     β€” 365 consecutive active days
πŸͺΆ Phoenix Rising    β€” return after 365 days away

They reuse counters that already existed:

night_messages
activity_streak_days
comeback_days

So MB658 does not add a new historical scan or new persistence model.


πŸ™ˆ Hidden means actually hidden

A locked secret is excluded from the normal public surfaces:

!achievements list
!achievements progress
next-goal calculations
!profil completion denominator

That last point matters. If !profil counted invisible achievements in its denominator, users could infer that hidden milestones existed.

MB658 removes locked secrets from that denominator as well.


πŸ”“ Reveal on unlock

Once the user earns a hidden achievement, it stops behaving like an invisible catalogue entry.

The unlocked achievement can then be shown normally with its real:

name
description
icon
threshold
progress

The secret exists to preserve discovery, not to make earned achievements disappear forever.


βš™οΈ Reusing the progression work from MB655–MB657

The three secrets sit on progression counters that Mediabot already maintains:

MB655 β†’ activity_streak_days
MB656 β†’ comeback_days
MB657 β†’ night_messages

That means MB658 mainly changes catalogue and presentation semantics.

No new aggregation path is required.


πŸ—„οΈ No new database access

The structural guard confirmed these query-site counts:

Mediabot/Achievements.pm
  SELECT    = 26
  prepare() = 31

Mediabot/UserCommands.pm
  SELECT    = 139
  prepare() = 126

MB658 adds:

0 new SELECT sites
0 new prepare() sites

So the feature does not increase database query pressure.


πŸ”Ž Source guard

The corrected MB658 source guard confirmed:

Hidden achievements : eternal_flame, phoenix_rising, witching_hour
Catalogue entries   : 35

OK: exactly three secret legendary achievements
OK: locked secrets stay out of public goal/progress views
OK: !profil denominator cannot leak locked secrets
OK: secrets reuse existing progress counters
OK: MB658 adds zero SELECT/prepare query sites
MB658_SOURCE_GUARD=OK
RC=0

An earlier diagnostic regex was discarded after it proved too greedy and matched unrelated catalogue entries. The implementation itself was fine; the guard was corrected to parse actual top-level Achievement blocks.


πŸ§ͺ Focused regression

The focused Achievement/profile regression passed:

PASSED : 710/710
RC=0

Coverage included public dispatch integrity, Achievement persistence, async processing, profile/career behaviour, progress persistence, threshold overrides, durable identity, streaks, comebacks, Night Owl progression, secret achievements and module structure sanity.


πŸ§ͺ Full-suite validation

The entire Mediabot test suite passed:

PASSED : 13570/13570
RC=0

Runtime:

870s

🧱 Operational scope

MB658 introduces:

no database schema change
no migration
no configuration change
no service change
no systemd change
no new historical scan

Committed scope:

CHANGELOG.md
VERSION
Mediabot/Achievements.pm
Mediabot/UserCommands.pm
t/cases/794_mb611_achievement_thresholds.t
t/cases/795_mb612_achievement_progress_view.t
t/cases/840_mb658_secret_achievements.t

✨ Commit

0533ef1
πŸ—οΈ Hide Legendary Achievements Until They Are Earned

Version:

3.4dev-20260818_010348

Mediabot already knew how to measure the milestones.

MB658 simply learned that some magic is better when nobody tells you where to look.

You must be logged in to reply.