Skip to content

Comments

feat(achievement): build AchievementChangelog#4565

Closed
wescopeland wants to merge 6 commits intoRetroAchievements:masterfrom
wescopeland:ach2-changelog
Closed

feat(achievement): build AchievementChangelog#4565
wescopeland wants to merge 6 commits intoRetroAchievements:masterfrom
wescopeland:ach2-changelog

Conversation

@wescopeland
Copy link
Member

This PR builds out the changelog UI/UX for achievement2.

The changelog is presented as a timeline, where the top-most item is the most recent change.
Screenshot 2026-02-16 at 12 01 26 PM

Initial development activities that occurred between creation and the first promotion are tucked away into an "Initial development" collapse:
Screenshot 2026-02-16 at 12 02 25 PM

The changelog is synthesized through 3 "eras" of audit history that have existed in RAWeb.

Era 1 (before April 2022)
We just know something was edited, but have no field-level details about those edits.
Screenshot_2026-02-15_at_4 21 49_PM

Era 2 (April 2022 - February 2024)
We know what was edited, but not how. We may know a specific field on an achievement changed, but we don't know what the field was before or after the change happened.
Screenshot_2026-02-15_at_4 22 35_PM

Era 3 (February 2024+)
We have a complete picture of what was edited and precisely how, with full before/after diffs.
Screenshot_2026-02-15_at_4 23 00_PM

Here's an example of an achievement with changes recorded through all 3 eras:
Screenshot 2026-02-16 at 12 03 17 PM

Event circles receive different colors based on the type of event:
Screenshot 2026-02-16 at 12 11 03 PM

Some achievements have no initial promotion event that is recorded anywhere in our audit log. For these, the Created circle is green instead of blue:
Screenshot 2026-02-16 at 12 12 06 PM

If the same type of edit occurs numerous times around a similar timestamp, we collapse this all into a single event:
Screenshot 2026-02-16 at 12 13 25 PM

If the same type of edit ultimately results in a net-zero change (ie: points changed from 4 to 5 and then back to 4), we don't show the event at all.

Good URLs to test with:
http://localhost:64000/achievement2/1 - achievement with changes in all 3 eras, created-as-promoted edge case, has a banned+deleted user who made changes
http://localhost:64000/achievement2/9 - similar to ID 1
http://localhost:64000/achievement2/69990 - many collapsed era 1 edits
http://localhost:64000/achievement2/233062 - promoted, demoted, and promoted again
http://localhost:64000/achievement2/145613 - promoted, demoted, promoted, and many changes
http://localhost:64000/achievement2/431345 - straightforward created, promoted, demoted, promoted diff with no changes recorded
http://localhost:64000/achievement2/561681 - never promoted (at least in my local DB), so no "Initial development" collapse in the UI
http://localhost:64000/achievement2/413233 - lots of initial development diffs

@wescopeland wescopeland requested a review from a team February 16, 2026 17:20
case 'type-set': {
const typeName = entry.fieldChanges[0]?.newValue;

return typeName ? t('Type set to {{typeName}}', { typeName }) : t('Type set');
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why does "Type removed" show like a diff, but "Type set" is just a statement?

Image

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, that doesn't flow very well. Updated in latest to be consistent:
Screenshot 2026-02-17 at 5 55 39 PM

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's actually less consistent now - especially given than you've changed points to use diff mechanics. I would expect removed to have just the red lined out value and set to have a green non-lined-out value.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated in latest:
Screenshot 2026-02-19 at 5 26 07 PM

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like there's an empty red box on the Type Set item.
image

wescopeland added a commit to wescopeland/RAWeb that referenced this pull request Feb 23, 2026
Resolves
RetroAchievements#4565 (comment).

Navigating to a URL like
http://localhost:64000/achievement2/9?tab=changelog should instantly
mount the UI with the "Changelog" tab set.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants